Migre os serviços incluídos num pacote antigos

A maioria das funcionalidades fornecidas pelos serviços agrupados antigos é agora fornecida pelas bibliotecas de cliente do Google Cloud. Para mais informações, consulte as alternativas recomendadas indicadas abaixo.

Se a migração para uma solução desagrupada não for uma opção para o seu projeto, pode continuar a usar os serviços agrupados antigos nas suas apps Python 3 como alternativa. Esta abordagem dá-lhe flexibilidade para mudar para serviços desagrupados mais tarde no ciclo de migração.

Depois de migrar os serviços agrupados antigos, pode continuar a usar o App Engine ou migrar para o Cloud Run. O Cloud Run foi concebido para melhorar a experiência do App Engine e incorpora muitas das melhores funcionalidades do ambiente padrão e do ambiente flexível. Para comparar funcionalidades e saber como migrar, consulte o guia de comparação do App Engine e do Cloud Run.

Google Cloud oferece produtos autónomos que oferecem uma funcionalidade semelhante à de alguns dos serviços incluídos no tempo de execução do Python 2. Para os serviços incluídos que não estão disponíveis como produtos separados no Google Cloud, como processamento de imagens, pesquisa e mensagens, este guia recomenda fornecedores terceiros ou outras soluções alternativas.

Esta página apresenta o caminho de migração para cada serviço incluído.

Compreender as Google Cloud autorizações

Uma vez que a sua app migrada e os serviços Google Cloud que utiliza já não estão a ser executados no mesmo ambiente "em sandbox", a sua app precisa de autorização para aceder a cada serviço. Por exemplo, para interagir com o Firestore no modo Datastore (Datastore) ou o Cloud Tasks, a sua app tem de fornecer as credenciais de uma conta autorizada a aceder a esses serviços.

Por predefinição, as apps no tempo de execução padrão do App Engine fornecem as credenciais da conta de serviço predefinida do App Engine, que está autorizada a aceder a bases de dados no mesmo projeto que a app.

Se alguma das seguintes condições for verdadeira, tem de usar uma técnica de autenticação alternativa que forneça explicitamente credenciais:

  • A sua app e a base de dados do Memorystore estão emGoogle Cloud projetos diferentes.

  • Alterou as funções atribuídas à conta de serviço predefinida do App Engine.

Para informações sobre técnicas de autenticação alternativas, consulte o artigo Configurar a autenticação para aplicações de produção de servidor a servidor.

Autenticação para desenvolvimento local

Para desenvolver ou testar a sua app localmente, recomendamos que crie e use uma conta de serviço. Não use a conta de serviço predefinida do App Engine, uma vez que tem um nível elevado de autorizações para tudo no seu projeto. Em alternativa, crie e use uma conta de serviço com o nível mais baixo de autorizações de que precisa para a sua tarefa específica de desenvolvimento e teste.

Para obter instruções sobre como configurar uma conta de serviço e associá-la à sua app, consulte o artigo Obtenha e faculte manualmente as credenciais da conta de serviço.

Instalar bibliotecas de cliente

A forma mais fácil de usar os Google Cloud serviços a partir de uma app Python é instalar a biblioteca cliente Python do serviço Google Cloud .Os serviços também fornecem JSON REST e outras interfaces. Os passos para instalar as bibliotecas cliente no tempo de execução do App Engine são diferentes para apps Python 2 e apps Python 3.

Instalar bibliotecas para apps Python 2

