Como implantar um aplicativo Java

Implante o aplicativo para fazer upload e executar no App Engine. Ao implantar aplicativos, é possível criar versões deles e dos serviços correspondentes no App Engine. É possível implantar aplicativos inteiros, inclusive todos os arquivos de configuração e todo o código-fonte. Além disso, é possível implantar e atualizar versões individuais ou arquivos de configuração.

Para implantar os aplicativos de maneira programática, use a API Admin.

Antes de começar

Para implantar o aplicativo:

Para implantar seu aplicativo usando a ferramenta de build do Maven, configure o projeto para usar o plug-in Maven para App Engine.

Como instalar a CLI gcloud

Para implantar o aplicativo com a CLI gcloud, faça o download, instale e inicialize a CLI gcloud.

Fazer o download do SDK

Se a CLI gcloud já estiver instalada e você quiser configurá-la para usar um ID de projeto do Cloud diferente do usado na inicialização, consulte Como gerenciar as configurações da CLI gcloud.

Usar um proxy

Caso esteja executando o comando de implantação de um sistema que usa proxy HTTP ou HTTPS, é preciso configurar a ferramenta para que possa se comunicar através do proxy.

Execute os seguintes comandos para configurar a CLI gcloud:

gcloud config set proxy/type [PROXY_TYPE]
gcloud config set proxy/address [PROXY_ADDRESS]
gcloud config set proxy/port [PROXY_PORT]

Também é possível definir um username e um password para o proxy. Para mais informações, consulte gcloud config.

Como implantar um aplicativo

Para implantar o aplicativo no App Engine, use a ferramenta de build do Maven (recomendado) ou o comando gcloud app deploy no diretório raiz do aplicativo.

Para implantar o aplicativo com a ferramenta de build do Maven, execute o seguinte comando no diretório de nível superior do projeto em que o arquivo pom.xml está localizado:

mvn package appengine:deploy -Dapp.deploy.projectId=PROJECT_ID

Substitua PROJECT_ID pelo ID do projeto do Cloud. Se o arquivo pom.xmlespecificar o ID do projeto, não será necessário incluir a propriedade -Dapp.deploy.projectId no comando executado.

Como usar a linha de comando gcloud

  gcloud app deploy [CONFIGURATION_FILES]

Substitua [CONFIGURATION_FILES] pelo caminho para um ou mais arquivos de configuração. Use um único espaço em branco para separar caminhos.

Sinalizações opcionais:

  • --version: especifica um ID de versão personalizado. Se você não especificar um ID de versão, o App Engine gerará um.
  • --no-promote: implanta o aplicativo sem encaminhar automaticamente todo o tráfego para essa versão. Por padrão, cada versão que você implanta é automaticamente configurada para receber todo o tráfego.
  • --project: especifica um ID do projeto do Cloud alternativo para o que você inicializou como padrão na CLI gcloud.

Para mais informações, consulte a referência gcloud app deploy ou execute gcloud help na linha de comando.

Escolher códigos de versão únicos

Para instâncias com escalonamento manual, o ID da versão começa com uma letra para distingui-las dos IDs de instância numéricos. Isso garante que as solicitações sejam roteadas para o destino correto e evita a ambiguidade com padrões de URL como 123-dot-my-service.[REGION_ID].r.appspot.com, que são interpretados de duas maneiras:

  • Se a versão 123 existir, a solicitação será roteada para a versão 123 do serviço my-service.
  • Se a versão 123 não existir, a solicitação será encaminhada para o ID de instância 123, no qual as versões do serviço my-service estão em execução.

No caso de instâncias configuradas para escalonamento automático ou básico, as versões podem ser nomeadas como você quiser porque a segmentação dessas instâncias não está disponível.

Implantar vários aplicativos de serviços

Quando o aplicativo é fatorado em vários serviços, é possível implantar e atualizar serviços segmentados individualmente ou todos os serviços simultaneamente. Implantar atualizações em serviços pode incluir a atualização de arquivos de configuração individuais ou do código-fonte nas versões correspondentes.

Por exemplo, é possível implantar e criar duas versões no App Engine, sendo que cada uma será executada no próprio serviço. A primeira versão serve como o serviço de front-end, e a outra, como o back-end do seu aplicativo. Então, será possível implantar arquivos de configuração individuais para atualizar somente as configurações de um serviço. Também é possível implantar uma nova versão em um serviço para atualizar o código-fonte do front-end, do back-end ou de ambos ao mesmo tempo.

Requisitos para vários serviços

Use os mesmos comandos para implantar e atualizar os diversos serviços do aplicativo com os requisitos a seguir:

  • Inicialmente, você precisa implantar uma versão do app no serviço default antes de criar e implantar os serviços subsequentes.

  • Especifique o ID do serviço no arquivo de configuração appengine-web.xml da versão correspondente. Para isso, inclua a definição do elemento module: [YOUR_SERVICE_ID] em cada arquivo de configuração. Por padrão, a exclusão da definição desse elemento do arquivo de configuração implanta a versão no serviço default.

  • Especifique todos os arquivos de configuração appengine-web.xml correspondentes no comando de implantação para implantar vários serviços simultaneamente. É preciso listar o serviço default primeiro.

Para implantar vários serviços

No diretório raiz do aplicativo em que os arquivos de configuração estão localizados, execute o comando de implantação e especifique os caminhos relativos e os nomes dos arquivos appengine-web.xml de cada serviço.

