O Google Cloud Platform fornece um servidor de metadados com detalhes sobre a instância do App Engine, como o ID do projeto, as contas de serviço e os tokens usados pelas contas do serviço. É possível acessar esses dados usando solicitações HTTP simples, visto que nenhuma biblioteca de cliente é necessária.
Nesta página, mostramos como acessar metadados de instância de um aplicativo Java 8 de ambiente de execução implantado, fazendo chamadas HTTP para os devidos endpoints do servidor de metadados.
Uma maneira útil de usar essa API é receber o token da conta de serviço e fornecê-lo como token do portador no cabeçalho de autorização de uma das APIs Google Cloud, visando autenticar o aplicativo no serviço de API específico. Consulte a documentação da Google Cloud Translation API para ver um exemplo de uso desses tokens do portador.
Como identificar qual endpoint de metadados usar
A tabela a seguir lista os endpoints em que é possível fazer solicitações HTTP para metadados específicos. O servidor de metadados está acessível em http://metadata.google.internal
.
Endpoint de metadados | Descrição |
---|---|
/computeMetadata/v1/project/numeric-project-id |
Número do projeto atribuído ao seu projeto. |
/computeMetadata/v1/project/project-id |
ID do projeto atribuído ao seu projeto. |
/computeMetadata/v1/instance/zone |
Zona em que a instância está em execução. |
/computeMetadata/v1/instance/service-accounts/default/aliases |
|
/computeMetadata/v1/instance/service-accounts/default/email |
E-mail da conta de serviço padrão atribuído ao seu projeto. |
/computeMetadata/v1/instance/service-accounts/default/ |
Lista todas as contas de serviço padrão do seu projeto. |
/computeMetadata/v1/instance/service-accounts/default/scopes |
Lista todos os escopos compatíveis com as contas de serviço padrão. |
/computeMetadata/v1/instance/service-accounts/default/token |
Retorna o token de autenticação que pode ser usado para autenticar o aplicativo em outras Google Cloud APIs. |
Por exemplo, para recuperar o código do projeto, envie uma solicitação para http://metadata.google.internal/computeMetadata/v1/project/project-id
.
Como fazer solicitações de metadados
O código de amostra a seguir recebe todos os metadados disponíveis para a instância e os exibe, exceto o token da conta do serviço.
No código de amostra, observe a verificação para assegurar que o aplicativo está em execução na produção. Se o aplicativo estiver em execução localmente, nenhum metadado será retornado das solicitações.
Além disso, observe o uso do serializador/desserializador Google Gson JSON (em inglês), do cliente HTTP e HTTP2 OkHttp (em inglês) e do sistema de modelos Thymeleaf (em inglês). Essas bibliotecas não são obrigatórias, mas são úteis para os projetos.
Como executar no local
O servidor de metadados está disponível para aplicativos implantados. Portanto, a execução local no servidor de desenvolvimento não é compatível. É possível adicionar ao código uma verificação de ambiente para exibir resultados de metadados somente quando o app estiver em execução na produção, conforme indicado no código de amostra abaixo:
String environment =
(String) System.getProperties().get("com.google.appengine.runtime.environment");
ctx.setVariable("production", environment);
// The metadata server is only on a production system
if (environment.equals("Production")) {
... //show metadata results
}