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.
Deve usar o ficheiro appengine-web.xml
apenas para configurar a sua app
se estiver a migrar uma app existente do tempo de execução do Java 8 do App Engine para a
versão Java mais recente suportada e quiser usar os serviços incluídos antigos.
Se estiver a usar um appengine-web.xml
no seu projeto, o app.yaml
é gerado automaticamente para si na implementação.
As aplicações Java do App Engine usam um ficheiro de configuração denominado appengine-web.xml
para especificar informações sobre a sua app e identificar que ficheiros no ficheiro WAR
da app são ficheiros estáticos (como imagens) e quais são ficheiros de recursos usados pela aplicação.
Sintaxe
Uma app Java do App Engine tem de ter um ficheiro denominado appengine-web.xml
no respetivo WAR, no diretório WEB-INF/
. Este é um ficheiro XML cujo elemento raíz é
<appengine-web-app>
.
Pode encontrar a definição do tipo de documento e as especificações do esquema para o
appengine-web.xml
no diretório docs/
do SDK.
Elemento | Descrição |
---|---|
<application> |
Não é necessário se implementar a sua app com ferramentas baseadas no Google Cloud SDK, como o comando |
|
Opcional. Se quiser usar os
serviços agrupados legados do App Engine para runtimes de segunda geração,
defina este campo como |
|
Opcional e apenas para tempos de execução de segunda geração. Substitui o ponto de entrada predefinido, que é a linha de comandos do processo que inicia a aplicação Java. Por predefinição, o ponto de entrada gerado para uma classe de instância F4 (as definiçõ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>
Pode modificar a configuração para adicionar flags de processo JVM adicionais ou definir o seu próprio processo de arranque.
Tenha em atenção que a aplicação é implementada no diretório |
<async-session-persistence> |
Opcional. É possível reduzir a latência dos pedidos configurando a sua aplicação para escrever dados de sessão HTTP de forma assíncrona no arquivo de dados: <async-session-persistence enabled="true" /> Com a persistência de sessão assíncrona ativada, o App Engine envia uma tarefa da fila de tarefas para escrever dados de sessão no armazenamento de dados antes de escrever os dados na cache de memória. Por predefinição, a tarefa é enviada para a fila "default". Se quiser usar uma fila diferente, adicione o atributo `queue-name`: <async-session-persistence enabled="true" queue-name="myqueue"/> Os dados de sessão são sempre escritos de forma síncrona na memcache. Se um pedido tentar ler os dados da sessão quando o memcache não estiver disponível (ou os dados da sessão tiverem sido esvaziados), vai falhar para o Datastore, que pode ainda não ter os dados da sessão mais recentes. Isto significa que a persistência de sessões assíncrona pode fazer com que a sua aplicação veja dados de sessões desatualizados. No entanto, para a maioria das aplicações, a vantagem da latência supera largamente o risco. |
<auto-id-policy> |
Opcional. Se estiver a
definir identificadores de entidades automaticamente, pode alterar o método
usado definindo a política de ID automático. Seguem-se as opções válidas:
|
<automatic-scaling> |
Opcional. Para uma explicação completa, consulte a secção Dimensionamento automático. |
<basic-scaling> |
Opcional. Para uma explicação completa, consulte a secção Dimensionamento básico. |
<env-variables> |
Opcional.
O ficheiro <env-variables> <env-var name="DEFAULT_ENCODING" value="UTF-8" /> </env-variables> Para evitar conflitos com o seu ambiente local, o servidor de desenvolvimento não define variáveis de ambiente com base neste ficheiro e requer que o ambiente local já tenha estas variáveis definidas com valores correspondentes. export DEFAULT_ENCODING="UTF-8" dev_appserver war Quando implementado no App Engine, o ambiente é criado com estas variáveis já definidas. Para determinar durante quanto tempo uma ligação permanece inativa sem transmissão de dados antes de o cliente a fechar, configure um limite de tempo de inatividade com a seguinte sintaxe: <env-variables> <env-var name="APPENGINE_API_CALLS_IDLE_TIMEOUT_MS" value="TIMEOUT_IN_MS" /> </env-variables> Substitua Para corresponder a um prazo geral de 60 segundos para pedidos/obtenção de URLs,
defina-o como Esta configuração de tempo limite de inatividade não é igual ao prazo
geral do pedido para o dimensionamento nem ao prazo da API URL Fetch que configura através de
|
<inbound-services> |
Opcional.
Antes de uma aplicação poder receber emails, tem de ser configurada para ativar o serviço.
Ativa o serviço para uma app Java incluindo uma secção O seguinte serviço de entrada está disponível:
|
<instance-class> |
Opcional. O tamanho da classe de instância para este módulo. As seguintes classes de instâncias estão disponíveis quando especifica diferentes opções de escalabilidade:
|
<manual-scaling> |
Opcional. Para uma explicação completa, consulte a secção Dimensionamento manual. |
<precompilation-enabled> |
Opcional. O App Engine usa um processo de "pré-compilação" com o bytecode Java de uma app para melhorar o desempenho da app no ambiente de tempo de execução Java. O código pré-compilado funciona de forma idêntica ao bytecode original.
Se, por algum motivo, preferir que a sua app não use a pré-compilação,
pode desativá-la adicionando o seguinte ao ficheiro
<precompilation-enabled>false</precompilation-enabled> |
<module> |
Nota: os módulos são agora denominados
Serviços
e os serviços continuam a ser declarados em ficheiros Obrigatório se estiver a criar um serviço. Opcional para o serviço predefinido. Cada serviço e cada versão têm de ter um nome. Um nome pode conter números, letras e hífenes. Não pode ter mais de 63 carateres, começar nem terminar com um hífen e conter a string `-dot`. Escolha um nome exclusivo para cada serviço e cada versão. Não reutilize nomes entre serviços e versões. Veja também serviço. |
<public-root> |
Opcional.
O
O valor predefinido de
Por exemplo, o seguinte mapearia o caminho do URL
<public-root>/static</public-root> |
<resource-files> |
Opcional. Os ficheiros listados no elemento
O elemento
Os ficheiros de recursos do App Engine são lidos através de |
<runtime> |
Para usar a versão Java mais recente suportada, tem de especificar esta 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 de sessões, através da interface de sessão de servlet. A implementação armazena dados de sessão no Datastore para persistência e também usa a cache de memória para velocidade. Tal como acontece com a maioria dos outros contentores de servlets, os atributos de sessão definidos com `session.setAttribute()` durante o pedido são mantidos no final do pedido.
Esta funcionalidade está desativada por predefinição. Para a ativar, adicione o seguinte a
<sessions-enabled>true</sessions-enabled>
A implementação cria entidades do Datastore do tipo
Nota: uma vez que o App Engine armazena dados de sessões no
armazenamento de dados e na cache de memória, todos os valores armazenados na sessão têm de
implementar a interface
Consulte o elemento
|
<ssl-enabled> |
Opcional. Por predefinição, qualquer utilizador pode aceder a qualquer URL através de HTTP ou HTTPS. Pode configurar uma app para exigir HTTPS para determinados URLs no descritor de implementação. Consulte o descritor de implementação: URLs seguros.
Se quiser proibir a utilização de HTTPS para a aplicação, coloque o seguinte no ficheiro <ssl-enabled>false</ssl-enabled> Não existe forma de não permitir HTTPS para alguns caminhos de URL e permitir para outros no ambiente de tempo de execução do Java. |
<static-error-handlers> |
Opcional.
Quando ocorrem determinados erros, o App Engine apresenta uma página de erro genérica. Pode configurar a sua app para publicar um ficheiro estático personalizado em vez
destas páginas de erro genéricas, desde que os dados de erro personalizados tenham menos
de 10 kilobytes. Pode configurar diferentes ficheiros estáticos para publicação
para cada código de erro suportado, especificando os ficheiros no ficheiro
<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 ficheiro de resposta de erro não se sobrepõe aos caminhos do controlador de ficheiros estáticos.
Cada entrada
O elemento
Opcionalmente, pode especificar um |
<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 ficheiro <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. Pode configurar um conetor HTTP para melhorar a utilização da CPU e da memória. Se a sua aplicação interagir com operações do Datastore ou das filas de tarefas, configure a monitorização para monitorizar o desempenho e os impactos no comportamento após ativar esta funcionalidade. <system-properties> <property name="appengine.use.httpconnector" value="true"/> </system-properties> Opcional. Pode configurar o tempo de execução subjacente para funcionar no EE8 ou EE10 através da seguinte propriedade do sistema. Para mais informações sobre a compatibilidade com EE, consulte o artigo Atualize para o Java 21. <system-properties> <property name="appengine.use.EE10" value="true"/> <!-- or EE8 --> </system-properties> A partir do Java 21, pode configurar o seu servidor Web Java para usar threads virtuais. Por exemplo: <system-properties> <property name="appengine.use.virtualthreads" value="true"/> </system-properties> |
<url-stream-handler> |
Opcional. Valores possíveis: O valor predefinido é Se definir <url-stream-handler>urlfetch</url-stream-handler> |
<version> |
O elemento
Os nomes das versões devem começar com uma letra para os distinguir das
instâncias numéricas, que são sempre especificadas por um número. Isto evita a ambiguidade com URLs como |
<warmup-requests-enabled> |
Opcional. Predefinição: true. Os pedidos de preparação estão ativados por predefinição para aplicações Java.
Com os pedidos de preparação ativados, a infraestrutura do App Engine envia pedidos `GET` para
Para desativar os pedidos de preparação, especifique <warmup-requests-enabled>false</warmup-requests-enabled> |
<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. Especifique o nome totalmente qualificado de um conetor no elemento <vpc-access-connector>
<name>projects/[PROJECT_ID]/locations/[REGION]/connectors/[CONNECTOR_NAME]</name>
</vpc-access-connector> Para mais informações, consulte o artigo Estabelecer ligação a recursos internos numa rede VPC. |
Dimensionar elementos
A tabela seguinte lista as opções para definir como pode especificar que a sua aplicação deve ser dimensionada.
Para uma comparação das funcionalidades de desempenho dos tipos de escalabilidade, consulte o artigo Escalar instâncias dinâmicas.
Elemento | Descrição |
---|---|
<automatic-scaling> |
Opcional. Por predefinição, a escalabilidade automática é assumida com uma classe de instância predefinida de
O elemento Este elemento pode conter os seguintes elementos:
<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 Este elemento pode conter os seguintes elementos:
<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 Este elemento pode conter os seguintes elementos:
<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 preparação
Grande parte do trabalho realizado durante uma implementação ocorre localmente num passo de preparação denominado preparação, onde os ficheiros JAR são montados, os JSPs são compilados, etc. Opcionalmente, pode configurar determinadas partes do comportamento de preparação usando elementos de preparação no ficheiro de configuração da aplicação. A maioria das aplicações é implementada com êxito sem configurar manualmente o comportamento de preparação. Se a sua app não for implementada, pode ter de configurar a preparação através das opções apresentadas abaixo.
Elemento | Descrição |
---|---|
<staging> |
Opcional. A maioria das aplicações não precisa de alterar o comportamento predefinido. O elemento de preparação permite-lhe especificar uma configuração de preparação específica, se necessário para a implementação. Este elemento pode conter os seguintes elementos:
Por exemplo: <staging> <delete-jsps>false</delete-jsps> </staging> |
Predefinições da opção de preparação
As predefinições das opções de preparação são diferentes consoante use ferramentas baseadas no SDK do Google Cloud, como a CLI gcloud, ou os plug-ins Maven, Gradle ou IntelliJ baseados no SDK do Google Cloud.
Elemento de preparação | Predefinições baseadas no SDK do App Engine: | Predefinições baseadas no SDK Cloud da Google |
---|---|---|
enable-jar-splitting |
false |
true |
jar-splitting-excludes |
NA | NA |
disable-jar-jsps |
false |
false |
enable-jar-classes |
false |
true . Isto pode afetar a ordem de carregamento das classes, pelo que, se a sua app depender de uma determinada ordem através da predefinição false anterior, pode definir esta opção como false . |
delete-jsps |
false |
true |
compile-encoding |
utf-8 |
utf-8 |
Sintaxe de inclusão e exclusão
Os padrões de caminho são especificados com zero ou mais elementos <include>
e <exclude>
. Num padrão, '*'
representa zero ou mais
de qualquer caráter num nome de ficheiro ou diretório, e **
representa zero ou mais
diretórios num caminho. Os ficheiros e os diretórios que correspondem aos padrões <exclude>
não são carregados quando implementa a sua app no App Engine. No entanto, estes ficheiros e diretórios continuam acessíveis à sua aplicação quando esta é executada no servidor de desenvolvimento local.
Um elemento <include>
substitui o comportamento predefinido de incluir todos os ficheiros. Um elemento <exclude>
aplica-se após todos os padrões <include>
(bem como o padrão se não for fornecido nenhum <include>
explícito).
O exemplo seguinte demonstra como designar todos os ficheiros .png
como ficheiros estáticos (exceto os que se encontram no diretório data/
e em todos os respetivos subdiretórios):
<static-files>
<include path="/**.png" />
<exclude path="/data/**.png" />
</static-files>
Também pode definir cabeçalhos HTTP para usar quando responde a pedidos a estes 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 ficheiros estáticos
Por predefinição, os ficheiros estáticos são publicados com um tipo MIME selecionado com base na extensão do nome de ficheiro. Pode associar tipos MIME personalizados a extensões de nomes de ficheiros para ficheiros estáticos através de elementos mime-mapping
em web.xml
.
Tempo limite do URLFetch
Pode definir um prazo para cada pedido de URLFetch. Por predefinição, o prazo para uma obtenção é de 5 segundos.
Pode alterar esta predefinição incluindo a seguinte definição no ficheiro de configuração appengine-web.xml
. Especifique o limite de tempo em segundos:
<system-properties>
<property name="appengine.api.urlfetch.defaultDeadline" value="10"/>
</system-properties>