Share via


Tutorial: Conectar-se a um banco de dados PostgreSQL a partir do Java Tomcat App Service sem segredos usando uma identidade gerenciada

O Serviço de Aplicativo do Azure fornece um serviço de hospedagem na Web altamente escalável e auto-corrigido no Azure. Ele também fornece uma identidade gerenciada para seu aplicativo, que é uma solução turn-key para proteger o acesso ao 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 segredos de seu aplicativo, como credenciais nas variáveis de ambiente. Neste tutorial, irá aprender a:

  • Crie um banco de dados PostgreSQL.
  • Implante o aplicativo de exemplo no Serviço de Aplicativo do Azure no Tomcat usando o empacotamento WAR.
  • Configure um aplicativo Web Tomcat para usar a autenticação do Microsoft Entra com o Banco de Dados PostgreSQL.
  • Conecte-se ao Banco de Dados PostgreSQL com Identidade Gerenciada usando o Service Connector.

Se não tiver uma subscrição do Azure, crie uma conta gratuita do Azure antes de começar.

Pré-requisitos

Clone o aplicativo de exemplo e prepare o repositório

Execute os seguintes comandos em seu terminal para clonar o repositório de exemplo e configurar o ambiente do aplicativo de exemplo.

git clone https://github.com/Azure-Samples/Passwordless-Connections-for-Java-Apps
cd Passwordless-Connections-for-Java-Apps/Tomcat/

Criar uma Base 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, não importa onde você execute o aplicativo.

  1. Entre na CLI do Azure e, opcionalmente, defina sua assinatura se tiver mais de uma conectada às suas credenciais de logon.

    az login
    az account set --subscription <subscription-ID>
    
  2. Crie um Grupo de Recursos do Azure, anotando o nome do grupo de recursos.

    export RESOURCE_GROUP=<resource-group-name>
    export LOCATION=eastus
    
    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  3. Criar um servidor da Base de Dados do Azure para PostgreSQL. O servidor é criado com uma conta de administrador, mas não é usado porque vamos usar a conta de administrador do Microsoft Entra para executar 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
    
  4. 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 no Serviço de Aplicativo do Azure no Tomcat usando um pacote WAR.

  1. O aplicativo de exemplo contém um arquivo pom.xml que pode gerar o arquivo WAR. Execute o seguinte comando para criar o aplicativo.

    mvn clean package -f pom.xml
    
  2. Crie um recurso do 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"
    
  3. Implante 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
    

Conecte o banco de dados Postgres com conectividade de identidade

Em seguida, conecte o banco de dados usando o Service Connector.

Instale a extensão sem senha do Service Connector 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 ao sistema usando o Service Connector.

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

Este 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 ao 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 a aplicação 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

Clean up resources (Limpar recursos)

Nos passos anteriores, criou os recursos do Azure num grupo de recursos. Se achar que não vai precisar destes recursos no futuro, execute o seguinte comando no Cloud Shell para eliminar o grupo de recursos:

az group delete --name myResourceGroup

Este comando pode demorar alguns minutos a ser executado.

Próximos passos

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.