مشاركة عبر


البرنامج التعليمي - كيفية استخدام cloud-init لتخصيص جهاز Linux الظاهري في Azure عند التمهيد الأول

ينطبق على: ✔️ أجهزة Linux الظاهرية ✔️ مجموعات مقياس مرنة

في برنامج تعليمي سابق، تعلمت كيفية استخدام SSH على جهاز ظاهري (VM) وتثبيت NGINX يدويًّا. لإنشاء أجهزة ظاهرية بطريقة سريعة ومتسقة، عادة ما تكون بعض أشكال الأتمتة مطلوبة. تتمثل الطريقة الشائعة لتخصيص جهاز افتراضي في التمهيد الأول في استخدام cloud-init. في هذا البرنامج التعليمي، ستتعرف على كيفية القيام بما يلي:

  • إنشاء ملف تهيئة cloud-init
  • إنشاء جهاز ظاهري يستخدم ملف cloud-init
  • عرض تطبيق Node.js قيد التشغيل بعد إنشاء الجهاز الظاهري
  • استخدم Key Vault لتخزين الشهادات بأمان
  • أتمتة عمليات النشر الآمنة لـ NGINX باستخدام cloud-init

إذا اخترت تثبيت CLI واستخدامه محليًّا، فإن هذا البرنامج التعليمي يتطلب تشغيل الإصدار 2.0.30 من Azure CLI أو إصدار لاحق. قم بتشغيل az --version للعثور على الإصدار. إذا كنت بحاجة إلى التثبيت أو الترقية، فراجع تثبيت Azure CLI.

نظرة عامة على Cloud-init

تُعَد Cloud-init طريقة مستخدمة على نطاق واسع لتخصيص جهاز Linux ظاهري في أثناء تشغيله لأول مرة. يمكنك استخدام cloud-init لتثبيت الحزم وكتابة الملفات، أو لتكوين المستخدمين والأمان. نظرًا لأن أداة cloud-init تعمل في أثناء عملية التمهيد الأولية، فلا توجد خطوات إضافية أو عوامل مطلوبة لتطبيق التكوين الخاص بك.

تعمل Cloud-init أيضًا عبر التوزيعات. على سبيل المثال، لا تستخدم تثبيت apt-get أو تثبيت تثبيت yum لتثبيتحزمة. بدلًا من ذلك يمكنك تحديد قائمة الحزم لتثبيتها. يستخدم Cloud-init تلقائيًّا أداة إدارة الحزمة الأصلية للتوزيعة التي تحددها.

نحن نعمل مع شركائنا لتضمين السحابة الأولية والعمل في الصور التي يقدمونها إلى Azure. للحصول على معلومات تفصيلية عن دعم السحابة المبدئية لكل توزيع، راجع دعم السحابة الأولية للأجهزة الافتراضية في Azure.

إنشاء ملف تهيئة cloud-init

لمشاهدة بدء cloud-init، قم بإنشاء جهاز ظاهري يقوم بتثبيت NGINX وتشغيل تطبيق Node.js بشكل بسيط"Hello World". يقوم تكوين cloud-init التالي بتثبيت الحزم المطلوبة، وإنشاء تطبيق Node.js، ثم تهيئة التطبيق وبدء تشغيله.

في bash prompt الخاص بك أو في Cloud Shell، قم بإنشاء ملف باسمcloud-init.txt وألصق التكوين التالي. على سبيل المثال، أدخل sensible-editor cloud-init.txt لإنشاء الملف ومشاهدة قائمة بالمحررين المتاحين. تأكد من نسخ ملف cloud-init بالكامل وبشكل صحيح، خاصة السطر الأول:

#cloud-config
package_upgrade: true
packages:
  - nginx
  - nodejs
  - npm
write_files:
  - owner: www-data:www-data
    path: /etc/nginx/sites-available/default
    defer: true
    content: |
      server {
        listen 80;
        location / {
          proxy_pass http://localhost:3000;
          proxy_http_version 1.1;
          proxy_set_header Upgrade $http_upgrade;
          proxy_set_header Connection keep-alive;
          proxy_set_header Host $host;
          proxy_cache_bypass $http_upgrade;
        }
      }
  - owner: azureuser:azureuser
    path: /home/azureuser/myapp/index.js
    defer: true
    content: |
      var express = require('express')
      var app = express()
      var os = require('os');
      app.get('/', function (req, res) {
        res.send('Hello World from host ' + os.hostname() + '!')
      })
      app.listen(3000, function () {
        console.log('Hello world app listening on port 3000!')
      })
runcmd:
  - service nginx restart
  - cd "/home/azureuser/myapp"
  - npm init
  - npm install express -y
  - nodejs index.js

