البرنامج التعليمي: الاتصال بقاعدة بيانات PostgreSQL من Java Tomcat App Service دون أسرار باستخدام هوية مدارة

توفر Azure App Service خدمة استضافة ويب قابلة للتطوير وذاتية التصحيح في Azure. كما يوفر هوية مدارة لتطبيقك، وهو حل تسليم المفتاح لتأمين الوصول إلى قاعدة بيانات Azure ل PostgreSQL وخدمات Azure الأخرى. تجعل الهويات المدارة في App Service تطبيقك أكثر أمانا من خلال التخلص من الأسرار من تطبيقك، مثل بيانات الاعتماد في متغيرات البيئة. في هذا البرنامج التعليمي، تتعلم كيفية:

  • إنشاء قاعدة بيانات PostgreSQL.
  • نشر نموذج التطبيق إلى Azure App Service على Tomcat باستخدام حزمة WAR.
  • تكوين تطبيق ويب Tomcat لاستخدام مصادقة Microsoft Entra مع قاعدة بيانات PostgreSQL.
  • الاتصال بقاعدة بيانات PostgreSQL باستخدام الهوية المدارة باستخدام موصل الخدمة.

إذا لم يكن لديك اشتراك في Azure، فأنشئ حساب Azure مجاني قبل أن تبدأ.

المتطلبات الأساسية

استنساخ نموذج التطبيق وإعداد المستودع

قم بتشغيل الأوامر التالية في الوحدة الطرفية الخاصة بك لاستنساخ عينة الريبو وإعداد بيئة نموذج التطبيق.

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

إنشاء قاعدة بيانات Azure لـ PostgreSQL

اتبع هذه الخطوات لإنشاء قاعدة بيانات Azure ل Postgres في اشتراكك. يتصل تطبيق Tomcat بقاعدة البيانات هذه ويخزن بياناته عند التشغيل، مع استمرار حالة التطبيق بغض النظر عن مكان تشغيل التطبيق.

  1. سجل الدخول إلى Azure CLI، وقم بتعيين اشتراكك اختياريا إذا كان لديك أكثر من اشتراك متصل ببيانات اعتماد تسجيل الدخول الخاصة بك.

    az login
    az account set --subscription <subscription-ID>
    
  2. إنشاء مجموعة موارد Azure، بالإضافة إلى إعادة تحديد اسم مجموعة الموارد.

    export RESOURCE_GROUP=<resource-group-name>
    export LOCATION=eastus
    
    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  3. أنشئ قاعدة بيانات Azure لخادم PostgreSQL. يتم إنشاء الخادم باستخدام حساب مسؤول، ولكن لا يتم استخدامه لأننا سنستخدم حساب مسؤول Microsoft Entra لتنفيذ المهام الإدارية.

    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. إنشاء قاعدة بيانات للتطبيق.

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

نشر التطبيق إلى App Service

اتبع هذه الخطوات لإنشاء ملف WAR ونشره في Azure App Service على Tomcat باستخدام حزمة WAR.

  1. يحتوي نموذج التطبيق على ملف pom.xml يمكنه إنشاء ملف WAR. شغّل الأمر التالي لإنشاء التطبيق.

    mvn clean package -f pom.xml
    
  2. إنشاء مورد Azure App Service على Linux باستخدام 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. نشر حزمة WAR إلى App Service.

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

توصيل قاعدة بيانات Postgres باتصال الهوية

بعد ذلك، قم بتوصيل قاعدة البيانات باستخدام Service Connector.

تثبيت ملحق Service Connector بدون كلمة مرور ل Azure CLI:

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

بعد ذلك، قم بتوصيل تطبيقك بقاعدة بيانات Postgres بهوية مدارة معينة من قبل النظام باستخدام Service Connector.

لإجراء هذا الاتصال، قم بتشغيل الأمر 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

ينشئ هذا الأمر اتصالا بين تطبيق الويب الخاص بك وخادم PostgreSQL الخاص بك، ويدير المصادقة من خلال هوية مدارة معينة من قبل النظام.

بعد ذلك، قم بتحديث إعدادات التطبيق وإضافة مكون إضافي في سلسلة الاتصال

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

اختبار نموذج تطبيق الويب

قم بتشغيل الأمر التالي لاختبار التطبيق.

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

تنظيف الموارد

في الخطوات السابقة، أنشأت موارد Azure في إحدى مجموعات الموارد. إذا لم تتوقع احتياجك لهذه الموارد في المستقبل، فاحذف مجموعة الموارد من خلال تشغيل الأمر التالي في Cloud Shell:

az group delete --name myResourceGroup

ربما يستغرق الأمر بضع دقائق للتشغيل.

الخطوات التالية

تعرّف على المزيد حول تشغيل تطبيقات Java على خدمة التطبيقات على Linux في دليل المطور.

تعرف على كيفية تأمين تطبيقك باستخدام مجال وشهادة مخصصين.