Ambiente de execução do Python 3

O tempo de execução do Python é a pilha de software responsável por instalar o código do seu serviço Web e as respetivas dependências, bem como executar o seu serviço do App Engine.

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

runtime: pythonVERSION

Onde VERSION são os números das versões do MAJOR e do MINOR do Python. Por exemplo, para usar a versão mais recente do Python, o Python 3.13, especifique 313.

Para outras versões do Python suportadas e a versão correspondente do Ubuntu para a sua versão do Python, consulte a programação de suporte de tempo de execução.

Versões do Python 3

A versão do Python mais recente suportada é a 3.13. O tempo de execução do Python usa a versão estável mais recente da versão especificada no ficheiro app.yaml. O App Engine é atualizado automaticamente para novas versões de patches, mas não atualiza automaticamente a versão secundária.

Por exemplo, a sua aplicação pode ser implementada no Python 3.7.0 e, posteriormente, ser atualizada automaticamente para o Python 3.7.1, mas não é atualizada automaticamente para a versão secundária seguinte, o Python 3.8.0.

Experimente

Se está a usar o Google Cloud pela primeira vez, crie uma conta para avaliar o desempenho do App Engine em cenários reais. Os novos clientes também recebem 300 USD em créditos gratuitos para executar, testar e implementar cargas de trabalho.

Experimente o App Engine gratuitamente

O App Engine executa apps Python num contentor protegido pelo gVisor numa distribuição Ubuntu Linux atualizada.

Dependências

Durante a implementação, o App Engine usa o gestor de pacotes Python pip para instalar as dependências definidas no ficheiro de metadados requirements.txt localizado no diretório raiz do seu projeto. Não precisa de carregar dependências, uma vez que o App Engine faz uma instalação nova.

A especificação de dependências através da norma Pipfile/Pipfile.lock não é atualmente suportada, e o seu projeto não pode ter estes ficheiros presentes.

Arranque da aplicação

O tempo de execução inicia a sua app executando o comando especificado no campo entrypoint no ficheiro app.yaml. Se tiver configurado um ponto de entrada do servidor Web Gunicorn no ficheiro app.yaml, também tem de adicionar gunicorn ao ficheiro requirements.txt.

O ponto de entrada deve iniciar um servidor Web que escute na porta especificada pela variável de ambiente PORT. Por exemplo:

entrypoint: gunicorn -b :$PORT main:app

A framework Web que a sua app usa é responsável pelo encaminhamento de pedidos para os processadores adequados na sua app.

Se a sua app cumprir os seguintes requisitos, o App Engine inicia a app com o servidor Web gunicorn se não especificar o campo entrypoint:

  • A raiz do diretório da sua app contém um ficheiro main.py com um objeto compatível com WSGI denominado app.

  • A sua app não contém ficheiros Pipfile nem Pipfile.lock.

Se não especificar um ponto de entrada para o tempo de execução do Python 3, o App Engine configura e inicia o servidor Web Gunicorn predefinido.

Práticas recomendadas para pontos de entrada

  • Certifique-se de que o módulo Python necessário para executar o ponto de entrada especificado em app.yaml está presente no ficheiro requirements.txt. Adicione gunicorn ao ficheiro requirements.txt apenas se um ponto final gunicorn for especificado explicitamente no ficheiro app.yaml.

  • Para o melhor desempenho, o ponto de entrada deve ser simples, uma vez que é executado sempre que é criada uma nova instância da sua aplicação.

  • Pode usar o campo entrypoint para otimizar o desempenho da sua app. Por exemplo, se usar gunicorn como servidor Web, pode usar a flag --workers no campo entrypoint para configurar o número de trabalhadores que servem a sua app.

    O número de trabalhadores que especificar deve corresponder à classe de instância da sua app do App Engine:

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

    Estas orientações servem como ponto de partida para selecionar o número de trabalhadores. Pode ter de usar um número diferente de trabalhadores, dependendo das características de desempenho da sua app. O exemplo abaixo mostra uma implementação do App Engine que usa 2 trabalhadores para publicar apps:gunicorn

    entrypoint: gunicorn -b :$PORT -w 2 main:app
    
  • Recomendamos que configure o seu servidor Web para ouvir e responder a pedidos HTTP na porta especificada pela $PORTvariável de ambiente. A utilização da porta predefinida 8080impede que o App Engine utilize a respetiva camada NGINX para comprimir as respostas HTTP. Tenha em atenção que, se usar a porta 8080, são apresentados avisos sobre a porta 8080 e o NGINX nos ficheiros de registo da sua app.