Para instalar uma biblioteca para a sua app usar quando estiver em execução no tempo de execução do Python 2:

  1. Crie um diretório para armazenar as suas bibliotecas de terceiros, como lib/.

  2. Crie um ficheiro requirements.txt na mesma pasta que o ficheiro app.yaml e adicione o nome de uma biblioteca de cliente.

    Por exemplo, pode usar o seguinte ficheiro para instalar bibliotecas para o Pub/Sub e o Cloud Tasks:

    google-cloud-pubsub
    google-cloud-tasks
    
  3. Use pip install para instalar as bibliotecas na pasta que criou. Por exemplo:

    pip install -t lib -r requirements.txt
  4. No ficheiro app.yaml da sua app, especifique as bibliotecas Google RPC e setuptools necessárias, bem como a biblioteca SSL opcional na secção libraries:

    libraries:
    - name: grpcio
      version: 1.0.0
    - name: setuptools
      version: 36.6.0
    - name: ssl
      version: latest
    

    Algumas bibliotecas cliente não precisam da biblioteca SSL. Se não incluir a biblioteca SSL para uma biblioteca de cliente que a necessite, é apresentado um erro de SSL no Explorador de registos quando a sua app recebe um pedido.

  5. Crie um ficheiro appengine_config.py na mesma pasta que o ficheiro app.yaml, se ainda não tiver um. Adicione o seguinte ao ficheiro appengine_config.py:

    # appengine_config.py
    import pkg_resources
    from google.appengine.ext import vendor
    
    # Set path to your libraries folder.
    path = 'lib'
    # Add libraries installed in the path folder.
    vendor.add(path)
    # Add libraries to pkg_resources working set to find the distribution.
    pkg_resources.working_set.add_entry(path)

    Certifique-se de que usa o módulopkg_resources, que garante que a sua app usa a distribuição correta das bibliotecas de cliente.

    O ficheiro appengine_config.py no exemplo anterior pressupõe que a pasta lib está localizada no diretório de trabalho atual. Se não puder garantir que lib está sempre no diretório de trabalho atual, especifique o caminho completo para a pasta lib. Por exemplo:

    import os
    path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib')
  6. Implemente a app.

O App Engine carrega todas as bibliotecas no diretório que especificou no ficheiro appengine_config.py para o tempo de execução do Python 2.

Instalar bibliotecas para apps Python 3

Para instalar uma biblioteca para a sua app usar quando estiver em execução no tempo de execução do Python 3:

  1. Adicione o nome da biblioteca ao ficheiro requirements.txt da sua app. Por exemplo:

    google-cloud-ndb
    
  2. Implemente a app.

O App Engine carrega automaticamente todas as bibliotecas indicadas no ficheiro requirements.txt para o tempo de execução do Python 3.

Caminhos de migração para serviços agrupados do App Engine

Blobstore

Para armazenar e obter dados, use o Cloud Storage através das bibliotecas de cliente da nuvem. Para começar, consulte o artigo Usar o Cloud Storage e o guia Migrar do Blobstore para o Cloud Storage. Para simular esta migração, adicione a utilização do Blobstore a uma app de exemplo e migre para o Cloud Storage.

Armazenamento de dados

Se a sua app Python 2 usar o NDB para interagir com o Datastore, migre para a biblioteca Cloud NDB. O Cloud NDB destina-se principalmente a ser uma ferramenta de transição para migrar apps Python 2. Recomendamos que as apps Python 3 usem a biblioteca de cliente do modo Datastore.

Para ver detalhes, consulte o artigo Migrar para o Cloud NDB. Para simular esta migração com uma app de exemplo, consulte o artigo Migrar do ndb do App Engine para o NDB do Cloud.

Imagens

Pode publicar imagens a partir do Cloud Storage, publicá-las diretamente ou usar uma rede de fornecimento de conteúdo (RFC) de terceiros.

Para redimensionar, converter e manipular imagens, use uma biblioteca de processamento de imagens, como: Pillow ou uma interface Python para o ImageMagick.

Para usar uma destas bibliotecas de terceiros, adicione a biblioteca como uma dependência e atualize o seu código para chamar as APIs da biblioteca.

O serviço App Engine Images também oferecia funcionalidades para evitar pedidos dinâmicos à sua aplicação através do processamento da alteração do tamanho das imagens com um URL de fornecimento. Se quiser uma funcionalidade semelhante, pode gerar as imagens redimensionadas antecipadamente e carregá-las para o Cloud Storage para publicação. Em alternativa, pode usar um serviço de rede de fornecimento de conteúdo (RFC) de terceiros que ofereça o redimensionamento de imagens.

Registo

Recomendamos que atualize a sua app para usar o Cloud Logging, que suporta funcionalidades como a visualização de registos no Explorador de registos, a transferência de registos, a filtragem de mensagens por gravidade e a correlação de mensagens da app com pedidos específicos. Em alternativa, se preferir a simplicidade à precisão dos dados, pode escrever registos estruturados em stdout ou stderr. Para mais informações, consulte os artigos Escrever e ver registos e Migrar para o Cloud Logging.

Correio

Para enviar emails, use um fornecedor de email de terceiros, como o SendGrid, Mailgun ou Mailjet. Todos estes serviços oferecem APIs para enviar emails a partir de aplicações. De momento, não está disponível uma alternativa de terceiros recomendada para mensagens recebidas.

cache de memória

