Tutorial: Koneksi ke Database PostgreSQL dari Java Tomcat App Service tanpa rahasia menggunakan identitas terkelola

Azure App Service memberikan layanan hosting web yang dapat diskalakan dan dapat menambal sendiri di Azure. Ini juga menyediakan identitas terkelola untuk aplikasi Anda, yang merupakan solusi turn-key untuk mengamankan akses ke Azure Database for PostgreSQL dan layanan Azure lainnya. Identitas terkelola di App Service membuat aplikasi Anda lebih aman dengan menghilangkan rahasia dari aplikasi Anda, seperti kredensial dalam variabel lingkungan. Dalam tutorial ini, Anda akan mempelajari cara:

  • Buat database PostgreSQL.
  • Sebarkan aplikasi sampel ke Azure App Service di Tomcat menggunakan kemasan WAR.
  • Konfigurasikan aplikasi web Tomcat untuk menggunakan autentikasi Microsoft Entra dengan PostgreSQL Database.
  • Koneksi ke Database PostgreSQL dengan Identitas Terkelola menggunakan Koneksi or Layanan.

Jika Anda tidak memiliki Langganan Azure, buat Akun gratis Azure sebelum memulai.

Prasyarat

Melakukan kloning sampel aplikasi dan menyiapkan repositori

Jalankan perintah berikut pada terminal Anda untuk mengkloning repositori sampel dan menyiapkan lingkungan aplikasi sampel.

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

Membuat Azure Database for PostgreSQL

Ikuti langkah-langkah ini untuk membuat Azure Database for Postgres di langganan Anda. Aplikasi Tomcat terhubung ke database ini dan menyimpan datanya saat berjalan, mempertahankan status aplikasi di mana pun Anda menjalankan aplikasi.

  1. Masuk ke Azure CLI, dan secara opsional atur langganan Anda jika Anda memiliki lebih dari satu yang tersambung ke kredensial masuk Anda.

    az login
    az account set --subscription <subscription-ID>
    
  2. Buat Grup Sumber Daya Azure, mencatat nama grup sumber daya.

    export RESOURCE_GROUP=<resource-group-name>
    export LOCATION=eastus
    
    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  3. Buat server Azure Database for PostgreSQL. Server dibuat dengan akun administrator, tetapi tidak digunakan karena kami akan menggunakan akun admin Microsoft Entra untuk melakukan tugas administratif.

    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. Buat database untuk aplikasi.

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

Menyebarkan aplikasi ke App Service

Ikuti langkah-langkah ini untuk membangun file WAR dan menyebarkan ke Azure App Service di Tomcat menggunakan kemasan WAR.

  1. Aplikasi sampel berisi file pom.xml yang dapat menghasilkan file WAR. Jalankan perintah berikut untuk membangun aplikasi.

    mvn clean package -f pom.xml
    
  2. Buat sumber daya Azure App Service di Linux menggunakan 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. Sebarkan paket WAR ke App Service.

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

Koneksi database Postgres dengan konektivitas identitas

Selanjutnya, sambungkan database menggunakan Service Koneksi or.

Instal ekstensi Service Koneksi or passwordless untuk Azure CLI:

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

Kemudian, sambungkan aplikasi Anda ke database Postgres dengan identitas terkelola yang ditetapkan sistem menggunakan Service Koneksi or.

Untuk membuat koneksi ini, jalankan perintah 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

Perintah ini membuat koneksi antara aplikasi web dan server PostgreSQL Anda, dan mengelola autentikasi melalui identitas terkelola yang ditetapkan sistem.

Selanjutnya, perbarui App Pengaturan dan tambahkan plugin di string koneksi

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

Menguji contoh aplikasi web

Jalankan perintah berikut untuk menguji aplikasi.

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

Membersihkan sumber daya

Di langkah-langkah sebelumnya, Anda membuat sumber daya Azure dalam grup sumber daya. Jika Anda tidak membutuhkan sumber daya ini di masa mendatang, hapus grup sumber daya dengan menjalankan perintah berikut ini di Cloud Shell:

az group delete --name myResourceGroup

Perintah ini mungkin perlu waktu beberapa saat untuk dijalankan.

Langkah berikutnya

Pelajari lebih lanjut tentang menjalankan aplikasi Java di App Service pada Linux dalam panduan pengembang.

Pelajari cara mengamankan aplikasi Anda dengan domain dan sertifikat kustom.