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.
Além dodescritor de implantação web.xml
, 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 estáticos (como imagens) e quais são de recursos usados pelo aplicativo.
Exemplo
O exemplo a seguir é um arquivo mínimo que especifica o ambiente de execução do Java 8 sem arquivos estáticos ou arquivos de recurso:
<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<threadsafe>true</threadsafe>
<runtime>java8</runtime>
</appengine-web-app>
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 |
---|---|
<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: <?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <!-- ... --> <async-session-persistence enabled="true" /> <!-- ... --> </appengine-web-app> 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": <?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <!-- ... --> <async-session-persistence enabled="true" queue-name="myqueue"/> <!-- ... --> </appengine-web-app> 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 8 incluindo 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 <?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <!-- ... --> <precompilation-enabled>false</precompilation-enabled> <!-- ... --> </appengine-web-app> |
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
<?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <!-- ... --> <public-root>/static</public-root> <!-- ... --> </appengine-web-app> |
<resource-files> |
Opcional. Os arquivos listados no
elemento
O elemento
A leitura dos arquivos de recursos do App Engine é realizada com |
runtime |
Para usar o ambiente de execução do Java 8, especifique essa entrada com o valor
Exemplo: <?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <!-- ... --> <runtime>java8</runtime> <!-- ... --> </appengine-web-app> |
service |
Os serviços eram anteriormente conhecidos como módulos. Atualmente, a definição de um serviço como:
|
service-account |
Opcional. O elemento <?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <!-- ... --> <service-account>[SERVICE_ACCOUNT_NAME]@[PROJECT_ID].iam.gserviceaccount.com</service-account> <!-- ... --> </appengine-web-app> |
<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
<?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <!-- ... --> <sessions-enabled>true</sessions-enabled> <!-- ... --> </appengine-web-app>
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 <?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <!-- ... --> <ssl-enabled>false</ssl-enabled> <!-- ... --> </appengine-web-app> 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> |
<threadsafe> |
Obrigatório.
Quando o elemento <?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <!-- ... --> <threadsafe>true</threadsafe> <!-- ... --> </appengine-web-app>
Para usar solicitações simultâneas, o código do aplicativo deverá
usar a sincronização de thread adequada antes de ativar
Esse elemento não é compatível com os ambientes de execução do Java 11+. |
<url-stream-handler> |
Opcional. Valores possíveis, O valor padrão é Se você definir <?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <!-- ... --> <url-stream-handler>urlfetch</url-stream-handler> <!-- ... --> </appengine-web-app> |
<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
O App Engine usa esse identificador de versão para determinar se é necessário criar uma nova versão do aplicativo com o identificador fornecido (ou substituir a versão do aplicativo pelo identificador fornecido, se já existir). É possível
testar novas versões do seu aplicativo com um URL usando" "-dot-" "como um separador de subdomínio no URL, como
|
<warmup-requests-enabled> |
Opcional. Padrão: verdadeiro. As solicitações de aquecimento são ativadas por padrão nos aplicativos em Java 8.
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 <?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <!-- ... --> <warmup-requests-enabled>false</warmup-requests-enabled> <!-- ... --> </appengine-web-app> |
<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. Para mais informações, consulte Como se conectar a uma rede VPC.
<vpc-access-connector> <name>projects/PROJECT_ID/locations/REGION/connectors/CONNECTOR_NAME</name> <egress-setting>all-traffic</egress-setting> </vpc-access-connector> |
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> <threadsafe>true</threadsafe> <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> <threadsafe>true</threadsafe> <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> <threadsafe>true</threadsafe> <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 são os seguintes:
Elemento de teste | Valor padrão |
---|---|
enable-jar-splitting |
true |
jar-splitting-excludes |
NA |
disable-jar-jsps |
false |
enable-jar-classes |
true ). Isso pode afetar a ordem de carregamento da classe. Portanto, se o aplicativo depender de uma determinada ordem, defina-o como false . |
delete-jsps |
true |
compile-encoding |
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>