ID da região
O REGION_ID
é um código abreviado que o Google atribui
com base na região que você selecionou ao criar o aplicativo. O código não
corresponde a um país ou estado, ainda que alguns IDs de região sejam semelhantes
aos códigos de país e estado geralmente usados. Para apps criados após
fevereiro de 2020, o REGION_ID.r
está incluído nos
URLs do App Engine. Para apps existentes criados antes dessa data, o
ID da região é opcional no URL.
Saiba mais sobre IDs de região.
Use o arquivo appengine-web.xml
para configurar seu aplicativo somente
se você estiver migrando um aplicativo existente do ambiente de execução do Java 8 do App Engine para a
versão mais recente compatível do Java e quiser usar os serviços legados em pacote.
Se você estiver usando um appengine-web.xml
no projeto, o app.yaml
será
gerado automaticamente para você na implantação.
Os aplicativos Java do App Engine usam um arquivo de configuração chamado appengine-web.xml
para especificar informações sobre seu aplicativo e identificar quais arquivos no arquivo WAR
do aplicativo são arquivos estáticos (como imagens) e quais são arquivos de recursos usados pelo aplicativo.
Sintaxe
Um aplicativo Java do App Engine deve ter um arquivo chamado appengine-web.xml
em seu
WAR, no diretório WEB-INF/
. Ele é um arquivo XML cujo elemento raiz é
<appengine-web-app>
.
A definição do tipo de documento e as especificações de esquema para
appengine-web.xml
encontram-se no diretório docs/
do SDK.
Elemento | Descrição |
---|---|
<application> |
Não é obrigatório se você implantar seu app usando o conjunto de ferramentas baseado no SDK
do Cloud, como o comando |
|
Opcional. Se você quiser usar os
serviços agrupados do App Engine legados para ambientes de execução de segunda geração,
defina esse campo como |
|
Opcional e somente para ambientes de execução de segunda geração. Substitui o ponto de entrada padrão, que é a linha de comando do processo que inicializa o aplicativo Java. Por padrão, o ponto de entrada gerado para uma classe de instância F4 (as configurações de memória são calculadas a partir da classe de instância) é equivalente à seguinte configuração: <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <entrypoint> java -showversion -Xms32M -Xmx819M -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:+PrintCommandLineFlags --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.nio.charset=ALL-UNNAMED --add-opens java.logging/java.util.logging=ALL-UNNAMED --add-opens java.base/java.util.concurrent=ALL-UNNAMED -Dclasspath.runtimebase=/base/java_runtime -Djava.class.path=/base/java_runtime/runtime-main.jar -Djava.library.path=/base/java_runtime: com/google/apphosting/runtime/JavaRuntimeMainWithDefaults --fixed_application_path=/workspace /base/java_runtime </entrypoint> </appengine-web-app>
É possível modificar a configuração para adicionar sinalizações de processo da JVM extras ou definir seu próprio processo de inicialização.
O aplicativo é implantado no diretório |
<async-session-persistence> |
Opcional. É possível reduzir a latência de solicitação configurando o aplicativo para gravar dados da sessão HTTP no armazenamento de dados de forma assíncrona: <async-session-persistence enabled="true" /> Com a persistência de sessão assíncrona ativada, o App Engine enviará uma tarefa à fila de tarefas para gravar dados da sessão no armazenamento de dados antes de gravar os dados no Memcache. Por padrão, a tarefa será enviada à fila "padrão". Se você quiser usar uma outra fila, adicione o atributo "queue-name": <async-session-persistence enabled="true" queue-name="myqueue"/> Os dados da sessão são sempre gravados de forma síncrona no Memcache. Se uma solicitação tentar ler os dados da sessão quando o Memcache não estiver disponível (ou se os dados da sessão tiverem sido retirados), ela fará failover para o armazenamento de dados, que talvez ainda não tenha os dados de sessão mais recentes. Isso significa que a persistência da sessão assíncrona pode fazer com que o aplicativo veja os dados de sessão desatualizados. No entanto, para a maioria dos aplicativos, o benefício de latência supera em muito o risco. |
<auto-id-policy> |
Opcional. Se você estiver configurando identificadores de entidade automaticamente, poderá alterar o método empregado definindo a política de código automática. As opções a seguir são válidas:
|
<automatic-scaling> |
Opcional. Para uma explicação completa, consulte a seção sobre escalonamento automático. |
<basic-scaling> |
Opcional. Para uma explicação completa, consulte a seção sobre escalonamento básico. |
<env-variables> |
Opcional.
O arquivo <env-variables> <env-var name="DEFAULT_ENCODING" value="UTF-8" /> </env-variables> Para evitar conflitos com o ambiente local, o servidor de desenvolvimento não define variáveis de ambiente com base nesse arquivo, ele exige que o ambiente local tenha essas variáveis já definidas com os valores correspondentes. export DEFAULT_ENCODING="UTF-8" dev_appserver war Quando implementado no App Engine, o ambiente é criado com essas variáveis já definidas. |
<inbound-services> |
Opcional.
Antes de poder receber e-mail, o aplicativo precisa ser configurado para ativar o serviço.
Ative o serviço para um aplicativo Java 11 ao incluir uma seção
O seguinte serviço de entrada está disponível:
|
<instance-class> |
Opcional. Tamanho da classe da instância deste módulo. As seguintes classes de instância estão disponíveis durante a especificação de diferentes opções de escalonamento:
|
<manual-scaling> |
Opcional. Para uma explicação completa, consulte a seção sobre escalonamento manual. |
<precompilation-enabled> |
Opcional. O App Engine usa um processo de "pré-compilação" com o bytecode Java do aplicativo para melhorar o desempenho dele no Java Runtime Environment. O código pré-compilado funciona de maneira idêntica ao bytecode original.
Se, por algum motivo, você preferir que seu aplicativo não use a pré-compilação,
é possível desativá-la adicionando o seguinte ao
arquivo <precompilation-enabled>false</precompilation-enabled> |
<module> |
Observação: os módulos agora são denominados
Serviços
e os serviços ainda são declarados em arquivos
Obrigatório ao criar um serviço. Opcional para o serviço padrão. É necessário que todos os serviços e versões tenham um nome. O nome pode conter números, letras e hifens. Ele não pode ter mais de 63 caracteres, começar ou terminar com um hífen e conter a string "-dot". Escolha um nome exclusivo para cada serviço e versão. Não reutilize nomes de serviços em versões e vice-versa. Consulte também serviço. |
<public-root> |
Opcional.
O
o
Por exemplo, a solicitação a seguir mapearia o caminho do URL
<public-root>/static</public-root> |
<resource-files> |
Opcional. Os arquivos listados no
elemento
O elemento
A leitura dos arquivos de recursos do App Engine é realizada com |
<runtime> |
Para usar a versão mais recente compatível do Java, especifique essa entrada com o valor
<runtime>java21</runtime> |
<service> |
Os serviços eram anteriormente conhecidos como módulos. Atualmente, a definição de um serviço como:
|
<service-account> |
Opcional. O elemento <service-account>[SERVICE_ACCOUNT_NAME]@[PROJECT_ID].iam.gserviceaccount.com</service-account> |
<sessions-enabled> |
Opcional. O App Engine inclui uma implementação das sessões usando a interface de sessão de servlet. A implementação armazena dados da sessão no armazenamento de dados para persistência e também usa Memcache para velocidade. Tal como acontece com a maioria dos outros contêineres de servlet, os atributos de sessão que são definidos com "session.setAttribute()" durante a solicitação persistem no final da solicitação.
Esse recurso é desativado por padrão. Para ativá-lo, adicione o seguinte ao
<sessions-enabled>true</sessions-enabled>
A implementação cria entidades do Datastore do tipo
Observação: como o App Engine armazena dados de sessão no
Datastore e no Memcache, todos os valores armazenados na sessão devem
implementar a interface
Consulte o elemento
|
<ssl-enabled> |
Opcional. Por padrão, qualquer usuário pode acessar qualquer URL usando HTTP ou HTTPS. É possível configurar um aplicativo para exigir HTTPS para determinados URLs no descritor de implantação. Consulte Descritor de implantação: URLs seguros.
Para vetar o uso de HTTPS no aplicativo, insira
o seguinte no arquivo <ssl-enabled>false</ssl-enabled> Não há como proibir HTTPS para alguns caminhos de URL e permitir para outros no Java Runtime Environment. |
<static-error-handlers> |
Opcional.
Quando ocorrem alguns erros, o App Engine veicula uma página de erro genérica. Você pode configurar o aplicativo para disponibilizar um arquivo estático personalizado em vez dessas páginas genéricas de erro, contanto que os dados de erro personalizados sejam menores que 10 KB. É possível estabelecer diferentes arquivos estáticos a serem exibidos
para cada código de erro suportado especificando os arquivos no
arquivo <static-error-handlers> <handler file="default_error.html" /> <handler file="over_quota.html" error-code="over_quota" /> </static-error-handlers> Aviso: certifique-se de que o caminho para o arquivo de resposta de erro não se sobrepõe aos caminhos do gerenciador de arquivos estáticos.
Cada entrada de
O
Há também a opção de especificar |
<static-files> |
Opcional.
O elemento
O elemento
<static-files> <include path="/my_static-files" > <http-header name="Access-Control-Allow-Origin" value="http://example.org" /> </include> </static-files> |
<system-properties> |
Opcional. O arquivo <system-properties> <property name="myapp.maximum-message-length" value="140" /> <property name="myapp.notify-every-n-signups" value="1000" /> <property name="myapp.notify-url" value="http://www.example.com/signupnotify" /> </system-properties> <env-variables> <env-var name="DEFAULT_ENCODING" value="UTF-8" /> </env-variables> Opcional. É possível configurar um conector HTTP para melhorar a utilização da memória. <system-properties> <property name="appengine.use.httpconnector" value="true"/> </system-properties> A partir do Java 21, é possível configurar seu servidor da Web Java para usar linhas de execução virtuais. Por exemplo: <system-properties> <property name="appengine.use.virtualthreads" value="true"/> </system-properties> |
<url-stream-handler> |
Opcional. Valores possíveis, O valor padrão é Se você definir <url-stream-handler>urlfetch</url-stream-handler> |
<version> |
O elemento
É necessário que os nomes das versões comecem com uma letra, para distingui-las das instâncias numéricas, que são sempre especificadas por um número. Isso evita
a ambiguidade com URLs como |
<warmup-requests-enabled> |
Opcional. Padrão: verdadeiro. As solicitações de aquecimento são ativadas por padrão nos aplicativos em Java.
Com as solicitações de aquecimento ativadas, a infraestrutura do Google App Engine emite
solicitações `GET` para
Para desativar solicitações de aquecimento, especifique <warmup-requests-enabled>false</warmup-requests-enabled> |
<vpc-access-connector> |
Opcional.
Configura o aplicativo para usar um conector de acesso VPC sem servidor, permitindo o envio de solicitações para recursos internos na rede VPC. Especifique o nome totalmente qualificado de um
conector no elemento <vpc-access-connector>
<name>projects/[PROJECT_ID]/locations/[REGION]/connectors/[CONNECTOR_NAME]</name>
</vpc-access-connector> Para mais informações, consulte Como se conectar a recursos internos em uma rede VPC. |
Como escalonar elementos
A tabela a seguir lista as opções para especificar se o aplicativo precisa ser escalonado.
Para uma comparação dos recursos de desempenho dos tipos de escalonamento, consulte Como escalonar instâncias dinâmicas.
Elemento | Descrição |
---|---|
<automatic-scaling> |
Opcional. O escalonamento automático é presumido por padrão com uma classe de instância padrão de
O elemento É possível que este elemento contenha:
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <application>simple-app</application> <module>default</module> <version>uno</version> <instance-class>F2</instance-class> <automatic-scaling> <target-cpu-utilization>0.65</target-cpu-utilization> <min-instances>5</min-instances> <max-instances>100</max-instances> <max-concurrent-requests>50</max-concurrent-requests> </automatic-scaling> </appengine-web-app> |
<basic-scaling> |
Opcional.
O elemento É possível que este elemento contenha:
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <application>simple-app</application> <module>default</module> <version>uno</version> <instance-class>B8</instance-class> <basic-scaling> <max-instances>11</max-instances> <idle-timeout>10m</idle-timeout> </basic-scaling> </appengine-web-app> |
<manual-scaling> |
Opcional.
O elemento É possível que este elemento contenha:
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <application>simple-app</application> <module>default</module> <version>uno</version> <instance-class>B8</instance-class> <manual-scaling> <instances>5</instances> </manual-scaling> </appengine-web-app> |
Elementos de teste
Grande parte do trabalho realizado durante uma implantação ocorre localmente em uma etapa de preparação denominada teste, em que arquivos JAR são montados, JSPs são compilados e assim por diante. Se quiser, você pode configurar certas partes do comportamento de teste usando elementos de teste no arquivo de configuração do aplicativo. A maioria dos aplicativos será implementada com sucesso sem a configuração manual do comportamento de teste. Se o aplicativo não for implementado, talvez seja necessário configurar o teste usando as opções mostradas abaixo.
Elemento | Descrição |
---|---|
<staging> |
Opcional. A maioria dos aplicativos não precisa alterar o comportamento padrão. O elemento de teste permite que você especifique uma configuração de teste específica, se necessário, para a implantação. Este elemento pode conter os seguintes elementos:
Por exemplo: <staging> <delete-jsps>false</delete-jsps> </staging> |
Padrões das opções de teste
Os padrões das opções de preparo serão diferentes se você usar as ferramentas baseadas no SDK do Google Cloud, como a CLI gcloud ou os plug-ins Maven, Gradle, Eclipse, ou plug-ins IntelliJ.
Elemento de teste | Padrões baseados no SDK do App Engine | Padrões baseados no SDK do Google Cloud |
---|---|---|
enable-jar-splitting |
false |
true |
jar-splitting-excludes |
NA | NA |
disable-jar-jsps |
false |
false |
enable-jar-classes |
false |
true . Isso pode afetar a ordem de carregamento da classe. Portanto, se o aplicativo depender de uma determinada ordem usando o antigo padrão false , defina-o como false . |
delete-jsps |
false |
true |
compile-encoding |
utf-8 |
utf-8 |
Sintaxe de inclusão e exclusão
Padrões de caminhos são especificados usando zero ou um número maior de elementos
<include>
e <exclude>
. Em um padrão, '*'
representa zero ou um número maior
de qualquer caractere no nome de um arquivo ou diretório e **
representa zero ou um número maior
de diretórios em um caminho. Os arquivos e diretórios correspondentes aos padrões <exclude>
não serão enviados ao implantar o aplicativo no App Engine. No entanto, esses arquivos e diretórios continuarão acessíveis ao aplicativo quando executados no servidor de desenvolvimento local.
Um elemento <include>
substitui o comportamento padrão, que é incluir
todos os arquivos. Um elemento <exclude>
é aplicado depois de todos
os padrões <include>
(e também o padrão se nenhum explícito
<include>
for fornecido).
O exemplo a seguir mostra como designar todos os arquivos .png
como arquivos estáticos
(com exceção dos que estiverem no diretório data/
e todos os seus subdiretórios):
<static-files>
<include path="/**.png" />
<exclude path="/data/**.png" />
</static-files>
Também é possível definir cabeçalhos HTTP para usar quando for responder às solicitações a esses recursos estáticos.
<static-files>
<include path="/my_static-files" >
<http-header name="Access-Control-Allow-Origin"
value="http://example.org" />
</include>
</static-files>
Tipos MIME para arquivos estáticos
Por padrão, arquivos estáticos são veiculados com um tipo MIME selecionado com base na extensão do nome do arquivo. Para associar tipos MIME personalizados com extensões de nome de arquivo
para arquivos estáticos, use os elementos mime-mapping
em web.xml
.
Tempo limite de URLFetch
É possível definir um prazo para cada
solicitação URLFetch. Por padrão, o prazo para uma busca é de 5 segundos.
É possível alterar esse padrão incluindo a seguinte configuração no
arquivo de configuração appengine-web.xml
. Especifique o tempo limite em segundos:
<system-properties>
<property name="appengine.api.urlfetch.defaultDeadline" value="10"/>
</system-properties>