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 seu 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 Platform.

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, há outras diferenças que você precisa conhecer antes de migrar do ambiente padrão para o ambiente flexível:

  • Os caminhos com /_ah/ não estã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.

  • Os limites de gastos são compatíveis somente com o ambiente padrão do App Engine. No ambiente flexível, recomendamos criar orçamentos e configurar alarmes.

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 Google Compute Engine para receber informações sobre o aplicativo.

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

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

  • Não há um intervalo padrão do Cloud Storage para o projeto. Para usar um intervalo no aplicativo, crie um no Cloud Storage com o mesmo nome do código do projeto. Em seguida, use a variável de ambiente GOOGLE_CLOUD_PROJECT no aplicativo como nome de intervalo.
  • 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 particular 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}.

Threads 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 nos ambientes padrão e 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:

Cloud Datastore

É possível acessar o Cloud Datastore de qualquer lugar usando a API do Cloud Datastore. Armazene e recupere os dados desse serviço com as bibliotecas de cliente do Google Cloud.

Independentemente de você usar as bibliotecas do App Engine, as bibliotecas de cliente do Google Cloud ou chamar a API diretamente, você terá acesso aos mesmos dados no Cloud Datastore.

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 precisar fazer o processamento de imagens, você poderá instalar e usar qualquer biblioteca de processamento, como imaging.

O serviço Imagens também fornece 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, gere as imagens redimensionadas com antecedência e faça upload delas no Cloud Storage para veiculá-las. Como alternativa, você pode 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:

Geração de registros

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 são agrupados por solicitação. Além disso, os registros de stdout e stderr são coletados separadamente.

Para ter um controle maior sobre a geração de registros do aplicativo, o agrupamento deles e o registro de outros metadados, use a API do Stackdriver 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 (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

No momento, o serviço Memcache não está disponível para o ambiente flexível do App Engine. Uma versão Alfa do serviço estará disponível em breve. Se quiser receber uma notificação quando a versão for disponibilizada, preencha o formulário de acesso antecipado.

Se precisar armazenar em cache dados de aplicativo imediatamente, você poderá usar o Redis Labs Redis Cloud, um serviço totalmente gerenciado por terceiros. Para acessá-lo, consulte Como armazenar dados do aplicativo em cache usando o Redis Labs 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 para 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.
Código da instância atual Por meio da variável de ambiente GAE_INSTANCE.
Nome do host padrão Por meio do método apps.get da API Admin do App Engine.
Lista de serviços Por meio do método apps.services.list da API Admin do App Engine.
Lista de versões de um serviço Por meio do 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 Por meio do método apps.services.get da API Admin do App Engine.
Lista de instâncias em execução de uma versão Por meio do 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 Cloud 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.

Remote

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

No momento, o serviço Pesquisa não está disponível fora do ambiente padrão. Você pode hospedar qualquer banco de dados de pesquisa por texto completo, como ElasticSearch no Google Compute Engine, e acessá-lo a partir dos ambientes padrão e 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 Cloud Pub/Sub é 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.

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, 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.

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Ambiente flexível do App Engine para Go