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

O ambiente flexível do App Engine não fornece as bibliotecas de APIs presentes no SDK do App Engine. Se você decidir migrar o aplicativo do ambiente padrão do App Engine para o flexível, precisará atualizar seu código para usar os serviços e as APIs disponíveis em todos os ambientes do Google Cloud.

Consulte as seções abaixo para ver instruções de como migrar APIs e serviços legados específicos em pacote do ambiente padrão para o ambiente flexível.

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

Além das diferenças fundamentais descritas neste link, os caminhos com /_ah/ não são bloqueados no ambiente flexível. Se o app no ambiente padrão utilizar caminhos com /_ah/ para acessar serviços específicos, consulte a seção apropriada abaixo.

Identidade do app

Durante a execução no ambiente flexível, utilize uma combinação de variáveis de ambiente com o serviço de metadados do Compute Engine para receber informações sobre o aplicativo:

Informações do aplicativo Como acessar
ID do aplicativo ou do projeto Seja a variável de ambiente GOOGLE_CLOUD_PROJECT ou o recurso /project/project-id no servidor de metadados
Nome do host padrão Método apps.get da API Admin do App Engine
Nome da conta de serviço O /instance/service-accounts recurso no servidor de metadados
Token de acesso do OAuth 2.0 O recurso /instances/service-accounts no servidor de metadados. Consulte a documentação do Compute Engine sobre Como autenticar usando credenciais da conta de serviço.

As funcionalidades a seguir não são disponibilizadas diretamente:

  • Não há um bucket padrão do Cloud Storage para o projeto. Para usar um bucket no aplicativo, crie um no Cloud Storage com o mesmo nome do ID do projeto. Em seguida, use a variável de ambiente GOOGLE_CLOUD_PROJECT no aplicativo como nome de bucket.
  • Não é possível assinar blobs com a conta de serviço padrão. Para contornar esse problema, use a API Google Identity and Access Management (IAM) ou forneça ao aplicativo, durante a implantação, uma chave privada de conta de serviço.
  • Também não há uma API integrada para conseguir certificados públicos destinados à verificação de assinaturas. No entanto, todos os certificados públicos da conta de serviço estão disponíveis em https://www.googleapis.com/robot/v1/metadata/x509/{service account email}.
  • Se você usar o ambiente de execução Java, as APIs SystemProperty do App Engine não ficarão disponíveis no ambiente flexível do App Engine. No entanto, é possível definir variáveis de ambiente em app.yaml e usar System.env para receber os valores, conforme descrito em Como definir variáveis de ambiente.

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

Linhas de execução em segundo plano

Como o ambiente flexível não tem limitações de sandbox, você pode criar linhas de execução ou processos externos ao ambiente de solicitações. Normalmente, não é necessário usar nada além das ferramentas de linha de execução ou de multiprocessamento integradas à linguagem que você está utilizando.

Blobstore

O uso do serviço Blobstore foi totalmente substituído no ambiente padrão e no ambiente flexível pelo Cloud Storage. Use as bibliotecas de cliente do Google Cloud para armazenar e recuperar dados no Cloud Storage.

Para mais informações, consulte Como usar o Cloud Storage.

Recursos

Não há nenhuma funcionalidade semelhante ao serviço Funcionalidades fora do ambiente padrão.

WebSockets

O ambiente flexível do App Engine é compatível com websockets. Para mais informações, consulte Como criar conexões permanentes com WebSockets.

Firestore no modo Datastore (Datastore)

É possível acessar o Datastore de qualquer lugar usando a API Datastore. Use as bibliotecas de cliente do Google Cloud para armazenar e recuperar dados do Datastore.

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

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

Embora as bibliotecas de cliente do Cloud NDB e do Datastore sejam compatíveis com Python 2 e 3 e funcionem no ambiente padrão ou flexível do App Engine e para aplicativos não App Engine, o objetivo principal é ajudar os desenvolvedores que trabalham com Python 2 a deixar de usar serviços legados em pacote, como o App Engine ndb. O Cloud NDB tem o objetivo extra de preservar a experiência do usuário do NDB.

Para mais informações, consulte Como usar o Datastore.

Imagens

O serviço Imagens não está disponível fora do ambiente padrão. No entanto, você pode veicular imagens com facilidade, diretamente do aplicativo ou do Cloud Storage.

Se você precisar processar imagens, basta instalar e usar qualquer biblioteca de processamento de imagens, como:

No serviço Images, também é fornecida uma funcionalidade para evitar o envio de solicitações dinâmicas ao aplicativo por meio do processamento de redimensionamento de imagens usando um URL de veiculação. Se você quiser uma funcionalidade semelhante, poderá gerar as imagens redimensionadas com antecedência e enviá-las ao Cloud Storage para veiculação. Como alternativa, é possível é usar um serviço de rede de fornecimento de conteúdo (CDN, na sigla em inglês) de terceiros que ofereça redimensionamento de imagens.

Para ver mais recursos, consulte estes guias:

Logging

