O Python 2.7 já está disponível para todos os usuários.

Ambiente de execução do Python 3

O ambiente de execução do Python 3 é a pilha de software responsável por instalar o código do serviço da Web e as dependências dele, além de executar o serviço.

O ambiente de execução do Python 3 para App Engine no ambiente padrão é declarado no arquivo app.yaml:

Versões do Python 3

O ambiente de execução do Python 3 é compatível com o Python 3.7 e o Python 3.8, além de usar a versão estável mais recente. O App Engine é atualizado automaticamente para novas versões de lançamento após a implantação do app, mas não atualiza automaticamente a versão secundária.

Por exemplo, se o aplicativo tiver sido implantado no Python 3.7.0, posteriormente será atualizado automaticamente para o Python 3.7.1, mas não será atualizado automaticamente para o Python 3.8.0.

Dependências

Durante a implantação, o App Engine usa o gerenciador de pacotes Python pip para instalar as dependências definidas no arquivo de metadados requirements.txt (em inglês) localizado no diretório raiz do projeto. Não é preciso fazer o upload das dependências, porque é feita nova instalação pelo App Engine.

No momento, a especificação de dependência que usa o padrão Pipfile/Pipfile.lock não é compatível, e seu projeto não pode ter esses arquivos.

Inicialização do aplicativo

O ambiente de execução inicia o app executando o comando especificado no campo entrypoint no arquivo app.yaml. O ponto de entrada deve iniciar um servidor da Web que realiza detecções na porta especificada pela variável de ambiente PORT. Exemplo:

entrypoint: gunicorn -b :$PORT main:app

O framework da Web usado pelo app é responsável por encaminhar solicitações para os gerenciadores apropriados no app.

Se o aplicativo atender aos requisitos a seguir, o App Engine iniciará o app com o servidor da Web gunicorn se você não especificar o campo entrypoint:

  • A raiz do diretório do app contém um arquivo main.py com um objeto compatível com WSGI chamado app.

  • Seu app não contém arquivos Pipfile ou Pipfile.lock.

O App Engine também adicionará automaticamente o gunicorn ao arquivo requirements.txt se você não especificar o campo entrypoint.

Práticas recomendadas do ponto de entrada

  • Não inclua gunicorn no arquivo requirements.txt, a menos que você esteja especificando o ponto de entrada.

  • Para um melhor desempenho, o ponto de entrada deve ser leve, porque ele é executado sempre que for criada uma nova instância do aplicativo.

  • O campo do ponto de entrada pode ser usado para ajustar o desempenho do aplicativo. Por exemplo, se você usar gunicorn como seu servidor da Web, será possível usar a sinalização --workers (em inglês) no campo do ponto de entrada para configurar o número de workers que exibem seu aplicativo.

    O número de workers especificados precisa corresponder à classe de instância do aplicativo do App Engine:

    Classe da instância Workers
    F1 1
    F2 2
    F4 4
    F4_1G 8
    B1 1
    B2 2
    B4 4
    B4_1G 8
    B8 8

    Esta orientação serve como ponto de partida para selecionar o número de workers. Talvez seja necessário usar um número diferente de workers dependendo das características de desempenho do aplicativo. O exemplo abaixo mostra uma implantação do App Engine que usa dois workers gunicorn para a exibição de aplicativos:

    entrypoint: gunicorn -b :8080 -w 2 main:app
    

Outros frameworks da Web

Além do Django e do Flask, é possível usar outros frameworks da Web com o App Engine, como uwsgi e Tornado. O exemplo a seguir mostra como usar uwsgi com o App Engine:

runtime: python38
entrypoint: uwsgi --http-socket :8080 --wsgi-file main.py --callable app --master --processes 1 --threads 2
uwsgi==2.0.19.1
flask==1.1.2

Variáveis de ambiente

As seguintes variáveis de ambiente são definidas pelo ambiente de execução:

Variável de ambiente Descrição
GAE_APPLICATION O ID do aplicativo do App Engine. Esse ID tem o prefixo "region code~", como "e~" para aplicativos implantados na Europa.
GAE_DEPLOYMENT_ID O ID da implantação atual.
GAE_ENV O ambiente do App Engine. Defina como standard.
GAE_INSTANCE O ID da instância em que o serviço é executado no momento.
GAE_MEMORY_MB A quantidade de memória disponível para o processo do aplicativo em MB.
GAE_RUNTIME O ambiente de execução especificado no seu arquivo app.yaml.
GAE_SERVICE O nome do serviço especificado no seu arquivo app.yaml. Se nenhum nome de serviço for especificado, ele será definido como default.
GAE_VERSION O rótulo da versão atual do serviço.
GOOGLE_CLOUD_PROJECT O código do projeto do Cloud associado ao aplicativo.
PORT A porta que recebe solicitações HTTP.

É possível definir outras variáveis de ambiente no arquivo app.yaml, mas os valores acima não podem ser modificados.

HTTPS e proxies de encaminhamento

O App Engine encerra as conexões HTTPS no balanceador de carga e encaminha as solicitações para o aplicativo. Em alguns aplicativos, é necessário determinar o protocolo e o IP de solicitação originais. O endereço IP do usuário está disponível no cabeçalho X-Forwarded-For padrão. Os aplicativos que necessitam dessa informação precisam configurar a biblioteca da Web para confiar no proxy.

Sistema de arquivos

O ambiente de execução inclui um sistema de arquivos completo. O sistema de arquivos é somente leitura, exceto pelo local /tmp, que é um disco virtual que armazena dados na RAM da instância do App Engine.

Servidor de metadados

Cada instância do aplicativo pode usar o servidor de metadados do App Engine para consultar informações sobre a instância e o projeto.

É possível acessar o servidor de metadados por meio dos seguintes endpoints:

  • http://metadata
  • http://metadata.google.internal

A tabela a seguir lista os endpoints em que é possível fazer solicitações HTTP para metadados específicos.

Endpoint de metadados Descrição
/computeMetadata/v1/project/numeric-project-id Número do projeto atribuído ao seu projeto.
/computeMetadata/v1/project/project-id ID do projeto atribuído ao seu projeto.
/computeMetadata/v1/instance/zone Zona em que a instância está em execução.
/computeMetadata/v1/instance/service-accounts/default/aliases
/computeMetadata/v1/instance/service-accounts/default/email E-mail da conta de serviço padrão atribuído ao seu projeto.
/computeMetadata/v1/instance/service-accounts/default/ Lista todas as contas de serviço padrão do seu projeto.
/computeMetadata/v1/instance/service-accounts/default/scopes Lista todos os escopos compatíveis com as contas de serviço padrão.
/computeMetadata/v1/instance/service-accounts/default/token Retorna o token de autenticação que pode ser usado para autenticar o aplicativo em outras Google Cloud APIs.

Por exemplo, para recuperar o ID do projeto, envie uma solicitação para http://metadata.google.internal/computeMetadata/v1/project/project-id.