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

Azure App Service menyediakan layanan hosting web yang sangat mudah diskalakan dan memperbarui sendiri di Azure. Ini juga menyediakan identitas terkelola untuk aplikasi Anda, yang merupakan solusi siap pakai untuk mengamankan akses ke Azure Database untuk 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 belajar cara:

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

Jika Anda tidak memiliki akun Azure, buat akun free sebelum Memulai.

Prasyarat

Mengkloning aplikasi sampel 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 Database Azure untuk 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 jika diperlukan, atur langganan Anda jika Anda memiliki lebih dari satu yang terhubung dengan kredensial masuk Anda.

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

    export RESOURCE_GROUP=<resource-group-name>
    export LOCATION=eastus
    
    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  3. Buat sebuah server Azure Database untuk 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. Untuk membuat aplikasi, jalankan perintah berikut.

    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
    

Menyambungkan database Postgres dengan konektivitas identitas

Selanjutnya, sambungkan database menggunakan Konektor Layanan.

Instal ekstensi tanpa kata sandi Konektor Layanan untuk Azure CLI:

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

Kemudian, sambungkan aplikasi Anda ke database Postgres dengan identitas terkelola yang ditetapkan sistem menggunakan Konektor Layanan.

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 Pengaturan Aplikasi dan tambahkan plugin di connection string

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 sampel aplikasi web

Uji aplikasi dengan menjalankan perintah berikut.

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

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

az group delete --name myResourceGroup

Perintah ini mungkin perlu waktu satu menit untuk dijalankan.

Langkah selanjutnya

Pelajari selengkapnya tentang menjalankan aplikasi Java di App Service on Linux di panduan pengembang.

Pelajari cara mengamankan aplikasi Anda dengan domain dan sertifikat kustom.