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_PROJECT
variá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 usarSystem.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:
- Pillow para Python
- ImageJ2, imgscalr ou thumbnailator para Java
- Imagens para o Go
- GD ou ImageMagick para PHP
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.
Pesquisar
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.