Como 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 Google App Engine. Se você decidir migrar o aplicativo do ambiente padrão 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 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 diferenças fundamentais descritas neste link, os caminhos com /_ah/ não são bloqueados no ambiente flexível. Se o aplicativo 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}.

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 em grande parte substituído no {gaese_name_short}} 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 saber mais, consulte este guia:

Funcionalidades

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 estes guias:

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 o Python 2 e 3 e funcionem no ambiente padrão ou flexível do App Engine e também para aplicativos não App Engine, o objetivo principal é ajudar os desenvolvedores do Python 2 a abandonar 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 saber mais, consulte este guia:

Imagens

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

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

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 saber mais, consulte este guia:

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.

Os guias abaixo mostram como usar esses serviços com o ambiente flexível:

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.

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 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. Recomendamos o uso de Requests.

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.

Devido à indisponibilidade do serviço Usuários, não é possível utilizar o app.yaml para tornar os URLs acessíveis apenas por 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.