Referência do app.yaml do App Engine

ID da região

O REGION_ID é um código abreviado que a Google atribui com base na região que seleciona quando cria a sua app. O código não corresponde a um país ou uma província, embora alguns IDs de regiões possam parecer semelhantes aos códigos de países e províncias usados frequentemente. Para apps criadas após fevereiro de 2020, REGION_ID.r está incluído nos URLs do App Engine. Para apps existentes criadas antes desta data, o ID da região é opcional no URL.

Saiba mais acerca dos IDs de regiões.

Configura as definições da app do App Engine no ficheiro app.yaml. O ficheiro app.yaml também contém informações sobre o código da sua app, como o tempo de execução e o identificador da versão mais recente.

Cada serviço na sua app tem o seu próprio ficheiro app.yaml, que funciona como um descritor para a respetiva implementação. Primeiro, tem de criar o ficheiro app.yaml para o serviço default antes de poder criar e implementar ficheiros app.yaml para serviços adicionais na sua app.

Para o Go 1.11, o app.yaml tem de conter, pelo menos, uma entrada runtime. Para uma breve vista geral, consulte o artigo Definir definições de tempo de execução.

Estrutura do diretório

A pasta de cada serviço tem de conter um ficheiro app.yaml e um ou mais ficheiros de origem Go que incluam a declaração package main no início. Para saber como estruturar vários serviços na sua app, consulte o artigo Estruturar serviços Web no App Engine.

Exemplo

Segue-se um exemplo de um ficheiro app.yaml para uma aplicação Go 1.11:

runtime: go111

instance_class: F2

env_variables:
  BUCKET_NAME: "example-gcs-bucket"

handlers:
- url: /stylesheets
  static_dir: stylesheets

- url: /(.*\.(gif|png|jpg))$
  static_files: static/\1
  upload: static/.*\.(gif|png|jpg)$

- url: /.*
  script: auto

Sintaxe

A sintaxe de app.yaml é o formato YAML.

