Migre serviços do ambiente padrão para o ambiente flexível

O ambiente flexível do App Engine não fornece as bibliotecas de API presentes no SDK do App Engine. Se decidir migrar a sua aplicação do ambiente padrão do App Engine para o ambiente flexível, tem de atualizar o seu código para usar serviços e APIs que estejam disponíveis em Google Cloud todos os ambientes.

Consulte as secções seguintes para ver instruções sobre como migrar APIs e serviços agrupados antigos específicos do ambiente padrão para o ambiente flexível.

Diferenças entre o ambiente padrão e o ambiente flexível

Além das principais diferenças descritas aqui, os caminhos com /_ah/ não são bloqueados no ambiente flexível. Se a sua app no ambiente padrão usar caminhos com /_ah/ para aceder a serviços específicos, consulte a secção do serviço adequado abaixo.

Identidade da app

Quando executada no ambiente flexível, pode usar uma combinação de variáveis de ambiente e o serviço de metadados do Compute Engine para obter informações sobre a sua aplicação:

Informações da aplicação Como aceder
ID da aplicação / projeto A variável de ambiente GOOGLE_CLOUD_PROJECT ou o recurso /project/project-id no servidor de metadados
Nome de anfitrião predefinido Método apps.get da API App Engine Admin
Nome da conta de serviço O recurso /instance/service-accounts no servidor de metadados
Chave de acesso OAuth 2.0 O recurso /instances/service-accounts no servidor de metadados. Consulte a documentação sobre a autenticação com credenciais da conta de serviço do Compute Engine

A seguinte funcionalidade não está diretamente disponível:

  • Não existe um contentor do Cloud Storage predefinido para o seu projeto. Para usar um contentor na sua aplicação, pode criar um contentor do Cloud Storage e usar o ID do projeto como o nome do contentor. Em seguida, pode usar a GOOGLE_CLOUD_PROJECTvariável de ambiente na sua aplicação como o nome do contentor.
  • Não pode assinar blobs com a conta de serviço predefinida. Pode contornar esta situação usando a API Identity and Access Management (IAM) ou fornecendo uma chave privada da conta de serviço à sua aplicação quando a implementar.
  • Da mesma forma, não existe uma API incorporada para obter certificados públicos para validar assinaturas. No entanto, os certificados públicos de cada conta de serviço estão disponíveis em https://www.googleapis.com/robot/v1/metadata/x509/{service account email}.
  • Tenha em atenção que, se usar o tempo de execução Java, as APIs SystemProperty do App Engine não estão disponíveis para o ambiente flexível do App Engine. No entanto, pode definir variáveis de ambiente no app.yaml e usar System.env para obter os valores, conforme descrito em Definir variáveis de ambiente.

Para mais detalhes sobre as variáveis de ambiente, consulte as páginas de vista geral do tempo de execução ou a app.yaml página de referência.

Discussões em segundo plano

Uma vez que o ambiente flexível não tem limitações de sandbox, pode criar threads ou processos que existam fora do ambiente de pedido. Normalmente, não precisa de usar nada além das ferramentas de processamento múltiplo ou de processamento em simultâneo incorporadas no seu idioma.

Blobstore

A utilização do serviço Blobstore foi amplamente substituída no ambiente padrão e no ambiente flexível pelo Cloud Storage. Use as Google Cloud bibliotecas de cliente para armazenar e obter dados no Cloud Storage.

Para mais informações, consulte o artigo Usar o Cloud Storage

Capacidades

Não existe nenhuma funcionalidade semelhante ao serviço Capabilities disponível fora do ambiente padrão.

Websockets

O ambiente flexível do App Engine suporta WebSockets. Para mais informações, consulte o artigo Criar ligações persistentes com WebSockets.

Firestore no modo Datastore (Datastore)

Pode aceder ao Datastore em qualquer lugar através da API Datastore. Use as Google Cloud bibliotecas cliente para armazenar e obter dados do Datastore.

Os mesmos dados do Datastore estão disponíveis independentemente de usar as bibliotecas do App Engine, as Google Cloud bibliotecas de cliente ou chamar a API diretamente.

Se estiver a usar a biblioteca Python ndb e preferir o acesso ao Datastore no estilo NDB, recomendamos que migre para o Cloud NDB. Consulte o repositório do Cloud NDB para mais informações.

Embora as bibliotecas cliente do Cloud NDB e do Datastore sejam suportadas no Python 2 e 3, e funcionem para o ambiente padrão ou o ambiente flexível do App Engine, bem como para apps não pertencentes ao App Engine, o respetivo objetivo principal é ajudar os programadores do Python 2 a afastar-se dos serviços antigos incluídos, como o App Engine ndb. O Cloud NDB tem o objetivo adicional de preservar a experiência do utilizador do NDB.

Para mais informações, consulte o artigo Usar o Datastore.

Imagens

O serviço Images não está disponível fora do ambiente padrão. No entanto, pode publicar facilmente imagens diretamente a partir da sua aplicação ou diretamente do Cloud Storage.

Se precisar de processar imagens, pode instalar e usar qualquer biblioteca de processamento de imagens, como:

O serviço 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 publicação. 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 redimensionamento de imagens.

