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.

Consulte: Acesso à rede externa no Streamlit in Snowflake

Gerenciamento de dependências

Substituir environment.yml por pyproject.toml ou requirements.txt

Se você precisar bloquear qualquer versão de dependência ou especificar dependências adicionais, adicione um arquivo pyproject.toml ou requirements.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() por st.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 usar st.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_resource ou st.cache_data para 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 _snowflake por 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.toml e config.toml.

Consulte: Organizar os arquivos do seu app Streamlit

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.

  1. Faça login no Snowsight.

  2. No menu de navegação, clique em Projects » Streamlit e selecione seu app.

  3. No canto superior direito, selecione o menu de três pontos verticais Mais ações para planilha e selecione App settings.

  4. Para Python environment, selecione Run on container.

  5. No menu suspenso Compute pool, selecione seu pool de computação.

  6. No menu suspenso Query warehouse, selecione seu warehouse de consultas.

  7. Para salvar as alterações e fechar a caixa de diálogo, selecione Save.

O app levará alguns minutos para ser reinicializado e criar o novo contêiner.

Consulte: Ambientes de tempo de execução para apps Streamlit