تكوين حمل عمل تطبيق 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