تكوين حمل عمل تطبيق Linux

مكتمل

في هذه الوحدة ستتعلم:

  • تكوين حمل عمل تطبيق Linux للاتصال بقاعدة بيانات Azure ل PostgreSQL باستخدام هوية مدارة معينة من قبل النظام.
  • الاتصال بجهاز Azure الظاهري باستخدام Azure CLI.
  • تثبيت الأدوات اللازمة.
  • اتصل بخادم PostgreSQL باستخدام psql.
  • استنساخ المستودع الذي يحتوي على نموذج التطبيق.
  • قم بتشغيل التطبيق وتأكد من أنه يمكنه الاتصال بخادم PostgreSQL باستخدام الهوية المدارة.

الحصول على المستخدم الذي قام بتسجيل الدخول حاليا ومعرف الجهاز الظاهري

USER_ID=$(az ad signed-in-user show --query id --output tsv)
VM_ID=$(az vm show --resource-group 240900-linux-postgres --name vm-1 --query id --output tsv)

تعيين دور تسجيل دخول مسؤول الجهاز الظاهري إلى المستخدم للجهاز الظاهري

يمكنك قراءة المزيد حول الأدوار المتميزة لأجهزة Azure الظاهرية في الأدوار المضمنة في Azure للامتيازات.

az role assignment create \
    --assignee $USER_ID \
    --scope $VM_ID \
    --role "Virtual Machine Administrator Login"

الاتصال بجهاز Azure الظاهري باستخدام Azure CLI

az ssh vm --resource-group 240900-linux-postgres --name vm-1

تثبيت psql وGo على الجهاز الظاهري

تحديث قائمة الحزم:

sudo apt-get update

تثبيت عميل PostgreSQL وGo (Golang) على الجهاز الظاهري:

sudo apt-get install -y postgresql-client golang-go

تأكيد إصدار psql

psql --version

تثبيت Azure CLI على الجهاز الظاهري

curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash

تسجيل الدخول إلى Azure CLI باستخدام الهوية المدارة المعينة من قبل النظام

az login --identity

يظهر الإخراج التالي:

$ az login --identity
[
  {
    "environmentName": "AzureCloud",
    "homeTenantId": "b4c72be8-cae1-4584-be77-62b1e94ad0dc",
    "id": "57039e18-c12e-4c87-a3e8-bf497991699d",
    "isDefault": true,
    "managedByTenants": [],
    "name": "CloudNative",
    "state": "Enabled",
    "tenantId": "b4c72be8-cae1-4584-be77-62b1e94ad0dc",
    "user": {
      "assignedIdentityInfo": "MSI",
      "name": "systemAssignedIdentity",
      "type": "servicePrincipal"
    }
  }
]

الاتصال بخادم PostgreSQL باستخدام Bash وpsql

قم بتشغيل الأوامر التالية على الجهاز البعيد:

MANAGED_IDENTITY_NAME=240900-linux-postgres-identity
export AZURE_CLIENT_ID=$(az identity show --resource-group 240900-linux-postgres --name $MANAGED_IDENTITY_NAME --query "clientId" -o tsv)
PG_NAME=$(az postgres flexible-server list --resource-group 240900-linux-postgres --query "[0].name" -o tsv)

# Set psql environment variables
export PGHOST="${PG_NAME}.privatelink.postgres.database.azure.com"
export PGPASSWORD=$(curl -s "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fossrdbms-aad.database.windows.net&client_id=${AZURE_CLIENT_ID}" -H Metadata:true | jq -r .access_token)
export PGUSER=$MANAGED_IDENTITY_NAME
export PGDATABASE=postgres

# Log in by using psql
psql

بعد الاتصال، يظهر الإخراج التالي. \q أدخل الأمر للخروج.

$ psql
psql (16.4 (Ubuntu 16.4-0ubuntu0.24.04.2))
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
Type "help" for help.

postgres=> \q
$ 

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

استنساخ نموذج التطبيق، Tailwind Traders (Go). قم بتشغيل الأوامر التالية على الجهاز البعيد:

git clone https://github.com/Azure-Samples/tailwind-traders-go.git

التغيير إلى دليل التطبيق:

cd tailwind-traders-go/app/

شغّل التطبيق:

go run main.go

يجب أن يكون الإخراج مشابهًا لما يلي:

$ go run main.go
go: downloading github.com/magefile/mage v1.15.0
go: downloading github.com/Azure/azure-sdk-for-go/sdk/azcore v1.14.0
go: downloading github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.7.0
go: downloading github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0
go: downloading github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2
go: downloading golang.org/x/crypto v0.26.0
go: downloading golang.org/x/net v0.28.0
go: downloading github.com/google/uuid v1.6.0
go: downloading github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c
go: downloading github.com/kylelemons/godebug v1.1.0
go: downloading github.com/golang-jwt/jwt/v5 v5.2.1
go: downloading golang.org/x/text v0.17.0
Targets:
  app:connectionString    outputs a connection string for the database from env vars
  app:ping                pings the database
  app:serve               runs a web server for our application
  app:tables              lists the tables in the database
  app:token               gets a token using `azidentity.NewDefaultAzureCredential`

الاتصال بخادم PostgreSQL باستخدام تطبيق Tailwind Traders (Go): هدف الرمز المميز

MANAGED_IDENTITY_NAME=240900-linux-postgres-identity
export AZURE_CLIENT_ID=$(az identity show --resource-group 240900-linux-postgres --name $MANAGED_IDENTITY_NAME --query "clientId" -o tsv)
PG_NAME=$(az postgres flexible-server list --resource-group 240900-linux-postgres --query "[0].name" -o tsv)

# psql
export PGHOST="${PG_NAME}.privatelink.postgres.database.azure.com"
export PGPASSWORD=$(go run main.go app:token)
export PGUSER=$MANAGED_IDENTITY_NAME
export PGDATABASE=postgres

# Log in by using psql
psql

إنهاء psql وقطع الاتصال من الجهاز البعيد

إنهاء psql:

\q

قطع الاتصال من الجهاز البعيد:

exit

الموارد