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 usa caminhos com /_ah/ para acessar serviços específicos, consulte a seção apropriada abaixo.

  • Somente o ambiente padrão do App Engine é compatível com os limites de gastos. No ambiente flexível, pode ser útil criar orçamentos e definir alarmes.

Identidade do app

Ao usar o ambiente flexível, você pode utilizar uma combinação de variáveis de ambiente e 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 código 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 App Engine Admin.
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 intervalo do Cloud Storage e use o código do projeto como nome do intervalo. Em seguida, use a variável de ambiente GOOGLE_CLOUD_PROJECT no seu aplicativo como nome do intervalo.
  • Não é possível assinar blobs com a conta de serviço padrão. Para contornar esse problema, use a Google Identity and Access Management (IAM) API ou forneça uma chave privada de uma conta de serviço ao aplicativo durante a implantação.
  • Também não há uma API integrada para conseguir certificados públicos a fim de verificar 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 threads ou processos externos ao ambiente de solicitações. Normalmente, não é necessário usar nada além das ferramentas de thread 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

Assim como o ambiente padrão, o ambiente flexível não é compatível com WebSockets. Se você precisar usar WebSockets, use o Compute Engine ou o GKE.

Cloud Datastore

Você pode acessar o Cloud Datastore a partir de qualquer lugar usando a API Cloud Datastore. Utilize as bibliotecas de cliente do Google Cloud para armazenar e recuperar dados do Cloud Datastore.

Independentemente de você usar as bibliotecas do App Engine, as bibliotecas de cliente do Google Cloud ou chamar a API diretamente, os mesmos dados estarão disponíveis no Cloud Datastore.

No momento, as bibliotecas ORM disponíveis no ambiente padrão, como ndb e Objectify, não são aceitas fora dele.

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.

O serviço Imagens também fornece uma funcionalidade para evitar o envio de solicitações dinâmicas ao aplicativo por meio do gerenciamento 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 content delivery network (CDN) de terceiros que ofereça redimensionamento de imagens.

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

Se você quiser ter um controle maior sobre a geração de registros do aplicativo, além de poder agrupar registros e registrar metadados adicionais, use a API 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. Você precisará usar um provedor de e-mail de terceiros, como SendGrid, Mailgun ou Mailjet, 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.

Use o serviço Memcache do Redis Labs se precisar de acesso imediato. Para acessá-lo, consulte Como armazenar dados do aplicativo em cache usando o Memcache do Redis Labs.

Você também pode usar o Redis Cloud, um serviço totalmente gerenciado do Redis Labs. Para acessá-lo, consulte Como armazenar dados do aplicativo em cache usando o Redis Cloud.

Módulos

A Modules API não está disponível fora do ambiente padrão. No entanto, você pode utilizar uma combinação de variáveis de ambiente e a API App Engine Admin para receber informações sobre e modificar os serviços em execução do aplicativo:

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 App Engine Admin.
Lista de serviços Por meio do método apps.services.list da API App Engine Admin.
Lista de versões de um serviço Por meio do método apps.services.versions.list da API App Engine Admin.
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 App Engine Admin.
Lista de instâncias em execução de uma versão Por meio do método apps.services.versions.instances.list da API App Engine Admin.

Você também pode usar a API App Engine Admin para implantar e gerenciar serviços e versões no aplicativo.

Namespaces

Fora do ambiente padrão, apenas o Cloud Datastore aceita multilocação diretamente. 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 Cloud Resource Manager API e acesse os recursos em todos os projetos.

OAuth

O serviço OAuth não está disponível no ambiente flexível. Se você precisar verificar tokens do OAuth 2.0, use o método oauth2.tokeninfo da API OAuth 2.0.

Remote

O serviço Remote API 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 push de Fila de tarefas fora do ambiente padrão da primeira geração, use a versão beta da API Cloud Tasks.

Quando for necessário usar filas pull, como no enfileiramento de tarefas ou mensagens a serem extraídas e processadas por trabalhos separados, o Cloud Pub/Sub é uma boa alternativa porque 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. Você pode usar qualquer mecanismo de autenticação baseado em HTTP no ambiente flexível, como:

Como o serviço "Usuários" está indisponível, não é possível usar app.yaml para tornar os URLs acessíveis apenas pelos administradores. Você precisará lidar com essa lógica no seu aplicativo.

A seguir

Para ter 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…

Documentos do ambiente flexível do App Engine para Python