Outras frameworks Web

Além do Django e do Flask, pode usar outras frameworks Web com o App Engine, como o uwsgi e o Tornado. O exemplo seguinte mostra como usar uwsgi com o App Engine:

runtime: python39
entrypoint: uwsgi --http-socket :$PORT --wsgi-file main.py --callable app --master --processes 1 --threads 2
uwsgi==2.0.22
Flask==3.0.0

Variáveis de ambiente

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

Variável de ambiente Descrição
GAE_APPLICATION O ID da sua aplicação do App Engine. Este ID tem o prefixo "region code~", como "e~" para aplicações implementadas na Europa.
GAE_DEPLOYMENT_ID O ID da implementação atual.
GAE_ENV O ambiente do App Engine. Definido como standard.
GAE_INSTANCE O ID da instância na qual o seu serviço está atualmente em execução.
GAE_MEMORY_MB A quantidade de memória disponível para o processo da aplicação, em MB.
GAE_RUNTIME O tempo de execução especificado no ficheiro app.yaml.
GAE_SERVICE O nome do serviço especificado no ficheiro app.yaml. Se não for especificado nenhum nome de serviço, este é definido como default.
GAE_VERSION A etiqueta da versão atual do seu serviço.
GOOGLE_CLOUD_PROJECT O Google Cloud ID do projeto associado à sua aplicação.
PORT A porta que recebe pedidos HTTP.
NODE_ENV (disponível apenas no tempo de execução do Node.js) Definido como production quando o serviço é implementado.

Pode definir variáveis de ambiente adicionais no ficheiro app.yaml, mas os valores acima não podem ser substituídos, exceto o NODE_ENV.

HTTPS e proxies de encaminhamento

O App Engine termina as ligações HTTPS no equilibrador de carga e encaminha os pedidos para a sua aplicação. Algumas aplicações precisam de determinar o IP e o protocolo do pedido original. O endereço IP do utilizador está disponível no cabeçalho X-Forwarded-For padrão. As aplicações que requerem estas informações devem configurar a respetiva framework Web para confiar no proxy.

Sistema de ficheiros

O tempo de execução inclui um sistema de ficheiros completo. O sistema de ficheiros é apenas de leitura, exceto para a localização /tmp, que é um disco virtual que armazena dados na RAM da instância do App Engine.

Servidor de metadados

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

Pode aceder ao servidor de metadados através dos seguintes pontos finais:

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

Os pedidos enviados para o servidor de metadados têm de incluir o cabeçalho do pedido Metadata-Flavor: Google. Este cabeçalho indica que o pedido foi enviado com a intenção de obter valores de metadados.

A tabela seguinte lista os pontos finais onde pode fazer pedidos HTTP para metadados específicos:

Ponto final de metadados Descrição
/computeMetadata/v1/project/numeric-project-id O número do projeto atribuído ao seu projeto.
/computeMetadata/v1/project/project-id O ID do projeto atribuído ao seu projeto.
/computeMetadata/v1/instance/region A região em que a instância está a ser executada.
/computeMetadata/v1/instance/service-accounts/default/aliases
/computeMetadata/v1/instance/service-accounts/default/email O email da conta de serviço predefinido atribuído ao seu projeto.
/computeMetadata/v1/instance/service-accounts/default/ Apresenta todas as contas de serviço predefinidas do seu projeto.
/computeMetadata/v1/instance/service-accounts/default/scopes Lista todos os âmbitos suportados para as contas de serviço predefinidas.
/computeMetadata/v1/instance/service-accounts/default/token Devolve o token de autorização que pode ser usado para autenticar a sua aplicação noutras APIs Google Cloud.

Por exemplo, para obter o ID do projeto, envie um pedido para http://metadata.google.internal/computeMetadata/v1/project/project-id.