Tutorial: Conectar-se ao Banco de Dados PostgreSQL do Serviço de Aplicativo Java Tomcat sem segredos usando uma identidade gerenciada
O Serviço de Aplicativo do Azure fornece um serviço de hospedagem na Web altamente escalonável e com aplicação automática de patches no Azure. Também fornece uma identidade gerenciada para o aplicativo, que é uma solução perfeita para proteger o acesso a o Banco de Dados do Azure para PostgreSQL e outros serviços do Azure. As identidades gerenciadas no Serviço de Aplicativo tornam seu aplicativo mais seguro, eliminando os segredos do aplicativo, como as credenciais nas variáveis de ambiente. Neste tutorial, você aprenderá a:
- Criar um banco de dados PostgreSQL.
- Implante o aplicativo de exemplo para Serviço de Aplicativo do Azure no Tomcat usando o empacotamento WAR.
- Configure um aplicativo Web Tomcat para usar autenticação do Microsoft Entra com o Banco de Dados PostgreSQL.
- Conecte-se ao Banco de Dados PostgreSQL com Identidade Gerenciada usando o Conector de Serviço.
Caso você não tenha uma assinatura do Azure, crie uma conta gratuita do Azure antes de começar.
Pré-requisitos
- Git
- Java JDK
- Maven
- CLI do Azure versão 2.45.0 ou superior.
Clonar o aplicativo de exemplo e preparar o repositório
Execute os seguintes comandos no seu terminal para clonar o repositório de exemplo e configurar o ambiente de aplicativo de exemplo.
git clone https://github.com/Azure-Samples/Passwordless-Connections-for-Java-Apps
cd Passwordless-Connections-for-Java-Apps/Tomcat/
Criar um Banco de Dados do Azure para o PostgreSQL
Siga estas etapas para criar um Banco de Dados do Azure para Postgres em sua assinatura. O aplicativo Tomcat se conecta a esse banco de dados e armazena seus dados durante a execução, persistindo o estado do aplicativo independentemente de onde ele seja executado.
Entre na CLI do Azure e, opcionalmente, configure sua assinatura se tiver mais de um usuário conectado às suas credenciais de logon.
az login az account set --subscription <subscription-ID>
Crie um Grupo de Recursos do Azure observando o nome do grupo de recursos.
export RESOURCE_GROUP=<resource-group-name> export LOCATION=eastus az group create --name $RESOURCE_GROUP --location $LOCATION
Crie um servidor de Banco de Dados do Azure para PostgreSQL. O servidor é criado com uma conta de administrador, mas ela não é usada porque utilizaremos a conta de administrador do Microsoft Entra para realizar tarefas administrativas.
export POSTGRESQL_ADMIN_USER=azureuser # PostgreSQL admin access rights won't be used because Azure AD authentication is leveraged to administer the database. export POSTGRESQL_ADMIN_PASSWORD=<admin-password> export POSTGRESQL_HOST=<postgresql-host-name> # Create a PostgreSQL server. az postgres flexible-server create \ --resource-group $RESOURCE_GROUP \ --name $POSTGRESQL_HOST \ --location $LOCATION \ --admin-user $POSTGRESQL_ADMIN_USER \ --admin-password $POSTGRESQL_ADMIN_PASSWORD \ --public-access 0.0.0.0 \ --sku-name Standard_D2s_v3
Crie um banco de dados para o aplicativo.
export DATABASE_NAME=checklist az postgres flexible-server db create \ --resource-group $RESOURCE_GROUP \ --server-name $POSTGRESQL_HOST \ --database-name $DATABASE_NAME
Implantar o aplicativo no Serviço de Aplicativo
Siga estas etapas para criar um arquivo WAR e implantar em Serviço de Aplicativo do Azure no Tomcat usando um empacotamento WAR.
O aplicativo de exemplo contém um arquivo pom.xml que pode gerar o arquivo WAR. Execute o comando a seguir para compilar o aplicativo.
mvn clean package -f pom.xml
Crie um recurso Serviço de Aplicativo do Azure no Linux usando o Tomcat 9.0.
export APPSERVICE_PLAN=<app-service-plan> export APPSERVICE_NAME=<app-service-name> # Create an App Service plan az appservice plan create \ --resource-group $RESOURCE_GROUP \ --name $APPSERVICE_PLAN \ --location $LOCATION \ --sku B1 \ --is-linux # Create an App Service resource. az webapp create \ --resource-group $RESOURCE_GROUP \ --name $APPSERVICE_NAME \ --plan $APPSERVICE_PLAN \ --runtime "TOMCAT:10.0-java11"
Implantar o pacote WAR no Serviço de Aplicativo.
az webapp deploy \ --resource-group $RESOURCE_GROUP \ --name $APPSERVICE_NAME \ --src-path target/app.war \ --type war
Conectar o banco de dados Postgres com conectividade de identidade
Em seguida, conecte o banco de dados usando o Conector de Serviço.
Instale a extensão sem senha do Conector de Serviço para a CLI do Azure:
az extension add --name serviceconnector-passwordless --upgrade
Em seguida, conecte seu aplicativo a um banco de dados Postgres com uma identidade gerenciada atribuída pelo sistema usando o Conector de Serviço.
Para fazer essa conexão, execute o comando az webapp connection create.
az webapp connection create postgres-flexible \
--resource-group $RESOURCE_GROUP \
--name $APPSERVICE_NAME \
--target-resource-group $RESOURCE_GROUP \
--server $POSTGRESQL_HOST \
--database $DATABASE_NAME \
--system-identity \
--client-type java
Esse comando cria uma conexão entre seu aplicativo Web e seu servidor PostgreSQL e gerencia a autenticação por meio de uma identidade gerenciada atribuída pelo sistema.
Em seguida, atualize as Configurações do Aplicativo e adicione o plug-in na cadeia de conexão
export AZURE_POSTGRESQL_CONNECTIONSTRING=$(\
az webapp config appsettings list \
--resource-group $RESOURCE_GROUP \
--name $APPSERVICE_NAME \
| jq -c -r '.[] \
| select ( .name == "AZURE_POSTGRESQL_CONNECTIONSTRING" ) \
| .value')
az webapp config appsettings set \
--resource-group $RESOURCE_GROUP \
--name $APPSERVICE_NAME \
--settings 'CATALINA_OPTS=-DdbUrl="'"${AZURE_POSTGRESQL_CONNECTIONSTRING}"'&authenticationPluginClassName=com.azure.identity.extensions.jdbc.postgresql.AzurePostgresqlAuthenticationPlugin"'
Testar o aplicativo Web de exemplo
Execute o seguinte comando para testar o aplicativo.
export WEBAPP_URL=$(az webapp show \
--resource-group $RESOURCE_GROUP \
--name $APPSERVICE_NAME \
--query defaultHostName \
--output tsv)
# Create a list
curl -X POST -H "Content-Type: application/json" -d '{"name": "list1","date": "2022-03-21T00:00:00","description": "Sample checklist"}' https://${WEBAPP_URL}/checklist
# Create few items on the list 1
curl -X POST -H "Content-Type: application/json" -d '{"description": "item 1"}' https://${WEBAPP_URL}/checklist/1/item
curl -X POST -H "Content-Type: application/json" -d '{"description": "item 2"}' https://${WEBAPP_URL}/checklist/1/item
curl -X POST -H "Content-Type: application/json" -d '{"description": "item 3"}' https://${WEBAPP_URL}/checklist/1/item
# Get all lists
curl https://${WEBAPP_URL}/checklist
# Get list 1
curl https://${WEBAPP_URL}/checklist/1
Limpar os recursos
Nas etapas anteriores, você criou os recursos do Azure em um grupo de recursos. Se você acha que não precisará desses recursos no futuro, exclua o grupo de recursos executando o seguinte comando no Cloud Shell:
az group delete --name myResourceGroup
Esse comando pode demorar um pouco para ser executado.
Próximas etapas
Saiba mais sobre como executar aplicativos Java no Serviço de Aplicativo no Linux no guia do desenvolvedor.
Saiba como proteger seu aplicativo com um domínio e um certificado personalizados.