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 gratuitamenteO 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 denominadoapp
.A sua app não contém ficheiros
Pipfile
nemPipfile.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 ficheirorequirements.txt
. Adicionegunicorn
ao ficheirorequirements.txt
apenas se um ponto finalgunicorn
for especificado explicitamente no ficheiroapp.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
$PORT
variável de ambiente. A utilização da porta predefinida8080
impede que o App Engine utilize a respetiva camada NGINX para comprimir as respostas HTTP. Tenha em atenção que, se usar a porta8080
, são apresentados avisos sobre a porta8080
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:
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
.