لمزيد من المعلومات حول خيارات تكوين السحابة، راجع أمثلة التكوين cloud-init .

إنشاء جهاز ظاهري

قبل أن تتمكن من إنشاء جهاز ظاهري قم بإنشاء مجموعة موارد باستخدام az group . ينشئ المثال التالي مجموعة موارد. في هذه الأوامر، يتم إلحاق لاحقة عشوائية بأسماء مجموعة الموارد والأجهزة الظاهرية لمنع تضارب الأسماء أثناء عمليات النشر المتكررة.

export RANDOM_SUFFIX=$(openssl rand -hex 3)
export RESOURCE_GROUP="myResourceGroupAutomate$RANDOM_SUFFIX"
export REGION="eastus2"
az group create --name $RESOURCE_GROUP --location $REGION

النتائج:

{
  "id": "/subscriptions/xxxxx-xxxxx-xxxxx-xxxxx/resourceGroups/myResourceGroupAutomatexxx",
  "location": "eastus",
  "managedBy": null,
  "name": "myResourceGroupAutomatexxx",
  "properties": {
    "provisioningState": "Succeeded"
  },
  "tags": null,
  "type": "Microsoft.Resources/resourceGroups"
}

قم بإنشاء جهاز ظاهري باستخدام az vm create. استخدم المعلمة --custom-dataلتمرير ملف التكوين الخاص بـ cloud-init. قم بتوفير المسار الكامل لتكوين cloud-init.txtإذا قمت بحفظ الملف خارج دليل العمل الحالي. ينشئ المثال التالي جهازا ظاهريا؛ لاحظ أن اسم الجهاز الظاهري ملحق أيضا باللاحقة العشوائية.

export VM_NAME="myAutomatedVM$RANDOM_SUFFIX"
az vm create \
    --resource-group $RESOURCE_GROUP \
    --name $VM_NAME \
    --image Ubuntu2204 \
    --admin-username azureuser \
    --generate-ssh-keys \
    --custom-data cloud-init.txt

النتائج:

{
  "fqdns": "",
  "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupAutomatexxx/providers/Microsoft.Compute/virtualMachines/myAutomatedVMxxx",
  "location": "eastus",
  "name": "myAutomatedVMxxx",
  "powerState": "VM running",
  "publicIpAddress": "x.x.x.x",
  "resourceGroup": "myResourceGroupAutomatexxx",
  "zones": ""
}

يستغرق الأمر بضع دقائق لإنشاء الجهاز الظاهري، وتثبيت الحزم، وبدء التطبيق. هناك مهام في الخلفية يستمر تشغيلها بعد أن يعيدك Azure CLI إلى المطالبة. قد يستغرق الأمر بضع دقائق أخرى قبل أن تتمكن من الوصول إلى التطبيق. عندما يتم إنشاء الجهاز الظاهري، قم بتدوينpublicIpAddress ما يتم عرضه بواسطة Azure CLI. يستخدم هذا العنوان للوصول إلى تطبيق Node.js عبر متصفح ويب.

للسماح لحركة مرور الويب بالوصول إلى الجهاز الظاهري، افتح المنفذ 80 من الإنترنت باستخدام منفذaz vm open-port

az vm open-port --port 80 --resource-group $RESOURCE_GROUP --name $VM_NAME

النتائج:

{
  "endpoints": [
    {
      "name": "80",
      "protocol": "tcp",
      "publicPort": 80,
      "privatePort": 80
    }
  ],
  "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupAutomatexxx/providers/Microsoft.Compute/virtualMachines/myAutomatedVMxxx",
  "location": "eastus",
  "name": "myAutomatedVMxxx"
}

اختبار موقع الويب

يمكنك الآن فتح مستعرض ويب وإدخال عنوان IP العام في شريط العناوين. وفِّر عنوان IP العام الخاص بك من عملية إنشاء جهاز ظاهري. يتم عرض صفحة تطبيق Node.js كما هو موضح في المثال التالي:

لقطة شاشة تعرض موقع NGINX قيد التشغيل.

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

في هذا البرنامج التعليمي، قمت بتكوين أجهزة ظاهرية عند التمهيد الأول باستخدام cloud-init. لقد تعرفت على كيفية:

  • إنشاء ملف تهيئة cloud-init
  • إنشاء جهاز ظاهري يستخدم ملف cloud-init
  • عرض تطبيق Node.js قيد التشغيل بعد إنشاء الجهاز الظاهري
  • استخدم Key Vault لتخزين الشهادات بأمان
  • أتمتة عمليات النشر الآمنة لـ NGINX باستخدام cloud-init

انتقل إلى البرنامج التعليمي التالي لمعرفة كيفية إنشاء صور مخصصة للجهاز الظاهري.