Para mais recursos, consulte os seguintes guias:

Registo

Tal como no ambiente padrão, o registo funciona automaticamente no ambiente flexível. No entanto, os registos são recolhidos num formato diferente. Os registos não são agrupados por pedidos e os registos de stdout e stderr são recolhidos separadamente.

Se quiser ter mais controlo sobre o registo de aplicações, a capacidade de agrupar registos e a capacidade de registar metadados adicionais, pode usar a API Cloud Logging diretamente com as Google Cloud bibliotecas de cliente.

Para mais detalhes, consulte o artigo Escrever registos de aplicações.

Correio

O serviço de correio do App Engine não está disponível fora do ambiente padrão. Tem de usar um fornecedor de email de terceiros, como o SendGrid, Mailgun ou Mailjet, para enviar emails. Todos estes serviços oferecem APIs para enviar emails a partir de aplicações executadas em qualquer lugar.

Para mais detalhes, consulte o artigo Enviar mensagens com serviços de terceiros.

cache de memória

O serviço Memcache não está disponível no ambiente flexível do App Engine. Para colocar em cache os dados da aplicação, use o Memorystore for Redis.

Módulos

A API Modules não está disponível fora do ambiente padrão. No entanto, pode usar uma combinação de variáveis de ambiente e a API App Engine Admin para obter informações sobre os serviços em execução da sua aplicação e modificá-los:

Informações do serviço Como aceder
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 apps.get da API App Engine Admin
Lista de serviços Método apps.services.list da API App Engine Admin
Lista de versões de um serviço Método apps.services.versions.list da API App Engine Admin
Versão predefinida de um serviço, incluindo divisões de tráfego Método apps.services.get da API App Engine Admin
Lista de instâncias em execução para uma versão Método apps.services.versions.instances.list da API App Engine Admin

Também pode usar a API App Engine Admin para implementar e gerir serviços e versões na sua aplicação.

Para mais detalhes sobre as variáveis de ambiente, consulte as páginas de vista geral do tempo de execução ou a app.yaml página de referência.

Espaços de nomes

Fora do ambiente padrão, apenas o Datastore suporta multitenancy diretamente. Para outros serviços, tem de gerir a multilocação 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

O serviço OAuth não está disponível no ambiente flexível. Se precisar de validar tokens OAuth 2.0, pode fazê-lo com o método oauth2.tokeninfo da API OAuth 2.0.

Remota

O serviço de API Remote não é aplicável ao ambiente flexível. A maioria dos serviços de apoio, como o Datastore, que são acessíveis a partir do ambiente flexível também são acessíveis a partir de qualquer lugar.

O serviço de pesquisa está atualmente indisponível fora do ambiente flexível. Pode alojar qualquer base de dados de pesquisa de texto completo, como o Apache Solr no Compute Engine ou o Elasticsearch Service no Elastic Cloud e aceder a ele a partir do ambiente padrão e do ambiente flexível.

Tomadas

O ambiente flexível não tem restrições de sandbox, pelo que pode abrir e usar sockets de saída normalmente.

Fila de tarefas

Para usar o serviço de filas de tarefas push fora do ambiente padrão de primeira geração, pode usar o Google Tasks.

Em muitos casos em que pode usar filas de obtenção, como colocar em fila tarefas ou mensagens que vão ser obtidas e processadas por trabalhadores separados, o Pub/Sub pode ser uma boa alternativa, uma vez que oferece uma funcionalidade e garantias de entrega semelhantes.

Obtenção de URL

O serviço de obtenção de URL não está disponível no ambiente flexível. No entanto, não existem restrições de sandbox, pelo que a sua app pode usar qualquer biblioteca HTTP para obter a funcionalidade URL Fetch.

Se usar Python, recomendamos que use a biblioteca Requests. Se usar Java, recomendamos que use a biblioteca cliente HTTP da Google para Java ou o OkHttp.

Utilizadores

O serviço Users não está disponível fora do ambiente padrão. Pode usar qualquer mecanismo de autenticação baseado em HTTP no ambiente flexível, como:

  • Google Identity Platform, que oferece muitas opções para autenticação e autorização de contas de utilizadores Google.
  • Firebase Authentication, que oferece autenticação através de nome de utilizador/palavra-passe e identidade federada através do Google, Facebook, Twitter e muito mais.
  • Auth0, que fornece autenticação com vários fornecedores de identidade e funcionalidades de início de sessão único.
  • OAuth 2.0 e OpenID Connect que fornecem uma identidade federada do fornecedor à sua escolha. A Google é um fornecedor de identidade do OpenID Connect. Também existem vários outros fornecedores disponíveis.

Tenha em atenção que, uma vez que o serviço Users não está disponível, não é possível usar appengine-web.xml para Java ou app.yaml para outros tempos de execução para tornar os URLs acessíveis apenas aos administradores. Tem de processar esta lógica na sua aplicação.

O que se segue?

Para uma vista geral das principais diferenças entre o ambiente flexível e o ambiente padrão, com diretrizes para aplicações que usam ambos os ambientes, consulte o artigo Ambiente flexível do App Engine para utilizadores do ambiente padrão.