Migração entre ambientes de tempo de execução¶
É possível migrar um app Streamlit entre tempos de execução de warehouse e tempos de execução de contêiner atualizando as propriedades RUNTIME_NAME e COMPUTE_POOL do app. No entanto, alguns recursos são compatíveis apenas com um tipo de ambiente de tempo de execução, portanto, há algumas considerações ao migrar um app entre ambientes de tempo de execução.
Esta página mostra uma lista de verificação para migrar do tempo de execução de warehouse para o de contêiner. Cada item inclui um breve resumo e um link para informações detalhadas, quando necessário.
Pré-requisitos¶
Antes de começar, ajuste seu app de tempo de execução de warehouse no local para se preparar para a migração.
- Opcional: faça backup do código do app
Se o código-fonte do seu app ainda não estiver armazenado em um sistema de controle de versão, um repositório externo ou um diretório local, faça backup dele para evitar possível perda de dados durante a migração.
- Assegure que seu app não tenha sido criado com ROOT_LOCATION
Apps criados com o parâmetro ROOT_LOCATION só podem usar tempos de execução de warehouse. Se seu app foi criado com ROOT_LOCATION, atualize-o para usar o parâmetro FROM.
Consulte: Explicação dos diferentes tipos de objetos Streamlit
- Atualize seu app para o Streamlit 1.50 ou mais recente
Certifique-se de que seu app e todas as dependências sejam compatíveis com o Streamlit 1.50 ou mais recente.
Consulte: Gerenciamento de dependências para o app Streamlit
- Atualize seu app somente para o Python 3.11
Os tempos de execução de contêiner são compatíveis apenas com o Python 3.11, enquanto os tempos de execução de warehouse são compatíveis com o Python 3.9, 3.10 e 3.11. Certifique-se de que seu app e todas as dependências sejam compatíveis com o Python 3.11.
Consulte: Gerenciamento de dependências para o app Streamlit
- Opcional: instale localmente a Snowflake CLI 3.14.0 ou mais recente
Se você implantar apps usando a Snowflake CLI, precisará da versão 3.14.0 ou posterior para oferecer suporte à sintaxe da implantação do tempo de execução de contêiner. Verifique sua versão com
snow --version. Se preferir, use as versões 3.12.0 - 3.13.1 se usar o sinalizador--experimental.Consulte: Criação e implementação de aplicativos Streamlit usando Snowflake CLI
Recursos e permissões¶
Seu app pode continuar usando o warehouse de consulta existente, mas você precisa configurar um pool de computação para o tempo de execução de contêiner.
- Criação e concessão de acesso a um pool de computação
O proprietário do app precisa de privilégios USAGE no pool de computação em que o tempo de execução de contêiner será executado. Os visualizadores do app não precisam de nenhuma permissão de pool de computação.
Consulte: Privilégios necessários para criar e usar um aplicativo Streamlit
- Criação e concessão de acesso a uma integração de acesso externo
Os tempos de execução de contêiner fazem parte de um conjunto mínimo de pacotes pré-instalados. Se o app exigir pacotes adicionais ou versões diferentes dos pacotes pré-instalados, use um índice de pacotes externo como PyPI. Para permitir que seu app acesse um índice de pacotes externo, crie uma integração de acesso externo (External Access Integration, EAI) e conceda privilégios USAGE na EAI para o proprietário do app.
Gerenciamento de dependências¶
- Substituir
environment.ymlporpyproject.tomlourequirements.txt Se você precisar bloquear qualquer versão de dependência ou especificar dependências adicionais, adicione um arquivo
pyproject.tomlourequirements.txtà raiz do diretório do projeto. Os pacotes podem ter nomes diferentes entre o Conda e o PyPI, portanto, certifique-se de usar os nomes de pacote corretos para seu repositório de artefatos.Consulte: Gerenciamento de dependências para o app Streamlit
- Alteração do app para definir as integrações de acesso externo
Se suas dependências incluírem quaisquer especificadores de versão ou se você instalar algum pacote adicional, deverá atribuir uma integração de acesso externo ao app. A razão disso é para que ele possa acessar o índice de pacotes especificado no arquivo de dependências. O PyPI é o índice de pacotes padrão.
Consulte: Gerenciamento de dependências para o app Streamlit
Alterações no código¶
- Substituir
get_active_session()porst.connection("snowflake").session() Quando você usa um tempo de execução de contêiner, o servidor Streamlit processa vários visualizadores ao mesmo tempo.
get_active_session()não é thread-safe, portanto você deve usarst.connection("snowflake")para gerenciar sua conexão.Consulte: Gerenciamento de segredos e configuração do app Streamlit
- Revisão do código e implementação do cache
Como os tempos de execução de contêiner compartilham recursos de disco, computação e memória entre as sessões dos visualizadores, você deve usar
st.cache_resourceoust.cache_datapara armazenar em cache cálculos caros ou dados que não mudam com frequência.Consulte: Understanding Streamlit’s client-server architecture e Caching overview na documentação do Streamlit.
- Garantia de segurança de thread
Ao usar um tempo de execução de contêiner, o código do seu app deve ser thread-safe para processar vários visualizadores ao mesmo tempo. Cada visualizador recebe uma instância exclusiva do script do app, mas é necessário revisar o código importado para verificar se há estado compartilhado ou variáveis globais que possam levar a condições de corrida ou comportamento inconsistente. Se você introduzir novos threads em um app Streamlit, revise a arquitetura do Streamlit e não use os comandos do Streamlit em seus threads personalizados.
Consulte: Multithreading in Streamlit na documentação do Streamlit.
- Substituir o uso de
_snowflakepor equivalentes nativos do Python _snowflakeé um módulo privado que só está disponível em funções definidas pelo usuário (User-Defined Functions, UDFs) e procedimentos armazenados. Os tempos de execução de warehouse herdam o acesso ao_snowflake, mas os tempos de execução de contêiner não. Se seu app usa_snowflake, substitua-o por equivalentes nativos do Python, como o Conector Snowflake para Python. Se necessário, use procedimentos armazenados para acessar segredos.Consulte: Gerenciamento de segredos e configuração do app Streamlit
- Atualização de caminhos de arquivos e organização
A raiz do seu local de origem é o diretório de trabalho do app. Para a maioria das bibliotecas Python, o app precisa usar caminhos relativos da raiz do local de origem. No entanto, alguns comandos Streamlit exigem caminhos relativos ao arquivo de ponto de entrada. Se o arquivo de ponto de entrada estiver em um subdiretório, verifique os caminhos em seu código de acordo com isso.
Verifique os locais de
secrets.tomleconfig.toml.
Alterações na configuração do app¶
- Alterar o app para definir o pool de computação, o warehouse de consultas e o tempo de execução
Quando estiver pronto para alternar o tipo de tempo de execução do seu app, você poderá usar o Snowsight ou SQL.
Faça login no Snowsight.
No menu de navegação, clique em Projects » Streamlit e selecione seu app.
No canto superior direito, selecione o menu de três pontos verticais
e selecione App settings.Para Python environment, selecione Run on container.
No menu suspenso Compute pool, selecione seu pool de computação.
No menu suspenso Query warehouse, selecione seu warehouse de consultas.
Para salvar as alterações e fechar a caixa de diálogo, selecione Save.
ALTER STREAMLIT my_app COMPUTE_POOL = my_compute_pool QUERY_WAREHOUSE = my_warehouse RUNTIME_NAME = SYSTEM$ST_CONTAINER_RUNTIME_PY3_11;
O app levará alguns minutos para ser reinicializado e criar o novo contêiner.
Consulte: Ambientes de tempo de execução para apps Streamlit