Arquivos de configuração

Cada versão de um serviço é definida em um arquivo .yaml, que fornece o nome do serviço e a versão. Geralmente, o arquivo YAML recebe o mesmo nome do serviço que define, mas isso não é obrigatório. Se você implantar várias versões de um serviço, poderá criar diversos arquivos yaml no mesmo diretório, um para cada versão.

Normalmente, cria-se um diretório por serviço contendo os arquivos YAML e o código-fonte associado de cada um dos serviços. Os arquivos de configuração opcionais no nível do aplicativo (dispatch.yaml, cron.yaml, index.yaml e queue.yaml) estão incluídos no diretório do aplicativo de nível superior. O exemplo abaixo mostra três serviços. Em service1 e service2, os arquivos de origem estão no mesmo nível do arquivo YAML. Em service3, há arquivos YAML para duas versões.

Gráfico hierárquico de serviços YAML

No caso de projetos pequenos e simples, você pode colocar todos os arquivos do app em um único diretório:

Gráfico hierárquico de pequenos serviços YAML

Cada arquivo YAML precisa incluir um parâmetro de versão. Para definir o serviço padrão, possível é incluir explicitamente o parâmetro service: default ou deixar o parâmetro de serviço fora do arquivo.

O arquivo de configuração de cada serviço define o tipo de escalonamento e a classe da instância para um determinado serviço/versão. Dependendo do tipo de escalonamento a ser especificado, os parâmetros usados variam. Quando o escalonamento não é especificado, adota-se o padrão. As configurações de escalonamento e classe de instância estão descritas na seção de referência de app.yaml.

Para cada serviço, também é possível especificar configurações que associem solicitações de URL a scripts específicos e identifiquem arquivos estáticos para melhor eficiência do servidor. Essas configurações também estão incluídas no arquivo yaml e estão descritas na seção de referência de app.yaml.

O serviço padrão

Todos os aplicativos têm um serviço padrão único. É possível definir o serviço padrão no app.yaml com a configuração service: default, mas não é necessário. Todos os parâmetros de configuração relevantes aos serviços podem ser aplicados ao serviço padrão.

Arquivos de configuração opcionais

Estes arquivos de configuração controlam os recursos opcionais que se aplicam a todos os serviços de um app:

  • dispatch.yaml modifica as regras padrão de roteamento enviando solicitações recebidas para um serviço específico com base no caminho ou nome do host no URL.
  • queue.yaml configura filas push e pull.
  • index.yaml especifica quais índices são necessários para o aplicativo ao usar consultas do Datastore.
  • cron.yaml configura tarefas programadas regularmente que operam em horários definidos ou em intervalos regulares.

Para implantar atualizações desses arquivos de configuração no App Engine, execute o seguinte comando no diretório em que estiverem localizados:

    gcloud app deploy [CONFIG_FILE]

Um exemplo

No exemplo abaixo, você aprende a configurar arquivos YAML para um aplicativo com três serviços: um serviço padrão que processa solicitações da Web e mais dois serviços que processam solicitações móveis e processamento de back-end.

Comece definindo um arquivo de configuração chamado app.yaml que gerenciará todas as solicitações relacionadas à Web:

runtime: python27
api_version: 1
threadsafe: true

Se o ID do projeto do Console para este aplicativo fosse simple-sample, essa configuração criaria um serviço padrão com escalonamento automático e um endereço público de https://simple-sample.uc.r.appspot.com.

Em seguida, suponha que você queira criar um serviço para lidar com solicitações da Web móvel. Neste exemplo, por causa dos usuários móveis, a latência máxima pendente será de apenas um segundo e sempre teremos pelo menos duas instâncias inativas. Para configurar isso, você precisa criar um arquivo de configuração mobile-frontend.yaml com o seguinte conteúdo.

service: mobile-frontend
runtime: python27
api_version: 1
threadsafe: true

automatic_scaling:
  min_idle_instances: 2
  max_pending_latency: 1s

O serviço criado por esse arquivo poderia ser acessado em https://mobile-frontend-dot-simple-sample.uc.r.appspot.com.

Por fim, adicione um serviço chamado my-service para gerenciar o trabalho de back-end estático. Poderia ser um job contínuo que exportasse dados do Datastore para o BigQuery. A quantidade de trabalho é relativamente fixa. Portanto, você precisa de apenas um serviço residente a qualquer momento. Além disso, solicite serviços com uma grande configuração de memória, já que esses jobs precisarão processar muita coisa. Para configurar isso, você precisa criar um arquivo de configuração my-service.yaml com o seguinte conteúdo.

service: my-service
runtime: python27
api_version: 1
threadsafe: true

instance_class: B8
manual_scaling:
  instances: 1

O serviço criado por esse arquivo poderia ser acessado em https://my-service-dot-simple-sample.uc.r.appspot.com.

Observe a configuração manual_scaling:. O parâmetro instances: informa ao App Engine quantas instâncias serão criadas para esse serviço.

Também recomendamos fazer o download e dar uma olhada neste aplicativo de demonstração em Python.