Para colocar em cache os dados da aplicação, use o Memorystore for Redis.

Para obter detalhes, consulte o artigo Migre o Memcache para o Memorystore. Para simular esta migração, adicione a utilização do Memcache a uma app de exemplo e migre para o Memorystore for Redis.

Para apps que usam o Memcache apenas para reduzir a latência dos pedidos NDB (ou Cloud NDB), use o suporte integrado do Cloud NDB para o Redis em vez do Memcache ou do Memorystore for Redis.

Módulos

Para obter informações e modificar os serviços em execução da sua aplicação, use uma combinação de variáveis de ambiente e a API App Engine Admin:

Informações do serviço Como aceder
ID da aplicação atual GAE_APPLICATION variável de ambiente
ID do projeto atual GOOGLE_CLOUD_PROJECT variável de ambiente
Nome do serviço atual GAE_SERVICE variável de ambiente
Versão atual do serviço GAE_VERSION variável de ambiente
ID da instância atual GAE_INSTANCE variável de ambiente
Nome de anfitrião predefinido Método da API Admin apps.get
Lista de serviços Método da API Admin apps.services.list
Lista de versões de um serviço Método da API Admin apps.services.versions.list
Versão predefinida de um serviço, incluindo divisões de tráfego Método da API Admin apps.services.get
Lista de instâncias em execução para uma versão Método da API Admin apps.services.versions.instances.list

Para mais informações sobre os dados disponíveis acerca dos serviços em execução da sua aplicação, consulte o ambiente de execução do Python 3 .

Espaços de nomes

A API Namespaces permite que as apps multiinquilino dividam os dados entre inquilinos simplesmente especificando uma string de espaço de nomes exclusiva para cada inquilino.

Embora o Datastore suporte a multilocação diretamente, outros Google Cloud serviços não o fazem. Se a sua app multi-inquilino usar outros Google Cloud serviços, tem de processar a multi-inquilino manualmente. Para ter instâncias de serviços completamente isoladas, pode criar novos projetos programaticamente através da API Cloud Resource Manager e aceder a recursos em vários projetos.

OAuth

Em vez de usar o serviço OAuth do App Engine para validar tokens OAuth 2.0, use o método oauth2.tokeninfo da API OAuth 2.0.

Alojamento de qualquer base de dados de pesquisa de texto completo, como o Elasticsearch, no Compute Engine e acesso à mesma a partir do seu serviço.

Fila de tarefas

O serviço App Engine Task Queue está disponível em dois modos diferentes. A migração de qualquer um dos pontos aponta para dois produtos da nuvem autónomos diferentes.

Envie tarefas

Em vez do serviço de tarefas push da fila de tarefas do App Engine para a execução de código assíncrona, use as bibliotecas cliente do Cloud Tasks com um ponto final do ambiente padrão do Python 3 como destino. Para mais informações, consulte o artigo Migrar filas de envio para o Cloud Tasks.

Para simular esta migração com uma app de exemplo, consulte os artigos Como usar filas push do App Engine em apps Flask e migrar para o Cloud Tasks.

Extrair tarefas

Se usar o serviço de tarefas de obtenção da fila de tarefas, por exemplo, colocar tarefas ou mensagens em fila para serem processadas por trabalhadores separados, o Cloud Pub/Sub pode ser uma boa alternativa. Oferece funcionalidades e garantias de entrega semelhantes. Tal como outros serviços na nuvem, o Pub/Sub oferece bibliotecas de cliente convenientes para aceder ao serviço. Para mais informações, consulte os artigos Escrever e responder a mensagens do Pub/Sub e Migração de tarefas de obtenção da fila de tarefas para o Pub/Sub.

Para simular esta migração com uma app de exemplo, consulte Como usar tarefas de obtenção do App Engine numa app de exemplo e migrar para o Pub/Sub.

Obtenção de URL

Por predefinição, o tempo de execução do Python 2.7 usa o serviço URL Fetch para processar pedidos HTTP(S) de saída, mesmo que use bibliotecas Python padrão para emitir esses pedidos.

Se a sua app usar APIs URL Fetch diretamente, por exemplo, para fazer pedidos assíncronos, recomendamos que migre para uma biblioteca Python padrão, como a biblioteca Requests.

Para mais informações, consulte o artigo Migrar pedidos de saída.

Autenticação do utilizador

Para uma alternativa à API Users, use qualquer um dos mecanismos de autenticação baseados em HTTP descritos na página Autenticação de utilizadores.