Como usar a ferramenta de build do Maven

Se o diretório raiz do projeto contiver apenas os serviços, implante todos eles com um único comando do Maven.

O comando de implantação do Maven itera em cada um dos serviços do projeto para localizar os respectivos arquivos de configuração e então implantar cada serviço.

Para implantar vários serviços usando o plugin Maven, siga estas etapas:

  1. Certifique-se de que appengine-maven-plugin foi adicionado ao arquivo pai pom.xml.
  2. Execute este comando:

    mvn package appengine:deploy -Dapp.deploy.projectId=PROJECT_ID

    Substitua PROJECT_ID pelo ID do projeto do Cloud. Se o arquivo pom.xmlespecificar o ID do projeto, não será necessário incluir a propriedade -Dapp.deploy.projectId no comando executado.

Uso da gcloud

    gcloud app deploy [CONFIGURATION_FILES]

Substitua [CONFIGURATION_FILES] pelo caminho para um ou mais arquivos de configuração. Use um espaço em branco para separar caminhos.

Você receberá a verificação na linha de comando assim que cada serviço for implantado com sucesso.

Como visualizar registros de build

Os streams do Cloud Build criam e implantam registros visíveis na seção de histórico do Cloud Build do console. Para ver as versões na região do aplicativo, use o menu suspenso Região, na parte superior da página, e escolha a região que você quer filtrar.

Como atualizar índices

Para criar ou atualizar os índices usados pelos aplicativos, faça upload do arquivo de configuração datastore-indexes.xml no Datastore. Os índices que ainda não existem serão criados após o upload do arquivo de configuração.

Levará algum tempo até que o Datastore crie todos os índices. Portanto, eles não estarão imediatamente disponíveis no App Engine. Se o aplicativo já estiver configurado para receber tráfego, é possível que ocorram exceções nas consultas que necessitarem de um índice que ainda estiver sendo criado.

Para evitar exceções, é necessário aguardar a criação de todos os índices. Por exemplo:

Para mais informações sobre índices, consulte Como configurar índices do Datastore.

Resolver problemas

Estas são mensagens de erro comuns que você pode encontrar:

PERMISSION_DENIED: Operation not allowed
The "appengine.applications.create" permission is required.
Se o projeto do Cloud não incluir o aplicativo necessário do App Engine, o comando gcloud app deploy poderá falhar quando tentar executar o comando gcloud app create. Somente contas com o papel Proprietário têm as permissões necessárias para criar aplicativos do App Engine.
Command not found
Se você não criou links simbólicos para as ferramentas dev_appserver.sh quando instalou o SDK do App Engine (obsoleto), talvez precise especificar o caminho completo do diretório para executar a ferramenta. Por exemplo: [PATH_TO_APP_ENGINE_SDK]/dev_appserver.sh.
Import Error
Se você instalou a CLI gcloud e o SDK originais do App Engine e do Cloud, as entradas para o PATH talvez entrem em conflito e causem erros de importação. Se você recebeu erros ao executar comandos daCLI gcloud, tente usar o SDK original do App Engine explicitamente. É possível mover a entrada do SDK original do App Engine para um período anterior no PATH. Assim, esses comandos terão prioridade. Como alternativa, é possível executar o comando especificando o caminho completo do diretório: [PATH_TO_APP_ENGINE_SDK]/java_dev_appserver.sh.
[400] The first service (module) you upload to a new application must be the 'default' service (module)
Antes de implantar e criar os vários serviços do aplicativo, é necessário primeiro implantar e criar o serviço default. Para mais detalhes sobre como implantar uma versão no serviço default, consulte Como implantar vários aplicativos de serviço.
Too Many Versions (403)
O App Engine tem um número limitado de versões implantadas do aplicativo. Esse número é diferente para aplicativos gratuitos e aplicativos implantados. Use o console para excluir uma versão mais antiga e fazer upload do código mais recente. You do not have permission to modify this app (403)
Isso pode ocorrer quando a conta com que você está autenticado não tem permissão para implantar no ID do aplicativo especificado no comando ou no appengine-web.xml. Verifique se o ID do aplicativo está correto e corresponde ao valor do ID do projeto do console. Em seguida, verifique as permissões do projeto no console e verifique se sua conta está listada com um nível de permissão suficiente para permitir a implantação de aplicativos.
[13] An internal error occurred while creating a Cloud Storage bucket.

O App Engine cria um bucket multirregional padrão do Cloud Storage em seu nome, na mesma região em que o aplicativo é criado. Esse bucket é necessário para armazenar o conteúdo do aplicativo. Este erro é retornado quando o bucket não pode ser criado nos seguintes cenários:

[13] An internal error occurred

Esse erro poderá ocorrer se o arquivo de configuração app.yaml do App Engine contiver um recurso inválido name na chave vpc_access_connector. Verifique se o campo name contém a região e o projeto corretos em que o conector de acesso VPC sem servidor foi criado.

Se o problema persistir depois de confirmar que a configuração app.yaml é válida, use o SDK do Google Cloud para reimplantar o serviço, adicionar a sinalização --verbosity=debug e entrar em contato com Suporte do GCP fornecendo a saída do comando.

Outro erro de implantação

Se a implantação falhar, verifique se a API Cloud Build está ativada no projeto. O App Engine ativa essa API automaticamente na primeira vez que você implantar um aplicativo, mas se alguém tiver desativado a API, as implantações falharão.

A seguir