Assim como no ambiente padrão, a geração de registros funciona automaticamente no ambiente flexível. No entanto, os registros são coletados em um formato diferente. Os registros não serão agrupados por solicitação. Além disso, os registros de stdoute stderr são coletados separadamente.

Para ter um controle maior sobre a geração de registros do aplicativo, a capacidade de agrupá-los e sobre como registrar outros metadados, use a API Cloud Logging diretamente com as bibliotecas de cliente do Google Cloud.

Para obter mais detalhes, consulte Como gravar registros de aplicativo.

E-mail

O serviço E-mail do App Engine não está disponível fora do ambiente padrão. Será necessário usar um provedor de e-mail de terceiros, como o SendGrid, o Mailgun ou o Mailjet (conteúdo dos links em inglês) para enviar e-mails. Todos esses serviços oferecem APIs para o envio de e-mails a partir de aplicativos executados em qualquer lugar.

Para mais detalhes, consulte Como enviar mensagens com serviços de terceiros.

Memcache

O serviço de Memcache não está disponível no ambiente flexível do App Engine. Para armazenar os dados do aplicativo em cache, use o Memorystore para Redis.

Módulos

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

Informações de serviços Como acessar
Nome do serviço atual Por meio da variável de ambiente GAE_SERVICE.
Versão do serviço atual Por meio da variável de ambiente GAE_VERSION.
ID da instância atual Por meio da variável de ambiente GAE_INSTANCE.
Nome do host padrão Método apps.get da API Admin do App Engine
Lista de serviços Método apps.services.list da API Admin do App Engine
Lista de versões de um serviço Método apps.services.versions.list da API Admin do App Engine
Versão padrão de um serviço, incluindo qualquer divisão de tráfego Método apps.services.get da API Admin do App Engine
Lista de instâncias em execução de uma versão Método apps.services.versions.instances.list da API Admin do App Engine

Use também a API Admin do App Engine para implantar e gerenciar serviços e versões no aplicativo.

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

Namespaces

Fora do ambiente padrão, apenas o Datastore é compatível diretamente com a multilocação. Para outros serviços, será necessário gerenciar a multilocação manualmente. Para ter instâncias de serviços completamente isoladas, crie projetos novos de maneira programática usando a API Cloud Resource Manager e acesse os recursos em todos os projetos.

OAuth

O serviço OAuth não está disponível no ambiente flexível. Para verificar os tokens do OAuth 2.0, aplique o método oauth2.tokeninfo da API OAuth 2.0 (ambos em inglês).

Remoto

O serviço API Remote não é aplicável ao ambiente flexível. Como o Datastore, a maioria dos serviços de backup acessível a partir do ambiente flexível também pode ser acessada de qualquer lugar.

No momento, o serviço Pesquisa não está disponível fora do ambiente flexível. Você pode hospedar qualquer banco de dados de pesquisa de texto completo, como ElasticSearch no Compute Engine, e acessá-lo a partir do ambiente padrão e do ambiente flexível.

Soquetes

O ambiente flexível não tem restrições de sandbox. Então, você pode abrir e usar soquetes de saída normalmente.

Fila de tarefas

Para usar o serviço de fila de tarefas push fora do ambiente padrão de primeira geração, utilize o Cloud Tasks.

Quando for necessário usar filas pull, como no enfileiramento de tarefas ou mensagens a serem extraídas e processadas por workers separados, o Pub/Sub pode ser uma boa alternativa. Ele oferece uma funcionalidade semelhante e garantias de entrega.

Busca de URL

O serviço de busca de URL não está disponível no ambiente flexível. No entanto, não há restrições de sandbox. Dessa forma, o app pode usar qualquer biblioteca HTTP para conseguir a funcionalidade de busca de URL.

Se você usa Python, recomendamos usar Solicitações. Se você usa Java, recomendamos usar a Biblioteca de cliente HTTP do Google para Java ou OkHttp.

Usuários

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

  • Google Identity Platform, que fornece muitas opções para autenticação e autorização de contas de usuários do Google.
  • Firebase Authentication, que fornece autenticação por meio do nome de usuário/senha e identidade federada usando o Google, o Facebook, o Twitter e muito mais.
  • Auth0 (em inglês), que fornece autenticação com vários provedores de identidade e recursos de logon único.
  • OAuth 2.0 e OpenID Connect (conteúdo dos links em inglês), que fornecem identidade federada, originária do provedor de sua escolha. O Google é um provedor de identidade do OpenID Connect. Há também vários outros provedores disponíveis.

Como o serviço dos usuários não está disponível, não é possível usar appengine-web.xml para Java ou app.yaml para outros ambientes de execução tornarem os URLs acessíveis somente pelos administradores. Você precisará lidar com essa lógica no seu aplicativo.

A seguir

Para uma visão geral das diferenças fundamentais entre os ambientes flexível e padrão, incluindo diretrizes para aplicativos que usam ambos, consulte Ambiente flexível do App Engine para usuários do ambiente padrão.