O ambiente de execução do Python é 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 do App Engine.
O ambiente de execução do Python para App Engine no ambiente padrão é
declarado no
arquivo app.yaml
:
runtime: pythonVERSION
Em que VERSION são os números de versão MAJOR
e MINOR
do Python. Por exemplo, para usar a versão mais recente do Python, Python 3.12, especifique 312
.
Para outras versões compatíveis do Python e a versão do Ubuntu correspondente à sua versão do Python, consulte a Programação de suporte do ambiente de execução.
Versões do Python 3
O ambiente de execução do Python usa a versão estável mais recente da
versão especificada no arquivo app.yaml
.
O App Engine é atualizado automaticamente para novas versões de patch,
mas não atualiza automaticamente a versão secundária.
Por exemplo, um aplicativo implantado no Python 3.7.0 pode ser atualizado automaticamente para o Python 3.7.1, mas ele não será atualizado automaticamente para a próxima versão secundária, o Python 3.8.0.
Faça um teste
Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho do App Engine em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
Faça uma avaliação gratuita do App EngineO App Engine executa apps Python em um contêiner protegido pelo gVisor em uma distribuição do Linux atualizada do Ubuntu.
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
. Se você tiver configurado um ponto de entrada do servidor da Web
Gunicorn no arquivo app.yaml
, também precisará adicionar gunicorn
ao seu
arquivo requirements.txt
.
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 chamadoapp
.Seu app não contém arquivos
Pipfile
ouPipfile.lock
.
Se você não especificar um ponto de entrada para o ambiente de execução do Python 3, o App Engine vai configurar e iniciar o servidor da Web Gunicorn padrão.
Práticas recomendadas do ponto de entrada
Verifique se o módulo Python necessário para executar o ponto de entrada especificado em
app.yaml
está presente no arquivorequirements.txt
. Adicionegunicorn
ao arquivorequirements.txt
somente se um endpointgunicorn
for especificado explicitamente no arquivoapp.yaml
.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 2 F2 4 F4 8 F4_1G 8 B1 2 B2 4 B4 8 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 :$PORT -w 2 main:app
Recomendamos que você configure o servidor da Web para detectar e responder a solicitações HTTP na porta especificada pela variável de ambiente
$PORT
. O uso da porta padrão8080
impede que o App Engine use a camada NGINX para compactar respostas HTTP. Se você usar a porta8080
, os avisos sobre a porta8080
e NGINX serão exibidos nos arquivos de registro do aplicativo.
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:
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 ID do projeto do Google Cloud associado ao aplicativo. |
PORT |
A porta que recebe solicitações HTTP. |
NODE_ENV (disponível apenas no ambiente de execução do Node.js) |
Definido como production quando o serviço for implantado. |
É possível definir outras variáveis de ambiente no arquivo app.yaml
, mas os valores acima não podem ser modificados, exceto para NODE_ENV
.
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 endpoints a seguir:
http://metadata
http://metadata.google.internal
As solicitações enviadas ao servidor de metadados precisam incluir o cabeçalho da solicitação
Metadata-Flavor: Google
. Esse cabeçalho indica que a solicitação foi enviada
para recuperar valores de metadados.
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/region |
A região 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
.