O formato YAML suporta comentários. Uma linha que começa com um caráter de cardinal (#) é ignorada:

# This is a comment.

Os padrões de URL e caminho do ficheiro usam a sintaxe de expressão regular estendida POSIX, excluindo elementos de ordenação e classes de ordenação. As referências anteriores a correspondências agrupadas (por exemplo, \1) são suportadas, tal como estas extensões Perl: \w \W \s \S \d \D.

Tempo de execução e elementos da app

Elemento Descrição
build_env_variables

Opcional. Se estiver a usar um tempo de execução que suporte buildpacks, pode definir variáveis de ambiente de compilação no seu ficheiro app.yaml.

Para saber mais, consulte a secção Usar variáveis de ambiente de compilação.

default_expiration

Opcional. Define um período de cache predefinido global para todos os controladores de ficheiros estáticos de uma aplicação. Também pode configurar uma duração da cache para gestores de ficheiros estáticos específicos. O valor é uma string de números e unidades, separados por espaços, em que as unidades podem ser d para dias, h para horas, m para minutos e s para segundos. Por exemplo, "4d 5h" define a expiração da cache para 4 dias e 5 horas após o ficheiro ser pedido pela primeira vez. Se for omitido, o servidor de produção define a expiração para 10 minutos.

Exemplo:
runtime: go111

default_expiration: "4d 5h"

handlers:
  # ...

Para mais informações, consulte o artigo Validade da cache.

entrypoint

Opcional. Substitui o comportamento de arranque predefinido executando o comando entrypoint quando a app é iniciada. Para que a sua app receba pedidos HTTP, o elemento entrypoint deve conter um comando que inicie um servidor Web que escute na porta 8080.

env_variables

Opcional. Pode definir variáveis de ambiente no ficheiro app.yaml para as disponibilizar à sua app. Certifique-se de que a chave em Variáveis de ambiente corresponde à expressão "[a-zA-Z_][a-zA-Z0-9_]*" (começar com um alfabeto ou "_" seguido de qualquer carater alfanumérico ou "_").

As variáveis de ambiente com o prefixo GAE estão reservadas para utilização do sistema e não são permitidas no ficheiro app.yaml.

Exemplo:
env_variables:
  MY_VAR: "my value"
onde MY_VAR e my value são o nome e o valor da variável de ambiente que quer definir, e cada entrada da variável de ambiente tem uma indentação de dois espaços abaixo do elemento env_variables. As variáveis de ambiente às quais não é atribuído um valor têm como predefinição "None".

Em seguida, pode obter estes valores através de os.Getenv:

import "os"
//...
if v := os.Getenv("MY_VAR"); v != "" {
  //...
}

Consulte também a lista de variáveis de ambiente de tempo de execução que não podem ser substituídas.

error_handlers

Opcional. Usado para configurar páginas de erro personalizadas que são devolvidas para diferentes tipos de erros.

Este elemento pode conter os seguintes elementos:

error_code
Opcional. O error_code pode ser um dos seguintes:
over_quota
Indica que a app excedeu uma quota de recursos
timeout
Publicado se for atingido um prazo antes de haver uma resposta da sua app.

O error_code é opcional. Se não for especificado, o ficheiro indicado é a resposta de erro predefinida para a sua app.

file
Cada entrada de ficheiro indica um ficheiro estático que deve ser publicado em vez da resposta de erro genérica. Se especificar um elemento file sem um elemento error_code correspondente, o ficheiro estático é a página de erro predefinida para a sua app. Os dados de erro personalizados têm de ter menos de 10 kilobytes.
Exemplo
error_handlers:
  - file: default_error.html

  - error_code: over_quota
    file: over_quota.html
handlers

Opcional. Uma lista de padrões de URL e descrições de como devem ser processados. O App Engine pode processar URLs executando código de aplicação ou publicando ficheiros estáticos carregados com o código, como imagens, CSS ou JavaScript.

Veja a sintaxe de controladores e subelementos

inbound_services

Opcional. As aplicações têm de ativar esses serviços antes de poderem receber pedidos de entrada. Pode ativar o serviço para uma app Go 1.11 incluindo uma secção inbound_services no ficheiro app.yaml.

warmup
Ativa os pedidos de preparação. Consulte Configurar pedidos de preparação.
Exemplo:
inbound_services:
- warmup
instance_class

Opcional. A classe de instância para este serviço.

Os seguintes valores estão disponíveis consoante o dimensionamento do seu serviço:

Escala automática
F1, F2, F4, F4_1G
Predefinição: F1

Opcionalmente, use o elemento automatic_scaling para alterar as predefinições da escalabilidade automática, como o número mínimo e máximo de instâncias, a latência e as ligações simultâneas.

Nota: se instance_class estiver definido como F2 ou superior, pode otimizar as suas instâncias definindo max_concurrent_requests para um valor superior ao valor predefinido de 10. Para determinar o valor ideal, aumente-o gradualmente e monitorize o desempenho da sua aplicação.

Dimensionamento básico e manual
B1, B2, B4, B4_1G, B8
Predefinição: B2

As classes de instâncias básicas e manuais requerem que especifique o elemento basic_scaling ou o elemento manual_scaling.

main

Opcional. O caminho ou o nome do pacote totalmente qualificado do pacote principal. Esta definição só se aplica se a sua app usar o modo de módulo Go.

Tem de declarar o caminho para o pacote principal se o seu package main não estiver no mesmo diretório que o seu app.yaml. O elemento main suporta caminhos de ficheiros relativos a app.yaml ou nomes de pacotes completos. Por exemplo, se a sua app tiver esta estrutura de diretórios:

myapp/
├── app.yaml
├── go.mod
├── cmd
   └── web
       └── main.go
└── pkg
    └── users
        └── users.go

Em seguida, deve usar:

main: ./cmd/web

ou

main: example.com/myapp/cmd/web
runtime

Obrigatório. O nome do ambiente de tempo de execução usado pela sua app. Por exemplo, para especificar Go 1.11, use:

runtime: go111
service

Obrigatório se estiver a criar um serviço. Opcional para o serviço default. Cada serviço e cada versão têm de ter um nome. Um nome pode conter números, letras e hífenes. O comprimento combinado de VERSION-dot-SERVICE-dot-PROJECT_ID, em que VERSION é o nome da sua versão, SERVICE é o nome do seu serviço e PROJECT_ID é o ID do seu projeto, não pode exceder 63 carateres e não pode começar nem terminar com um hífen. Escolha um nome exclusivo para cada serviço e cada versão. Não reutilize nomes entre serviços e versões.

Exemplo:
service: service-name
service_account

Opcional. O elemento service_account permite-lhe especificar uma conta de serviço gerida pelo utilizador como a identidade da versão. A conta de serviço especificada é usada quando acede a outros Google Cloud serviços e executa tarefas.

Exemplo:
service_account: [SERVICE_ACCOUNT_NAME]@[PROJECT_ID].iam.gserviceaccount.com
vpc_access_connector

Opcional. Configura a sua aplicação para usar um conetor do Acesso a VPC sem servidor, o que permite à aplicação enviar pedidos a recursos internos na sua rede VPC. Para mais informações, consulte o artigo Estabelecer ligação a uma rede VPC.

name
Literal de string. Especifique o nome totalmente qualificado do seu conetor de acesso à VPC sem servidor entre aspas:
"projects/PROJECT_ID/locations/REGION/connectors/CONNECTOR_NAME"
egress_setting
Opcional. A predefinição é private-ranges-only. O elemento egress_setting pode ser um dos seguintes:
private-ranges-only
Predefinição. Os pedidos a endereços IP internos são enviados através do conetor de acesso a VPC sem servidor para a rede VPC associada. Os pedidos para endereços IP externos são enviados para a Internet pública.
all-traffic
Todos os pedidos são enviados através do conetor de acesso a VPC sem servidor para a rede VPC ligada.
Exemplo
vpc_access_connector:
  name: "projects/PROJECT_ID/locations/REGION/connectors/CONNECTOR_NAME"
  egress_setting: all-traffic

Elemento Handlers

O elemento handlers fornece uma lista de padrões de URL e descrições de como devem ser processados. O App Engine pode processar URLs executando código de aplicação ou publicando ficheiros estáticos carregados com o código, como imagens, CSS ou JavaScript.

Os padrões são avaliados pela ordem em que aparecem no ficheiro app.yaml, de cima para baixo. O primeiro mapeamento cujo padrão corresponde ao URL é o que é usado para processar o pedido.

A tabela seguinte lista os subelementos do elemento handlers que controlam o comportamento dos scripts, ficheiros estáticos, diretórios estáticos e outras definições.

Elemento Descrição
auth_fail_action

Opcional. Descreve a ação realizada quando o elemento login é especificado para um controlador e o utilizador não tem sessão iniciada. Tem dois valores possíveis:

redirect
Predefinição. O utilizador é redirecionado para a página de início de sessão do Google ou /_ah/login_required se for usada a autenticação OpenID. O utilizador é redirecionado novamente para o URL da aplicação depois de iniciar sessão ou criar uma conta.
unauthorized
O pedido é rejeitado com um código de estado HTTP 401 e uma mensagem de erro.

Se uma aplicação precisar de um comportamento diferente, a própria aplicação pode implementar o processamento dos inícios de sessão dos utilizadores. Consulte a API Users para mais informações.

O exemplo seguinte requer um início de sessão para o diretório /profile/ e um início de sessão de administrador para o diretório /admin/:

Pode configurar um controlador para recusar o acesso a URLs protegidos quando o utilizador não tem sessão iniciada, em vez de o redirecionar para a página de início de sessão, adicionando auth_fail_action: unauthorized à configuração do controlador:

expiration Opcional. O período durante o qual um ficheiro estático publicado por este controlador deve ser colocado em cache por proxies Web e navegadores. O valor é uma string de números e unidades, separados por espaços, em que as unidades podem ser d para dias, h para horas, m para minutos e s para segundos. Por exemplo, "4d 5h" define a expiração da cache para 4 dias e 5 horas após o ficheiro ser pedido pela primeira vez. Se for omitido, é usado o valor default_expiration da aplicação. Consulte Expiração da cache para mais detalhes.
http_headers

Opcional. Pode definir cabeçalhos HTTP para respostas dos processadores de diretórios ou ficheiros estáticos. Se precisar de definir cabeçalhos HTTP nos seus processadores script, deve fazê-lo no código da sua app. Para obter informações sobre os cabeçalhos de resposta que influenciam o armazenamento em cache, consulte o artigo Armazenamento em cache de conteúdo estático.

Exemplo
handlers:
- url: /images
  static_dir: static/images
  http_headers:
    X-Foo-Header: foo
    X-Bar-Header: bar value
    vary: Accept-Encoding
  # ...

Compatibilidade com CORS

Uma utilização importante desta funcionalidade é suportar a partilha de recursos de origem cruzada (CORS), como aceder a ficheiros alojados por outra app do App Engine.

Por exemplo, pode ter uma app de jogos mygame.uc.r.appspot.com que acede a recursos alojados por myassets.uc.r.appspot.com. No entanto, se mygame tentar fazer um pedido JavaScript XMLHttpRequest para myassets, não vai ter êxito, a menos que o controlador de myassets devolva um cabeçalho de resposta Access-Control-Allow-Origin: que contenha o valor http://mygame.uc.r.appspot.com.

Veja como faria com que o seu controlador de ficheiros estáticos devolvesse esse valor do cabeçalho da resposta obrigatório:

handlers:
- url: /images
  static_dir: static/images
  http_headers:
    Access-Control-Allow-Origin: https://mygame.uc.r.appspot.com
  # ...

Nota: se quiser permitir que todos acedam aos seus recursos, pode usar o caráter universal '*' em vez de https://mygame.uc.r.appspot.com.

login

Opcional. Determina se o controlador de URL requer que o utilizador tenha sessão iniciada.

Este elemento tem três valores possíveis:

optional
Predefinição. Não requer que o utilizador tenha sessão iniciada.
required
Se o utilizador tiver iniciado sessão, o controlador prossegue normalmente. Caso contrário, é realizada a ação indicada em auth_fail_action.
admin
Tal como com required, executa auth_fail_action se o utilizador não tiver sessão iniciada. Além disso, se o utilizador não for um administrador da aplicação, recebe uma mensagem de erro independentemente da definição de auth_fail_action. Se o utilizador for um administrador, o controlador continua.

Quando um controlador de URL com uma definição login diferente de optional corresponde a um URL, o controlador verifica primeiro se o utilizador iniciou sessão na aplicação através da respetiva opção de autenticação. Caso contrário, por predefinição, o utilizador é redirecionado para a página de início de sessão. Também pode usar auth_fail_action para configurar a app para rejeitar simplesmente pedidos de um controlador de utilizadores que não estejam devidamente autenticados, em vez de redirecionar o utilizador para a página de início de sessão.

Nota: a adminrestrição de início de sessão também é satisfeita para pedidos internos para os quais o App Engine define os cabeçalhos especiais X-Appengineadequados. Por exemplo, as tarefas agendadas satisfazem a restrição admin, porque o App Engine define um cabeçalho HTTP X-Appengine-Cron: true nos pedidos respetivos.cron No entanto, os pedidos não satisfazem a restrição de início de sessão required, porque as tarefas agendadas do cron não são executadas como nenhum utilizador.

mime_type

Opcional. Se for especificado, todos os ficheiros publicados por este controlador vão ser publicados com o tipo MIME especificado. Se não for especificado, o tipo MIME de um ficheiro é derivado da extensão do nome de ficheiro. Se o mesmo ficheiro for carregado com várias extensões, a extensão resultante pode depender da ordem em que os carregamentos ocorreram.

Para mais informações sobre os tipos de suportes MIME possíveis, consulte o Website de tipos de suportes MIME da IANA

redirect_http_response_code

Opcional. redirect_http_response_code é usado com a definição secure para definir o código de resposta HTTP devolvido quando é feito um redirecionamento exigido pela forma como a definição secure está configurada. O elemento redirect_http_response_code tem os seguintes valores possíveis:

301
Código de resposta
Movido permanentemente.
302
Código de resposta encontrado.
303
Consulte o código de resposta Other.
307
Código de resposta de redirecionamento temporário.
Exemplo
handlers:
- url: /youraccount/.*
  script: auto
  secure: always
  redirect_http_response_code: 301

Quando o pedido de um utilizador é redirecionado, o código de estado HTTP é definido para o valor do parâmetro redirect_http_response_code. Se o parâmetro não estiver presente, é devolvido 302.

script

Opcional. Especifica que os pedidos ao controlador específico devem segmentar a sua app. O único valor aceite para o elemento script é auto, porque todo o tráfego é publicado através do comando de ponto de entrada. Para usar processadores estáticos, pelo menos um dos seus processadores tem de conter a linha script: auto ou definir um elemento entrypoint para a implementação ser bem-sucedida.

handlers:
- url: /images
  static_dir: static/images

- url: /.*
  secure: always
  redirect_http_response_code: 301
  script: auto

secure Opcional. Qualquer controlador de URL pode usar a definição secure, incluindo controladores de scripts e controladores de ficheiros estáticos. O elemento secure tem os seguintes valores possíveis:
optional
Os pedidos HTTP e HTTPS com URLs que correspondem ao controlador são bem-sucedidos sem redirecionamentos. A aplicação pode examinar o pedido para determinar que protocolo foi usado e responder em conformidade. Esta é a predefinição quando secure não é fornecido para um controlador.
never
As solicitações de um URL que corresponda a este controlador que use HTTPS são automaticamente redirecionadas para o URL HTTP equivalente. Quando um pedido HTTPS de um utilizador é redirecionado para ser um pedido HTTP, os parâmetros de consulta são removidos do pedido. Isto impede que um utilizador envie acidentalmente dados de consulta através de uma ligação não segura destinada a uma ligação segura.
always
Os pedidos de um URL que corresponda a este controlador e que não usem HTTPS são automaticamente redirecionados para o URL HTTPS com o mesmo caminho. Os parâmetros de consulta são preservados para o redirecionamento.
Exemplo
handlers:
- url: /youraccount/.*
  script: auto
  secure: always

Para segmentar uma versão específica da sua app através do domínio REGION_ID.r.appspot.com, substitui os pontos que normalmente separariam os componentes do subdomínio do URL pela string "-dot-", por exemplo:
https://VERSION_ID-dot-default-dot-PROJECT_ID.REGION_ID.r.appspot.com

Para usar domínios personalizados com HTTPS, tem de ativar e configurar certificados SSL para esse domínio.

O início e o fim de sessão nas Contas Google são sempre realizados através de uma ligação segura, independentemente da forma como os URLs da aplicação estão configurados.

static_dir

Opcional. O caminho para o diretório que contém os ficheiros estáticos, a partir do diretório raiz da aplicação. Tudo o que estiver após o final do padrão url correspondente é anexado a static_dir para formar o caminho completo para o ficheiro pedido.

Cada ficheiro no diretório estático é publicado com o tipo MIME que corresponde à extensão do nome de ficheiro, a menos que seja substituído pela definição mime_type do diretório. Todos os ficheiros no diretório indicado são carregados como ficheiros estáticos e nenhum deles pode ser executado como scripts.

Exemplo:
handlers:
# All URLs beginning with /stylesheets are treated as paths to
# static files in the stylesheets/ directory.
- url: /stylesheets
  static_dir: stylesheets
  # ...
static_files

Opcional. Um controlador de padrões de ficheiros estáticos associa um padrão de URL a caminhos para ficheiros estáticos carregados com a aplicação. A expressão regular do padrão de URL pode definir agrupamentos de expressões regulares a usar na construção do caminho do ficheiro. Pode usar isto em vez de static_dir para mapear ficheiros específicos numa estrutura de diretórios sem mapear o diretório completo.

Exemplo:
handlers:
# All URLs ending in .gif .png or .jpg are treated as paths to
# static files in the static/ directory. The URL pattern is a
# regular expression, with a grouping that is inserted into the
# path to the file.
- url: /(.*\.(gif|png|jpg))$
  static_files: static/\1
  upload: static/.*\.(gif|png|jpg)$
  # ...

Os ficheiros estáticos não podem ser iguais aos ficheiros de código da aplicação.

upload

Opcional. Uma expressão regular que corresponde aos caminhos dos ficheiros de todos os ficheiros que vão ser referenciados por este controlador. Isto é necessário porque o controlador não consegue determinar que ficheiros no diretório da sua aplicação correspondem aos padrões url e static_files indicados. Os ficheiros estáticos são carregados e processados separadamente dos ficheiros da aplicação. O exemplo acima pode usar o seguinte padrão upload: archives/(.*)/items/(.*)

url

Elemento obrigatório em handlers. O padrão de URL, como uma expressão regular. A expressão pode conter agrupamentos que podem ser referidos no caminho do ficheiro para o script com referências anteriores de expressões regulares. Por exemplo, /profile/(.*)/(.*) corresponderia ao URL /profile/edit/manager e usaria edit e manager como o primeiro e o segundo agrupamentos.

O padrão de URL tem algumas diferenças no comportamento quando usado com os seguintes elementos:

static_dir
Usa um prefixo de URL. O padrão de expressão regular não deve conter agrupamentos quando usado com o elemento static_dir. Todos os URLs que começam com este prefixo são processados por este controlador, usando a parte do URL após o prefixo como parte do caminho do ficheiro.
static_files
Um controlador de padrões de ficheiros estáticos associa um padrão de URL a caminhos para ficheiros estáticos carregados com a aplicação. A expressão regular do padrão de URL pode definir agrupamentos de expressões regulares a usar na construção do caminho do ficheiro. Pode usar isto em vez de static_dir para mapear ficheiros específicos numa estrutura de diretórios sem mapear o diretório completo.

Dimensionar elementos

Os elementos na tabela seguinte configuram a forma como a sua aplicação é dimensionada. Para saber mais sobre como as apps do App Engine são dimensionadas, consulte os tipos de dimensionamento.

Elemento Descrição
automatic_scaling

Opcional. Aplicável apenas a aplicações que usam uma instância da classe F1 ou superior.

Especifique este elemento para alterar as predefinições do dimensionamento automático, como a definição dos níveis mínimo e máximo para o número de instâncias, a latência e as ligações simultâneas para um serviço.

Este elemento pode conter os seguintes elementos:

max_instances
Opcional. Especifique um valor entre 0 e 2147483647, em que zero desativa a definição.

Este parâmetro especifica o número máximo de instâncias que o App Engine deve criar para esta versão do módulo. Isto é útil para limitar os custos de um módulo.

min_instances
Opcional. O número mínimo de instâncias que o App Engine deve criar para esta versão do módulo. Estas instâncias publicam tráfego quando chegam pedidos e continuam a publicar tráfego mesmo quando são iniciadas instâncias adicionais, conforme necessário, para processar o tráfego.

Especifique um valor de 0 a 1000. Pode definir o parâmetro para o valor 0 para permitir o dimensionamento para 0 instâncias de modo a reduzir os custos quando não estiverem a ser processados pedidos. Tenha em atenção que lhe é cobrado o número de instâncias especificado, quer estejam a receber tráfego ou não.

max_idle_instances

Opcional. O número máximo de instâncias inativas que o App Engine deve manter para esta versão. Especifique um valor de 1 a 1000. Se não for especificado, o valor predefinido é automatic, o que significa que o App Engine vai gerir o número de instâncias inativas. Tenha em atenção o seguinte:

  • Um valor máximo elevado reduz o número de instâncias inativas de forma mais gradual quando os níveis de carga voltam ao normal após um pico. Isto ajuda a sua aplicação a manter um desempenho estável através das flutuações na carga de pedidos, mas também aumenta o número de instâncias inativas (e os custos de execução consequentes) durante esses períodos de carga elevada.
  • Um valor máximo baixo mantém os custos de funcionamento mais baixos, mas pode degradar o desempenho perante níveis de carga voláteis.

Nota: quando regressa aos níveis normais após um aumento repentino da carga, o número de instâncias inativas pode exceder temporariamente o máximo especificado. No entanto, não lhe são cobradas mais instâncias do que o número máximo especificado.

min_idle_instances

Opcional: o número de instâncias adicionais a manter em execução e prontas para publicar tráfego para esta versão.

O App Engine calcula o número de instâncias necessárias para servir o tráfego atual da sua aplicação com base nas definições de dimensionamento, como target_cpu_utilization e target_throughput_utilization. A definição de min_idle_instances especifica o número de instâncias a executar além deste número calculado. Por exemplo, se o App Engine calcular que são necessárias 5 instâncias para publicar tráfego e min_idle_instances estiver definido como 2, o App Engine vai executar 7 instâncias (5, calculadas com base no tráfego, mais 2 adicionais por min_idle_instances).

Tenha em atenção que lhe é cobrado o número de instâncias especificado, quer estejam a receber tráfego ou não. Tenha em atenção o seguinte:

  • Um mínimo baixo ajuda a manter os custos de funcionamento baixos durante os períodos de inatividade, mas significa que podem estar imediatamente disponíveis menos instâncias para responder a um pico de carga súbito.
  • Um mínimo elevado permite preparar a aplicação para picos rápidos na carga de pedidos. O App Engine mantém o número mínimo de instâncias em execução para atender a pedidos recebidos. O número de instâncias especificado é cobrado, quer estejam ou não a processar pedidos.

    Se definir um número mínimo de instâncias inativas, a latência pendente terá menos efeito no desempenho da sua aplicação.

target_cpu_utilization
Opcional. Especifique um valor entre 0,5 e 0,95. A predefinição é 0.6.

Este parâmetro especifica o limite de utilização da CPU no qual são iniciadas novas instâncias para processar o tráfego, o que lhe permite equilibrar o desempenho e o custo. Os valores mais baixos aumentam o desempenho e o custo, enquanto os valores mais elevados diminuem o desempenho e o custo. Por exemplo, um valor de 0,7 significa que são iniciadas novas instâncias depois de a utilização da CPU atingir 70%.

target_throughput_utilization
Opcional. Especifique um valor entre 0,5 e 0,95. A predefinição é 0.6.

Usado com max_concurrent_requests para especificar quando uma nova instância é iniciada devido a pedidos simultâneos. Quando o número de pedidos simultâneos atinge um valor igual a max_concurrent_requests vezes target_throughput_utilization, o programador tenta iniciar uma nova instância.

max_concurrent_requests

Opcional. O número de pedidos simultâneos que uma instância de escalamento automático pode aceitar antes de o programador gerar uma nova instância (predefinição: 10, máximo: 1000).

Usado com target_throughput_utilization para especificar quando uma nova instância é iniciada devido a pedidos simultâneos. Quando o número de pedidos simultâneos atinge um valor igual a max_concurrent_requests vezes target_throughput_utilization, o agendador tenta iniciar uma nova instância.

Recomendamos que não defina max_concurrent_requests para menos de 10, a menos que precise de processamento de linha única. Um valor inferior a 10 provavelmente vai resultar na criação de mais instâncias do que o necessário para uma app segura para vários processos, o que pode gerar custos desnecessários.

Se esta definição for demasiado elevada, pode verificar um aumento da latência da API. Tenha em atenção que o agendador pode gerar uma nova instância antes de atingir o número máximo real de pedidos.

max_pending_latency

O período máximo durante o qual o App Engine deve permitir que um pedido aguarde na fila pendente antes de iniciar instâncias adicionais para processar pedidos, de modo a reduzir a latência pendente. Quando este limite é atingido, é um sinal para aumentar a escala e resulta num aumento do número de instâncias. Se não for especificado, o valor predefinido é automatic. Isto significa que os pedidos podem permanecer na fila pendente durante um máximo de 10 segundos, o limite de tempo de pedido pendente máximo, antes de serem acionados novos inícios de instâncias.

Um valor máximo baixo significa que o App Engine inicia novas instâncias mais cedo para pedidos pendentes, o que melhora o desempenho, mas aumenta os custos de execução.

Um valor máximo elevado significa que os utilizadores podem esperar mais tempo pela publicação dos respetivos pedidos (se existirem pedidos pendentes e nenhuma instância inativa para os publicar), mas a execução da sua aplicação custa menos.

min_pending_latency

Um elemento opcional que pode definir para especificar a quantidade mínima de tempo que o App Engine deve permitir que um pedido aguarde na fila pendente antes de iniciar uma nova instância para o processar. A especificação de um valor pode reduzir os custos de funcionamento, mas aumenta o tempo que os utilizadores têm de esperar que os respetivos pedidos sejam processados.

Para apps gratuitas, o valor predefinido é 500ms. Para apps pagas, o valor predefinido é 0.

Este elemento funciona em conjunto com o elemento max_pending_latency para determinar quando o App Engine cria novas instâncias. Se existirem pedidos pendentes na fila:

  • Inferior ao valor min_pending_latency especificado, o App Engine não cria novas instâncias.
  • Mais de max_pending_latency, o App Engine tenta criar uma nova instância.
  • Entre a hora especificada por min_pending_latency e max_pending_latency, o App Engine tenta reutilizar uma instância existente. Se nenhuma instância conseguir processar o pedido antes de max_pending_latency, o App Engine cria uma nova instância.
Exemplo
automatic_scaling:
  target_cpu_utilization: 0.65
  min_instances: 5
  max_instances: 100
  min_pending_latency: 30ms
  max_pending_latency: automatic
  max_concurrent_requests: 50
basic_scaling

As aplicações que usam uma instância da classe de B1 ou superior têm de especificar este elemento ou manual_scaling.

Este elemento permite o dimensionamento básico das classes de instâncias B1 e superiores, pode conter os seguintes elementos:

max_instances
Obrigatório. O número máximo de instâncias que o App Engine pode criar para esta versão do serviço. Isto é útil para limitar os custos de um serviço.
idle_timeout
Opcional. A instância é encerrada após este período desde que recebeu o último pedido. O valor predefinido são 5 minutos (5m).
Exemplo
basic_scaling:
  max_instances: 11
  idle_timeout: 10m
manual_scaling

As aplicações que usam uma instância da classe de B1 ou superior têm de especificar este elemento ou basic_scaling.

Este elemento permite o dimensionamento manual das classes de instâncias B1 e superiores e pode conter o seguinte elemento:

instances
O número de instâncias a atribuir ao serviço no início.
Exemplo
manual_scaling:
  instances: 5