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 tillhandahåller en mycket skalbar webbvärdtjänst med självkorrigering i Azure. Den tillhandahå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 självstudien lär du dig att:

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

Om du inte har en Azure-prenumeration skapar du ett kostnadsfritt Azure-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 Database 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 Azure Database for PostgreSQL-server. 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ällningar och lägg till plugin-program i anslutningssträng

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

Kör följande kommando för att testa programmet.

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 de föregående stegen skapade du Azure-resurser i en resursgrupp. Om du inte tror att du behöver 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 några minuter att köra kommandot.

Nästa steg

Läs mer om hur du kör Java-appar i App Service på Linux i utvecklarhandboken.

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