Dela via


Självstudie: Ansluta till en PostgreSQL-databas från Java Tomcat App Service utan hemligheter med hjälp av en hanterad identitet

Azure App Service erbjuder en mycket skalbar webbhotellstjänst i Azure som själv uppdaterar sig. Den innehåller också en hanterad identitet för din app, vilket är en nyckelfärdig lösning för att skydda åtkomsten till Azure Database for PostgreSQL och andra Azure tjänster. Hanterade identiteter i App Service gör din app säkrare genom att eliminera hemligheter från din app, till exempel autentiseringsuppgifter i miljövariablerna. I den här handledningen får du lära dig att:

  • Skapa en PostgreSQL-databas.
  • Distribuera exempelappen till Azure App Service på Tomcat genom WAR-paketering.
  • Konfigurera ett Tomcat-webbprogram att använda Microsoft Entra autentisering med PostgreSQL Database.
  • Anslut till PostgreSQL Database med hanterad identitet med hjälp av Service Connector.

Om du inte har ett Azure konto skapar du ett fritt konto innan du börjar.

Förutsättningar

Klona exempelappen och förbered lagringsplatsen

Kör följande kommandon i terminalen för att klona exempelrepo och konfigurera exempelappmiljön.

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

Skapa en Azure-databas för PostgreSQL

Följ de här stegen för att skapa en Azure Database for Postgres i din prenumeration. Tomcat-appen ansluter till den här databasen och lagrar sina data när den körs, vilket bevarar programtillståndet oavsett var du kör programmet.

  1. Logga in på Azure CLI och ange din prenumeration om du har fler än en ansluten till dina inloggningsuppgifter.

    az login
    az account set --subscription <subscription-ID>
    
  2. Skapa en Azure resursgrupp och notera resursgruppens namn.

    export RESOURCE_GROUP=<resource-group-name>
    export LOCATION=eastus
    
    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  3. Skapa en PostgreSQL-server med Azure Database. Servern skapas med ett administratörskonto, men den används inte eftersom vi ska använda Microsoft Entra administratörskontot för att utföra administrativa uppgifter.

    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. Skapa en databas för programmet.

    export DATABASE_NAME=checklist
    
    az postgres flexible-server db create \
        --resource-group $RESOURCE_GROUP \
        --server-name $POSTGRESQL_HOST \
        --database-name $DATABASE_NAME
    

Distribuera programmet till App Service

Följ de här stegen för att skapa en WAR-fil och distribuera till Azure App Service på Tomcat med hjälp av en WAR-paketering.

  1. Exempelappen innehåller en pom.xml fil som kan generera WAR-filen. Kör följande kommando för att skapa appen.

    mvn clean package -f pom.xml
    
  2. Skapa en Azure App Service resurs i Linux med 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. Distribuera WAR-paketet till App Service.

    az webapp deploy \
        --resource-group $RESOURCE_GROUP \
        --name $APPSERVICE_NAME \
        --src-path target/app.war \
        --type war
    

Ansluta Postgres-databasen med identitetsanslutning

Anslut sedan databasen med hjälp av Service Connector.

Installera det lösenordslösa tillägget för Service Connector för Azure CLI:

az extension add --name serviceconnector-passwordless --upgrade

Anslut sedan din app till en Postgres-databas med en systemtilldelad hanterad identitet med hjälp av Service Connector.

För att upprätta den här anslutningen kör du kommandot 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

Det här kommandot skapar en anslutning mellan webbappen och PostgreSQL-servern och hanterar autentisering via en systemtilldelad hanterad identitet.

Uppdatera sedan appinställningarna och lägg till ett insticksprogram i anslutningssträngen

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"'

Testa exemplet på webbapp

Testa programmet genom att köra följande kommando.

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

Rensa resurser

I föregående steg skapade du Azure resurser i en resursgrupp. Om du inte förväntar dig att behöva dessa resurser i framtiden tar du bort resursgruppen genom att köra följande kommando i Cloud Shell:

az group delete --name myResourceGroup

Det kan ta en minut att köra det här kommandot.

Nästa steg

Läs mer om att köra Java appar på App Service on Linux i utvecklarguiden.

Lär dig hur du skyddar din app med en anpassad domän och ett certifikat.