إنشاء قالب Azure Image Builder Bicep أو قالب ARM JSON
ينطبق على: ✔️ أجهزة Linux الظاهرية ✔️ أجهزة Windows الظاهرية ✔️ مجموعات مقياس مرنة
يستخدم Azure Image Builder ملف Bicep أو ملف قالب JSON لقالب ARM لتمرير المعلومات إلى خدمة Image Builder. في هذه المقالة، نستعرض أقسام الملفات، حتى تتمكن من إنشاء ملفاتك الخاصة. للحصول على أحدث إصدارات API، انظر مرجع القالب. للاطلاع على أمثلة لملفات .json الكاملة، راجع Azure Image Builder GitHub.
التنسيق الأساسي هو:
{
"type": "Microsoft.VirtualMachineImages/imageTemplates",
"location": "<region>",
"tags": {
"<name>": "<value>",
"<name>": "<value>"
},
"identity": {},
"properties": {
"buildTimeoutInMinutes": <minutes>,
"customize": [],
"errorHandling":[],
"distribute": [],
"optimize": [],
"source": {},
"stagingResourceGroup": "/subscriptions/<subscriptionID>/resourceGroups/<stagingResourceGroupName>",
"validate": {},
"vmProfile": {
"vmSize": "<vmSize>",
"osDiskSizeGB": <sizeInGB>,
"vnetConfig": {
"subnetId": "/subscriptions/<subscriptionID>/resourceGroups/<vnetRgName>/providers/Microsoft.Network/virtualNetworks/<vnetName>/subnets/<subnetName1>",
"containerInstanceSubnetId": "/subscriptions/<subscriptionID>/resourceGroups/<vnetRgName>/providers/Microsoft.Network/virtualNetworks/<vnetName>/subnets/<subnetName2>",
"proxyVmSize": "<vmSize>"
},
"userAssignedIdentities": [
"/subscriptions/<subscriptionID>/resourceGroups/<identityRgName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identityName1>",
"/subscriptions/<subscriptionID>/resourceGroups/<identityRgName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identityName2>",
"/subscriptions/<subscriptionID>/resourceGroups/<identityRgName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identityName3>",
...
]
}
}
}
إصدار API
سيتغير إصدار واجهة برمجة التطبيقات بمرور الوقت مع تغير واجهة برمجة التطبيقات. راجع أحدث الميزات في Azure VM Image Builder لجميع تغييرات واجهة برمجة التطبيقات الرئيسية وتحديثات الميزات لخدمة Azure VM Image Builder.
نوع
يُعد type
نوع المورد، والذي يجب أن يكون Microsoft.VirtualMachineImages/imageTemplates
.
الموقع
الموقع هو المنطقة التي يتم فيها إنشاء الصورة المخصصة. يتم دعم المناطق التالية:
- شرق الولايات المتحدة
- East US 2
- غرب وسط الولايات المتحدة
- غرب الولايات المتحدة
- West US 2
- غرب الولايات المتحدة الأمريكية 3
- South Central US
- أوروبا الشمالية
- أوروبا الغربية
- جنوب شرق آسيا
- جنوب شرق أستراليا
- شرق أستراليا
- جنوب المملكة المتحدة
- غرب المملكة المتحدة
- جنوب البرازيل
- وسط كندا
- وسط الهند
- Central US
- وسط فرنسا
- وسط غرب ألمانيا
- شرق اليابان
- وسط شمال الولايات المتحدة
- شرق النرويج
- شمال سويسرا
- جيو الهند الغربية
- شمال الإمارات العربية المتحدة
- شرق آسيا
- وسط كوريا
- جنوب أفريقيا
- قطر الوسطى
- USGov أريزونا (إصدار أولي للاستخدام العام)
- USGov فرجينيا (إصدار أولي للاستخدام العام)
- شمال الصين 3 (معاينة عامة)
- منطقة السويد الوسطى
- بولندا الوسطى
- منطقة شمال إيطاليا
- إسرائيل الوسطى
هام
قم بتسجيل الميزة Microsoft.VirtualMachineImages/FairfaxPublicPreview
للوصول إلى المعاينة العامة لـ Azure Image Builder في مناطق Azure Government (USGov Arizona و USGov Virginia).
هام
سجل الميزة Microsoft.VirtualMachineImages/MooncakePublicPreview
للوصول إلى المعاينة العامة ل Azure Image Builder في منطقة شمال الصين 3.
للوصول إلى المعاينة العامة ل Azure VM Image Builder في مناطق Azure Government (USGov Arizona وUSGov Virginia)، يجب عليك تسجيل ميزة Microsoft.VirtualMachineImages/FairfaxPublicPreview . للقيام بذلك، قم بتشغيل الأمر التالي إما في PowerShell أو Azure CLI:
Register-AzProviderPreviewFeature -ProviderNamespace Microsoft.VirtualMachineImages -Name FairfaxPublicPreview
للوصول إلى المعاينة العامة ل Azure VM Image Builder في منطقة شمال الصين 3، يجب عليك تسجيل ميزة Microsoft.VirtualMachineImages/MooncakePublicPreview . للقيام بذلك، قم بتشغيل الأمر التالي إما في PowerShell أو Azure CLI:
Register-AzProviderPreviewFeature -ProviderNamespace Microsoft.VirtualMachineImages -Name MooncakePublicPreview
موقع البيانات
لا تقوم خدمة Azure VM Image Builder بتخزين بيانات العملاء أو معالجتها خارج المناطق التي لديها متطلبات صارمة لموقع بيانات منطقة واحدة عندما يطلب العميل القيام بإنشاء في تلك المنطقة. إذا كان انقطاع الخدمة للمناطق التي لديها متطلبات موقع البيانات، تحتاج إلى إنشاء ملفات/قوالب Bicep في منطقة وجغرافية مختلفة.
التكرار في المنطقة
يدعم التوزيع تكرار المنطقة، ويتم توزيع VHDs على حساب التخزين المتكرر للمنطقة (ZRS) بشكل افتراضي، وسيدعم إصدار Azure Compute Gallery (المعروف سابقاً باسم Shared Image Gallery) نوع تخزين ZRS إذا تم تحديده.
علامات
العلامات هي أزواج مفتاح/قيمة يمكنك تحديدها للصورة التي تم إنشاؤها.
الهوية
هناك طريقتان لإضافة الهويات المعينة من قِبَل المستخدم الموضحة أدناه.
الهوية المعينة من قِبَل المستخدم لمورد قالب Azure Image Builder
مطلوب - لكي يكون لدى Image Builder أذونات لقراءة/كتابة الصور، وقراءة البرامج النصية من Azure Storage، يجب عليك إنشاء هوية معيّنة من قبل مستخدم Azure لها أذونات إلى الموارد الفردية. للحصول على تفاصيل حول كيفية عمل أذونات Image Builder، والخطوات ذات الصلة، راجع إنشاء صورة واستخدام هوية مُدارة معينة من قبل المستخدم للوصول إلى الملفات في حساب تخزين Azure.
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"<imgBuilderId>": {}
}
}
الهوية المعينة من قِبَل مستخدم خدمة Image Builder:
- تدعم هوية واحدة فقط.
- لا تدعم أسماء المجالات المخصصة.
لمعرفة المزيد، راجع ما هي الهويات المدارة لموارد Azure؟. لمزيد من المعلومات حول نشر هذه الميزة، راجع تكوين الهويات المدارة لموارد Azure على Azure VM باستخدام Azure CLI.
الهوية المعينة من قبل المستخدم لـ Image Builder Build VM
هذه الخاصية متاحة فقط في إصدارات API2021-10-01
أو أحدث.
اختياري - يتم استخدام الجهاز الظاهري لإنشاء منشئ الصور الذي تم إنشاؤه بواسطة خدمة Image Builder في اشتراكك لإنشاء الصورة وتخصيصها. لكي يحصل Image Builder Build VM على أذونات المصادقة مع خدمات أخرى مثل Azure Key Vault في اشتراكك، يجب عليك إنشاء Azure User Assigned Identities واحدة أو أكثر تتضمن أذونات للموارد الفردية. يمكن لـ Azure Image Builder بعد ذلك إقران هذه الهويات المعينة من قِبَل المستخدم بـ Build VM. يمكن للبرامج النصية المخصصة التي تعمل داخل Build VM بعد ذلك جلب الرموز المميزة لهذه الهويات والتفاعل مع موارد Azure الأخرى حسب الحاجة. يجب أن تعلم أن الهوية المعينة من قِبَل المستخدم لمنشئ الصور في Azure يجب أن يكون لديها تعيين دور "عامل الهوية المُدارة" على جميع الهويات المعينة من قِبَل المستخدم لمنشئ الصور في Azure حتى تتمكن من ربطها بالجهاز الظاهري للإنشاء.
إشعار
يجب أن تعلم أنه يمكن تحديد هويات متعددة للجهاز الظاهري لإنشاء منشئ الصور، بما في ذلك الهوية التي أنشأتها لمورد قالب الصورة. بشكل افتراضي، لن تتم إضافة الهوية التي قمت بإنشائها لمورد قالب الصورة تلقائيًا إلى الإصدار الظاهري للبناء.
"properties": {
"vmProfile": {
"userAssignedIdentities": [
"/subscriptions/<subscriptionID>/resourceGroups/<identityRgName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identityName>"
]
}
}
الهوية المعينة من قِبَل مستخدم Image Builder Build VM:
- تدعم قائمة واحدة أو أكثر من الهويات المُدارة المعينة من قبل المستخدم والتي سيتم تكوينها على الجهاز الظاهري.
- تدعم سيناريوهات الاشتراك المتقاطع (الهوية التي تم إنشاؤها في اشتراك واحد بينما يتم إنشاء قالب الصورة في اشتراك آخر ضمن نفس المستأجر).
- لا تدعم سيناريوهات المستأجر عبر (تم إنشاء الهوية في مستأجر واحد أثناء إنشاء قالب الصورة في مستأجر آخر).
لمعرفة المزيد، راجع:
- كيفية استخدام الهويات المدارة لموارد Azure على جهاز Azure الظاهري للحصول على رمز مميز للوصول
- كيفية استخدام الهويات المدارة لموارد Azure على جهاز Azure الظاهري لتسجيل الدخول
الخصائص: buildTimeoutInMinutes
المدة القصوى للانتظار أثناء إنشاء قالب الصورة (بما في ذلك جميع التخصيصات وعمليات التحقق من الصحة والتوزيعات).
إذا لم تحدد الخاصية أو تعين القيمة إلى 0، فسيتم استخدام القيمة الافتراضية، وهي 240 دقيقة أو أربع ساعات. الحد الأدنى للقيمة هو 6 دقائق، والحد الأقصى للقيمة هو 960 دقيقة أو 16 ساعة. عند الوصول إلى قيمة المهلة (سواء اكتمل بناء الصورة أم لا)، سترى خطأ مشابها لما يلي:
[ERROR] Failed while waiting for packerizer: Timeout waiting for microservice to
[ERROR] complete: 'context deadline exceeded'
بالنسبة لنظام التشغيل Windows، لا نوصي بتعيين buildTimeoutInMinutes
أقل من 60 دقيقة. إذا وجدت أن المهلة تنتهي، فراجع السجلات، لمعرفة ما إذا كانت خطوة التخصيص تنتظر شيئًا مثل إدخال المستخدم. إذا وجدت أنك بحاجة إلى مزيد من الوقت لإكمال التخصيصات، فقم بزيادة buildTimeoutInMinutes
القيمة. لكن، لا تقم بتعينه على وقت مرتفع للغاية لأنك قد تضطر إلى الانتظار حتى تنتهي مهلته قبل رؤية خطأ.
خصائص: تخصيص
يدعم "منشئ الصور" العديد من "التخصيصات"، وهي وظائف تستخدم لتخصيص صورتك، مثل تشغيل البرامج النصية أو إعادة تشغيل الخوادم.
عند استخدام customize
:
- يمكنك استخدام أدوات تخصيص متعددة.
- تقوم أدوات التخصيص بالتنفيذ بالترتيب المحدد في القالب.
- إذا فشلت إحدى أدوات التخصيص، فسيفشل مكون التخصيص بأكمله ويبلغ عن خطأ.
- اختبر البرامج النصية بدقة قبل استخدامها في قالب. تصحيح أخطاء البرامج النصية في حد ذاتها أسهل.
- لا تضع بيانات حساسة في البرامج النصية. يمكن عرض الأوامر المضمنة في تعريف قالب الصورة. إذا كانت لديك معلومات حساسة (بما في ذلك كلمات المرور ورمز SAS المميز ورموز المصادقة المميزة وما إلى ذلك)، فيجب نقلها إلى البرامج النصية في Azure Storage، حيث يتطلب الوصول المصادقة.
- يجب أن تكون مواقع البرامج النصية متاحة للجمهور، إلا إذا كنت تستخدم MSI.
إن القسمcustomize
عبارة عن صفيف. أنواع التخصيص المدعومة هي: File وPowerShell وShell وWindowsRestart وWindowsUpdate.
"customize": [
{
"type": "File",
"destination": "string",
"sha256Checksum": "string",
"sourceUri": "string"
},
{
"type": "PowerShell",
"inline": [ "string" ],
"runAsSystem": "bool",
"runElevated": "bool",
"scriptUri": "string",
"sha256Checksum": "string",
"validExitCodes": [ "int" ]
},
{
"type": "Shell",
"inline": [ "string" ],
"scriptUri": "string",
"sha256Checksum": "string"
},
{
"type": "WindowsRestart",
"restartCheckCommand": "string",
"restartCommand": "string",
"restartTimeout": "string"
},
{
"type": "WindowsUpdate",
"filters": [ "string" ],
"searchCriteria": "string",
"updateLimit": "int"
}
]
أداة التخصيص Shell
Shell
يدعم التخصيص تشغيل البرامج النصية shell على Linux. يجب أن تكون البرامج النصية shell متاحة للجمهور أو يجب أن تكون قد قمت بتكوين MSI لـ Image Builder للوصول إليها.
"customize": [
{
"type": "Shell",
"name": "<name>",
"scriptUri": "<link to script>",
"sha256Checksum": "<sha256 checksum>"
}
],
"customize": [
{
"type": "Shell",
"name": "<name>",
"inline": "<commands to run>"
}
]
قم بتخصيص الخصائص:
النوع – Shell.
الاسم - اسم لتتبع التخصيص.
scriptUri - عنوان URI لموقع الملف.
مضمنة - صفيف من أوامر shell، مفصول بينها بفواصل.
sha256Checksum - قيمة المجموع الاختباري sha256 للملف، تقوم بتوليد هذه القيمة محليًا، ثم يقوم Image Builder بالمجموع الاختباري والتحقق من صحتها.
لإنشاء المجموع الاختباري sha256Checksum، باستخدام محطة طرفية على Mac/Linux شغّل:
sha256sum <fileName>
إشعار
يتم تخزين الأوامر المضمنة كجزء من تعريف قالب الصورة، التي يمكنك رؤيتها عند تفريغ تعريف الصورة. إذا كانت لديك أوامر أو قيم حساسة (بما في ذلك كلمات المرور ورمز SAS المميز ورموز المصادقة وما إلى ذلك)، فمن المستحسن نقلها إلى البرامج النصية واستخدام هوية مستخدم للمصادقة على Azure Storage.
امتيازات المستخدم المتميز
بادئة الأوامر مع sudo
لتشغيلها بامتيازات المستخدم الفائقة. يمكنك إضافة الأوامر إلى البرامج النصية أو استخدامها في الأوامر المضمنة، على سبيل المثال:
"type": "Shell",
"name": "setupBuildPath",
"inline": [
"sudo mkdir /buildArtifacts",
"sudo cp /tmp/index.html /buildArtifacts/index.html"
]
مثال على برنامج نصي يستخدم sudo يمكنك الرجوع إليه باستخدام scriptUri:
#!/bin/bash -e
echo "Telemetry: creating files"
mkdir /myfiles
echo "Telemetry: running sudo 'as-is' in a script"
sudo touch /myfiles/somethingElevated.txt
أداة تخصيص إعادة التشغيل في Windows
تسمح لك WindowsRestart
أداة التخصيص بإعادة تشغيل جهاز Windows VM وانتظار عودة الجهاز الظاهري إلى الاتصال بالإنترنت، ويسمح لك هذا المُخصص بتثبيت برنامج يتطلب إعادة تشغيل الكمبيوتر.
"customize": [
{
"type": "WindowsRestart",
"restartCommand": "shutdown /r /f /t 0",
"restartCheckCommand": "echo Azure-Image-Builder-Restarted-the-VM > c:\\buildArtifacts\\azureImageBuilderRestart.txt",
"restartTimeout": "5m"
}
]
قم بتخصيص الخصائص:
- النوع: WindowsRestart.
-
restartCommand - أمر لتنفيذ إعادة التشغيل (اختياري). الافتراضي هو
'shutdown /r /f /t 0 /c \"packer restart\"'
. - restartCheckCommand - أمر للتحقق مما إذا كانت إعادة التشغيل قد نجحت (اختياري).
-
restartTimeout - مهلة إعادة التشغيل المحددة كسلسلة من المقدار والوحدة. على سبيل المثال،
5m
(5 دقائق) أو2h
(ساعتين). القيمة الافتراضية هي:5m
.
إشعار
لا توجد أداة تخصيص لإعادة تشغيل Linux.
أداة تخصيص PowerShell
يدعم PowerShell
المُخصص تشغيل برامج PowerShell النصية والأمر المضمن على Windows، ويجب أن تكون البرامج النصية متاحة للجمهور حتى يتمكن الوسيط المعرّف من الوصول إليها.
"customize": [
{
"type": "PowerShell",
"name": "<name>",
"scriptUri": "<path to script>",
"runElevated": <true false>,
"runAsSystem": <true false>,
"sha256Checksum": "<sha256 checksum>"
},
{
"type": "PowerShell",
"name": "<name>",
"inline": "<PowerShell syntax to run>",
"validExitCodes": [<exit code>],
"runElevated": <true or false>,
"runAsSystem": <true or false>
}
]
قم بتخصيص الخصائص:
النوع – PowerShell.
scriptUri - عنوان URI لموقع ملف برنامج PowerShell النصي.
مضمنة - أوامر مضمنة ليتم تشغيلها، مفصول بينها بفواصل.
validExitCodes - أكواد اختيارية صالحة يمكن إرجاعها من الأمر النصي / inline. تتجنب الخاصية فشل البرنامج النصي/الأمر المضمن الذي تم الإبلاغ عنه.
runElevated - دعم اختياري، ومنطقي لتشغيل الأوامر والبرامج النصية بأذونات تمت ترقيتها.
runAsSystem - اختياري، منطقي، يحدد ما إذا كان يجب تشغيل البرنامج النصي PowerShell كمستخدم النظام.
sha256Checksum - إنشاء المجموع الاختباري SHA256 للملف محليا، وتحديث قيمة المجموع الاختباري إلى أحرف صغيرة، وسيقوم Image Builder بالتحقق من صحة المجموع الاختباري في أثناء نشر قالب الصورة.
لإنشاء sha256Checksum، استخدم Get-FileHash cmdlet في PowerShell.
أداة تخصيص الملفات
تتيح File
أداة تخصيص الملفات لـ Image Builder تنزيل ملف من GitHub repo أو Azure storage. يدعم التخصيص كلاً من Linux وWindows. إذا كانت لديك بنية أساسية لإنشاء صورة تعتمد على إنشاء البيانات الاصطناعية، يمكنك تعيين أداة تخصيص الملفات للتنزيل من مشاركة الإنشاء، ونقل البيانات الاصطناعية إلى الصورة.
"customize": [
{
"type": "File",
"name": "<name>",
"sourceUri": "<source location>",
"destination": "<destination>",
"sha256Checksum": "<sha256 checksum>"
}
]
خصائص أداة تخصيص الملفات:
sourceUri - نقطة نهاية تخزين يمكن الوصول إليها، يمكن أن تكون نقطة النهاية هذه تخزين GitHub أو Azure. يمكنك تنزيل ملف واحد فقط، وليس دليلاً كاملاً. إذا كنت بحاجة إلى تنزيل دليل، فاستخدم ملفاً مضغوطاً، ثم قم بإلغاء ضغطه باستخدام أدوات تخصيص Shell أو PowerShell.
إشعار
إذا كان sourceUri هو حساب تخزين Azure، بغض النظر عما إذا تم وضع علامة عام على الكائن الثنائي كبير الحجم، فستحتاج إلى منح أذونات هوية المستخدم المدارة لقراءة الوصول على الكائن الثنائي كبير الحجم. يمكنك الاطلاع على هذا المثال لتعيين أذونات التخزين.
الوجهة - هذا هو مسار الوجهة الكامل واسم الملف. يجب أن يوجد أي مسار مرجعي وأدلة فرعية، استخدم أدوات تخصيص Shell أو PowerShell لإعداد هذه المسارات مسبقًا. يمكنك استخدام أدوات تخصيص البرنامج النصي لإنشاء المسار.
يتم دعم أداة التخصيص هذه بواسطة أدلة Windows ومسارات Linux، ولكن هناك بعض الاختلافات:
- Linux - المسار الوحيد الذي يمكن لمنشئ الصورة الكتابة إليه هو / tmp.
- Windows - لا يوجد تقييد على المسار، ولكن يجب أن يكون المسار موجوداً.
إذا كان هناك خطأ أثناء محاولة تنزيل الملف، أو وضعه في دليل محدد، ففشل تخصيص الخطوة، وسيكون هذا الخطأ في customization.log.
إشعار
أداة تخصيص الملفات مناسبة فقط لتنزيلات الملفات الصغيرة، < 20 ميجابايت. بالنسبة لتنزيلات الملفات الأكبر حجماً، استخدم برنامجاً نصياً أو أمراً مضمناً، ثم استخدم التعليمات البرمجية لتنزيل الملفات، مثل Linux wget
أو curl
، أو Windows، Invoke-WebRequest
. بالنسبة إلى الملفات الموجودة في تخزين Azure، تأكد من تعيين هوية بأذونات لعرض هذا الملف إلى الجهاز الظاهري للبناء باتباع الوثائق هنا: الهوية المعينة من قبل المستخدم ل Image Build VM. يجب أن يكون أي ملف غير مخزن في Azure متاحا للجمهور حتى يتمكن Azure Image Builder من تنزيله.
sha256Checksum - إنشاء المجموع الاختباري SHA256 للملف محليا، وتحديث قيمة المجموع الاختباري إلى أحرف صغيرة، وسيقوم Image Builder بالتحقق من صحة المجموع الاختباري في أثناء نشر قالب الصورة.
لإنشاء sha256Checksum، استخدم Get-FileHash cmdlet في PowerShell.
مُخصص تحديث Windows
تم WindowsUpdate
بناء أداة التخصيص على مجتمع Windows Update Provisioner لـ Packer، وهو مشروع مفتوح المصدر تتم صيانته بواسطة مجتمع Packer. تقوم Microsoft باختبار الموفر والتحقق من صحته باستخدام خدمة Image Builder، وستدعم التحقيق في المشكلات معها، وتعمل على حل المشكلات، ومع ذلك، فإن المشروع مفتوح المصدر غير مدعوم رسميًا من قبل Microsoft. للحصول على وثائق مفصلة والمساعدة حول مقدم خدمة Windows Update، يرجى الاطلاع على مستودع المشروع.
"customize": [
{
"type": "WindowsUpdate",
"searchCriteria": "IsInstalled=0",
"filters": [
"exclude:$_.Title -like '*Preview*'",
"include:$true"
],
"updateLimit": 20
}
]
خصائص أداة التخصيص:
- النوع – WindowsUpdate.
- searchCriteria - اختياري، يحدد نوع التحديثات التي يتم تثبيتها (مثل مستحسن أو هام)، ويعد BrowseOnly=0 وIsInstall=0 (مستحسن) هو الافتراضي.
- عوامل التصفية - اختياري، تسمح لك بتحديد عامل تصفية لتضمين التحديثات أو استبعادها.
- updateLimit - اختياري، يحدد عدد التحديثات التي يمكن تثبيتها، يبلغ الحد الافتراضي 1000.
إشعار
يمكن أن تفشل أداة تخصيص Windows Update إذا كانت هناك أي عمليات إعادة تشغيل Windows معلقة، أو عمليات تثبيت التطبيقات التي لا تزال قيد التشغيل، وعادة ما قد ترى هذا الخطأ في التخصيص.log، System.Runtime.InteropServices.COMException (0x80240016): Exception from HRESULT: 0x80240016
. ننصحك بشدة بالتفكير في إضافة Windows Restart و/ أو السماح للتطبيقات بوقت كاف لإكمال عمليات التثبيت الخاصة بها باستخدام أوامر السكون أو الانتظار في الأوامر المضمنة أو البرامج النصية قبل تشغيل Windows Update.
Generalize
بشكل افتراضي، ستقوم Azure Image Builder أيضاً بتشغيل التعليمة البرمجية deprovision
في نهاية كل مرحلة تخصيص صورة، لتعميم الصورة. التعميم هو عملية يتم فيها إعداد الصورة بحيث يمكن إعادة استخدامها لإنشاء أجهزة ظاهرية متعددة. بالنسبة لأجهزة Windows الظاهرية، تستخدم Azure Image Builder Sysprep. بالنسبة لنظام التشغيل Linux، تشغل Azure Image Builder waagent -deprovision
.
قد لا تكون الأوامر التي يجب على مستخدمي Image Builder تعميمها مناسبة لكل موقف، لذلك يسمح لك Azure Image Builder بتخصيص هذا الأمر، إذا لزم الأمر.
إذا كنت تقوم بترحيل التخصيص الموجود، وكنت تستخدم أوامر Sysprep/waagent مختلفة، فيمكنك استخدام الأوامر العامة لـ Image Builder، وإذا فشل إنشاء الجهاز الظاهري، فاستخدم أوامر Sysprep أو waagent الخاصة بك.
إذا قام Azure Image Builder بإنشاء صورة مخصصة ل Windows بنجاح، وقمت بإنشاء جهاز ظاهري منها، ثم وجدت أن إنشاء الجهاز الظاهري فشل أو لم يكتمل بنجاح، فأنت بحاجة إلى مراجعة وثائق Windows Server Sysprep أو رفع طلب دعم مع فريق دعم خدمات العملاء في Windows Server Sysprep، الذي يمكنه استكشاف أخطاء استخدام Sysprep الصحيح وتقديم المشورة بشأنه.
أمر Sysprep الافتراضي
Write-Output '>>> Waiting for GA Service (RdAgent) to start ...'
while ((Get-Service RdAgent).Status -ne 'Running') { Start-Sleep -s 5 }
Write-Output '>>> Waiting for GA Service (WindowsAzureTelemetryService) to start ...'
while ((Get-Service WindowsAzureTelemetryService) -and ((Get-Service WindowsAzureTelemetryService).Status -ne 'Running')) { Start-Sleep -s 5 }
Write-Output '>>> Waiting for GA Service (WindowsAzureGuestAgent) to start ...'
while ((Get-Service WindowsAzureGuestAgent).Status -ne 'Running') { Start-Sleep -s 5 }
if( Test-Path $Env:SystemRoot\system32\Sysprep\unattend.xml ) {
Write-Output '>>> Removing Sysprep\unattend.xml ...'
Remove-Item $Env:SystemRoot\system32\Sysprep\unattend.xml -Force
}
if (Test-Path $Env:SystemRoot\Panther\unattend.xml) {
Write-Output '>>> Removing Panther\unattend.xml ...'
Remove-Item $Env:SystemRoot\Panther\unattend.xml -Force
}
Write-Output '>>> Sysprepping VM ...'
& $Env:SystemRoot\System32\Sysprep\Sysprep.exe /oobe /generalize /quiet /quit
while($true) {
$imageState = (Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\State).ImageState
Write-Output $imageState
if ($imageState -eq 'IMAGE_STATE_GENERALIZE_RESEAL_TO_OOBE') { break }
Start-Sleep -s 5
}
Write-Output '>>> Sysprep complete ...'
أمر إلغاء توفير Linux الافتراضي
WAAGENT=/usr/sbin/waagent
waagent -version 1> /dev/null 2>&1
if [ $? -eq 0 ]; then
WAAGENT=waagent
fi
$WAAGENT -force -deprovision+user && export HISTSIZE=0 && sync
تجاوز الأوامر
لتجاوز الأوامر، استخدم موفري البرامج النصية PowerShell أو Shell لإنشاء ملفات الأوامر باسم الملف الدقيق، ووضعها في الأدلة الصحيحة:
- Windows: c:\DeprovisioningScript.ps1
- Linux: /tmp/DeprovisioningScript.sh
يقرأ "منشئ الصور" هذه الأوامر، وتتم كتابة هذه الأوامر في سجلات AIB، customization.log
. راجع استكشاف الأخطاء وإصلاحها حول كيفية جمع السجلات.
الخصائص: errorHandling
errorHandling
تسمح لك الخاصية بتكوين كيفية معالجة الأخطاء أثناء إنشاء الصورة.
errorHandling
تسمح لك الخاصية بتكوين كيفية معالجة الأخطاء أثناء إنشاء الصورة. يحتوي على خاصيتين:
- onCustomizerError - يحدد الإجراء الذي يجب اتخاذه عند حدوث خطأ أثناء مرحلة التخصيص لإنشاء الصورة.
- onValidationError - يحدد الإجراء الذي يجب اتخاذه عند حدوث خطأ أثناء التحقق من صحة قالب الصورة.
تحتوي errorHandling
الخاصية أيضا على قيمتين محتملتين لمعالجة الأخطاء أثناء إنشاء الصورة:
- التنظيف - يضمن تنظيف الموارد المؤقتة التي تم إنشاؤها بواسطة Packer حتى إذا واجه Packer أو أحد التخصيصات/عمليات التحقق من الصحة خطأ. يحافظ هذا على التوافق مع الإصدارات السابقة مع السلوك الحالي.
- abort - في حالة مواجهة Packer لخطأ، تتخطى خدمة Azure Image Builder (AIB) تنظيف الموارد المؤقتة. بصفتك مالك قالب AIB، فأنت مسؤول عن تنظيف هذه الموارد من اشتراكك. قد تحتوي هذه الموارد على معلومات مفيدة مثل السجلات والملفات المتبقية في جهاز ظاهري مؤقت، والتي يمكن أن تساعد في التحقيق في الخطأ الذي واجهه Packer.
خصائص: التوزيع
تدعم Azure Image Builder ثلاثة أهداف توزيع:
- ManagedImage - صورة مدارة.
- sharedImage - Azure Compute Gallery.
- VHD - VHD في حساب تخزين.
يمكنك توزيع صورة على النوعين كليهما من الأهداف في التكوين نفسه.
إشعار
لا يتضمن أمر AIB sysprep الافتراضي "/ mode: vm"، ولكن قد تكون هذه الخاصية مطلوبة عند إنشاء الصور التي سيتم تثبيت دور HyperV عليها. إذا كنت بحاجة إلى إضافة وسيطة الأمر هذه، يجب تجاوز الأمر sysprep.
ونظراً لأنه يمكن أن يكون لديك أكثر من هدف واحد للتوزيع عليه، تحتفظ Image Builder بحالة لكل هدف توزيع يمكن الوصول إليه عن طريق الاستعلام عن runOutputName
. الكائن runOutputName
هو كائن يمكنك استخدامه في الاستعلام عن التوزيع للحصول على معلومات حول ذلك التوزيع. على سبيل المثال، يمكنك الاستعلام عن موقع VHD، أو المناطق التي تم نسخ إصدار الصورة إليها، أو إنشاء إصدار SIG Image. هذه خاصية لكل هدف توزيع. يجب أن يكون runOutputName
فريد لكل هدف توزيع. فيما يلي مثال على ذلك، هذا هو الاستعلام عن توزيع Azure Compute Gallery:
subscriptionID=<subcriptionID>
imageResourceGroup=<resourceGroup of image template>
runOutputName=<runOutputName>
az resource show \
--ids "/subscriptions/$subscriptionID/resourcegroups/$imageResourceGroup/providers/Microsoft.VirtualMachineImages/imageTemplates/ImageTemplateLinuxRHEL77/runOutputs/$runOutputName" \
--api-version=2023-07-01
إخراج:
{
"id": "/subscriptions/xxxxxx/resourcegroups/rheltest/providers/Microsoft.VirtualMachineImages/imageTemplates/ImageTemplateLinuxRHEL77/runOutputs/rhel77",
"identity": null,
"kind": null,
"location": null,
"managedBy": null,
"name": "rhel77",
"plan": null,
"properties": {
"artifactId": "/subscriptions/xxxxxx/resourceGroups/aibDevOpsImg/providers/Microsoft.Compute/galleries/devOpsSIG/images/rhel/versions/0.24105.52755",
"provisioningState": "Succeeded"
},
"resourceGroup": "rheltest",
"sku": null,
"tags": null,
"type": "Microsoft.VirtualMachineImages/imageTemplates/runOutputs"
}
توزيع: managedImage
إخراج الصورة هو مورد صورة مدار.
{
"type":"ManagedImage",
"imageId": "<resource ID>",
"location": "<region>",
"runOutputName": "<name>",
"artifactTags": {
"<name>": "<value>",
"<name>": "<value>"
}
}
توزيع الخصائص:
- type – ManagedImage
- imageId – معرف المورد للصورة الوجهة، التنسيق المتوقع: /subscriptions/<subscriptionId>/resourceGroups/<destinationResourceGroupName>/providers/Microsoft.Compute/images/<imageName>
- الموقع - موقع الصورة المدارة.
- runOutputName – اسم فريد لتحديد التوزيع.
- artifactTags - علامات مفتاح/قيمة اختيارية محددة من قِبَل المستخدم.
إشعار
يجب أن تتاح مجموعة الموارد الوجهة. إذا كنت تريد توزيع الصورة على منطقة مختلفة، فستزيد من وقت النشر.
توزيع: sharedImage
Azure Compute Gallery هي خدمة جديدة لإدارة الصور تسمح بإدارة النسخ المتماثل لمنطقة الصورة وتعيين الإصدار ومشاركة الصور المخصصة. تدعم Azure Image Builder التوزيع باستخدام هذه الخدمة، بحيث يمكنك توزيع الصور على المناطق التي تدعمها Azure Compute Galleries.
يتكون Azure Compute Gallery من:
- المعرض - حاوية لصور متعددة. يتم نشر المعرض في منطقة واحدة.
- تعريفات الصور - تجميع مفاهيمي للصور.
- إصدارات الصور - نوع صورة يستخدم لنشر VM أو مجموعة مقياس. يمكن نسخ إصدارات الصور إلى مناطق أخرى حيث يلزم نشر الأجهزة الظاهرية.
قبل أن تتمكن من التوزيع على المعرض، يجب عليك إنشاء تعريف للصورة ومعرض، راجع إنشاء معرض.
إشعار
يجب أن يكون معرف إصدار الصورة مميزا أو مختلفا عن أي إصدارات صور موجودة في معرض حوسبة Azure الموجود.
{
"type": "SharedImage",
"galleryImageId": "<resource ID>",
"runOutputName": "<name>",
"artifactTags": {
"<name>": "<value>",
"<name>": "<value>"
}
}
JSON التالي هو مثال على كيفية استخدام replicationRegions
الحقل لتوزيعه على معرض حوسبة Azure.
إشعار
replicationRegions
مهمل لتوزيعات المعرض كما targetRegions
يتم تحديث الخاصية. لمزيد من المعلومات، راجع targetRegions.
توزيع: الأهداف
JSON التالي هو مثال على كيفية استخدام حقل targetRegions للتوزيع على معرض حوسبة Azure.
"distribute": [
{
"type": "SharedImage",
"galleryImageId": "<resource ID>",
"runOutputName": "<name>",
"artifactTags": {
"<name>": "<value>",
"<name>": "<value>"
},
"targetRegions": [
{
"name": "eastus",
"replicaCount": 2,
"storageAccountType": "Standard_ZRS"
},
{
"name": "eastus2",
"replicaCount": 3,
"storageAccountType": "Premium_LRS"
}
]
},
]
توزيع خصائص المعارض:
النوع - sharedImage
galleryImageId – معرف معرض حساب Azure، يمكن تحديد هذه الخاصية بتنسيقين:
- تعيين الإصدار التلقائي - ينشئ "منشئ الصور" رقم إصدار رتيبا لك، وهذه الخاصية مفيدة عندما تريد الاحتفاظ بإعادة إنشاء الصور من نفس القالب: التنسيق هو:
/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/galleries/<sharedImageGalleryName>/images/<imageGalleryName>
. - تعيين الإصدار الصريح - يمكنك تمرير رقم الإصدار الذي تريد أن يستخدمه منشئ الصور. التنسيق هو:
/subscriptions/<subscriptionID>/resourceGroups/<rgName>/providers/Microsoft.Compute/galleries/<sharedImageGalName>/images/<imageDefName>/versions/<version - for example: 1.1.1>
- تعيين الإصدار التلقائي - ينشئ "منشئ الصور" رقم إصدار رتيبا لك، وهذه الخاصية مفيدة عندما تريد الاحتفاظ بإعادة إنشاء الصور من نفس القالب: التنسيق هو:
runOutputName – اسم فريد لتحديد التوزيع.
artifactTags - علامات مفتاح/قيمة اختيارية محددة من قِبَل المستخدم.
replicationRegions - صفيف من المناطق للنسخ المتماثل. يجب أن تكون إحدى المناطق هي المنطقة التي يتم فيها نشر المعرض. إضافة مناطق تعني زيادة وقت الإنشاء، حيث لا يكتمل البناء حتى يكتمل النسخ المتماثل. تم إهمال هذا الحقل اعتبارا من إصدار API 2022-07-01، يرجى استخدامه
targetRegions
عند توزيع نوع "SharedImage".targetRegions - صفيف من المناطق للنسخ المتماثل. تم تقديمه حديثا كجزء من واجهة برمجة التطبيقات 2022-07-01 وينطبق فقط على
SharedImage
النوع الذي يتم توزيعه.excludeFromLatest (اختياري) - يسمح لك بوضع علامة على إصدار الصورة الذي تقوم بإنشائه بحيث لا يتم استخدامه كأحدث إصدار في تعريف المعرض، والقيمة الافتراضية هي "خطأ".
storageAccountType (اختياري) يدعم AIB تحديد هذه الأنواع من التخزين لإصدار الصورة الذي سيتم إنشاؤه:
- "Standard_LRS"
- "Standard_ZRS"،
إشعار
إذا لم يكن قالب الصورة وimage definition
المشار إليه في الموقع نفسه، فسترى وقتًا إضافيًا لإنشاء الصور. لا تحتوي Image Builder حالياً على معلمة location
لمورد إصدار الصورة، بل نأخذها من أصلها image definition
. على سبيل المثال، إذا كان تعريف الصورة موجودًا وwestus
تريد نسخ نسخة الصورة إليهeastus
، يتم نسخ blob إليه، وwestus
يتم إنشاء مورد إصدار صورة فيهwestus
، ثم النسخ المتماثل إليهeastus
. لتجنب وقت النسخ المتماثل الإضافي، تأكد من وجود image definition
وقالب الصورة في الموقع نفسه.
تعيين الإصدار
خاصية تعيين الإصدار هي sharedImage
لنوع التوزيع فقط. إنه تعداد بقيمتين محتملتين:
- الأحدث - مخطط جديد متزايد بدقة لكل تصميم
- source - مخطط يستند إلى رقم إصدار الصورة المصدر.
مخطط ترقيم الإصدار الافتراضي هو latest
. يحتوي المخطط الأخير على خاصية إضافية، "رئيسية" تحدد الإصدار الرئيسي الذي سيتم بموجبه إنشاء أحدث إصدار.
إشعار
يتم إهمال منطق إنشاء الإصدار الحالي للتوزيع sharedImage
. يتم توفير خيارين جديدين: زيادة الإصدارات التي تكون دائما أحدث إصدار في المعرض بشكل رتيب، والإصدارات التي تم إنشاؤها استنادا إلى رقم إصدار الصورة المصدر. يسمح التعداد الذي يحدد مخطط إنشاء الإصدار بالتوسع في المستقبل مع مخططات إنشاء إصدار إضافية.
"distribute": [
"versioning": {
"scheme": "Latest",
"major": 1
}
]
خصائص تعيين الإصدار:
-
نظام - إنشاء رقم إصدار جديد للتوزيع.
Latest
أوSource
قيمتان محتملتان. -
رئيسي - يحدد الإصدار الرئيسي الذي يتم بموجبه إنشاء أحدث إصدار. ينطبق فقط عند
scheme
تعيين إلىLatest
. على سبيل المثال، في معرض مع الإصدارات التالية المنشورة: 0.1.1، 0.1.2، 1.0.0، 1.0.1، 1.1.0، 1.1.1، 1.2.0، 2.0.0، 2.0.1، 2.1.0- مع تعيين رئيسي أو تعيين رئيسي إلى 2،
Latest
ينشئ النظام الإصدار 2.1.1 - مع تعيين رئيسي إلى 1، ينشئ أحدث نظام الإصدار 1.2.1
- مع تعيين رئيسي إلى 0، ينشئ أحدث نظام الإصدار 0.1.3
- مع تعيين رئيسي أو تعيين رئيسي إلى 2،
توزيع: VHD
يمكنك الإخراج إلى VHD. يمكنك بعد ذلك نسخ VHD، واستخدامه للنشر إلى Azure MarketPlace، أو استخدامه مع Azure Stack.
{
"type": "VHD",
"runOutputName": "<VHD name>",
"artifactTags": {
"<name>": "<value>",
"<name>": "<value>"
}
}
دعم نظام التشغيل: Windows وLinux
توزيع معلمات VHD:
- النوع - VHD.
- runOutputName – اسم فريد لتحديد التوزيع.
- العلامات - علامات زوج قيمة المفاتيح الاختيارية المحددة من قِبَل المستخدم.
لا تسمح Azure Image Builder للمستخدم بتحديد موقع حساب تخزين، ولكن يمكنك الاستعلام عن حالة runOutputs
للحصول على الموقع.
az resource show \
--ids "/subscriptions/$subscriptionId/resourcegroups/<imageResourceGroup>/providers/Microsoft.VirtualMachineImages/imageTemplates/<imageTemplateName>/runOutputs/<runOutputName>" | grep artifactUri
إشعار
بمجرد إنشاء VHD، انسخه إلى موقع مختلف، في أقرب وقت ممكن. يتم تخزين VHD في حساب تخزين في مجموعة الموارد المؤقتة التي تم إنشاؤها عند إرسال قالب الصورة إلى خدمة Azure Image Builder. إذا قمت بحذف قالب الصورة، فستفقد VHD.
يوزع JSON التالي الصورة ك VHD إلى حساب تخزين مخصص.
"distribute": [
{
"type": "VHD",
"runOutputName": "<VHD name>",
"artifactTags": {
"<name>": "<value>",
"<name>": "<value>"
},
"uri": "<replace with Azure storage URI>"
}
]
توزيع خصائص VHD:
uri - Azure Storage URI اختياري للكائن الثنائي كبير الحجم الموزع ل VHD. حذف استخدام الافتراضي (سلسلة فارغة) في هذه الحالة سيتم نشر VHD إلى حساب التخزين في مجموعة الموارد المرحلية.
الخصائص: تحسين
optimize
يمكن تمكين الخاصية أثناء إنشاء صورة جهاز ظاهري وتسمح بتحسين الجهاز الظاهري لتحسين وقت إنشاء الصورة.
- vmBoot: تكوين متعلق بعملية تمهيد الجهاز الظاهري (VM)، يستخدم للتحكم في التحسينات التي يمكن أن تحسن وقت التمهيد أو جوانب الأداء الأخرى.
- الحالة: حالة ميزة تحسين التمهيد داخل
vmBoot
، مع القيمةEnabled
التي تشير إلى أن الميزة قيد التشغيل لتحسين وقت إنشاء الصور.
لمعرفة المزيد، راجع تحسين الجهاز الظاهري لصور المعرض باستخدام Azure VM Image Builder.
الخصائص: المصدر
يحتوي القسم source
على معلومات حول الصورة المصدر التي سيستخدمها Image Builder. يدعم Azure Image Builder الصور المعممة فقط كصور مصدر، ولا يتم دعم الصور المتخصصة في الوقت الحالي.
تتطلب واجهة برمجة التطبيقات SourceType
الذي يحدد مصدر إنشاء الصورة، وهناك حالياً ثلاثة أنواع:
- PlatformImage - وهو يشير إلى أن الصورة المصدر هي صورة Marketplace.
- ManagedImage - تُستخدم عند البدء من صورة مُدارة عادية.
- SharedImageVersion - يُستخدم عند استخدام إصدار صورة في Azure Compute Gallery كمصدر.
إشعار
عند استخدام صور Windows المخصصة الموجودة، يمكنك تشغيل الأمر Sysprep حتى ثلاث مرات على صورة واحدة من Windows 7 أو Windows Server 2008 R2، أو 1001 مرة على صورة Windows واحدة للإصدارات الأحدث؛ لمزيد من المعلومات، راجع وثائق sysprep.
مصدر PlatformImage
يدعم Azure Image Builder خادم Windows وعميله، وصور Linux Azure Marketplace، راجع التعرف على Azure Image Builder للحصول على القائمة الكاملة.
"source": {
"type": "PlatformImage",
"publisher": "Canonical",
"offer": "UbuntuServer",
"sku": "18.04-LTS",
"version": "latest"
}
تعد الخصائص هنا هي الخصائص نفسها المستخدمة لإنشاء أجهزة VM، باستخدام AZ CLI قم بتشغيل ما يلي للحصول على الخصائص:
az vm image list -l westus -f UbuntuServer -p Canonical --output table --all
يمكنك استخدام latest
في الإصدار، حيث يتم تقييم الإصدار عند إنشاء الصورة، وليس عند إرسال القالب. إذا كنت تستخدم هذه الوظيفة مع وجهة Azure Compute Gallery، يمكنك تجنب إعادة إرسال القالب، وإعادة تشغيل بنية الصورة على فترات، بحيث تتم إعادة إنشاء صورك من أحدث الصور.
دعم معلومات خطة السوق
يمكنك أيضاً تحديد معلومات الخطة، على سبيل المثال:
"source": {
"type": "PlatformImage",
"publisher": "RedHat",
"offer": "rhel-byos",
"sku": "rhel-lvm75",
"version": "latest",
"planInfo": {
"planName": "rhel-lvm75",
"planProduct": "rhel-byos",
"planPublisher": "redhat"
}
}
مصدر الصورة المدارة
يضبط الصورة المصدر كصورة مدارة موجودة لـ VHD أو VM معمم.
إشعار
يجب أن تكون الصورة المدارة المصدر من نظام تشغيل مدعوم ويجب أن تكون الصورة موجودة في الاشتراك والمنطقة نفسها الموجود فيها قالب Azure Image Builder.
"source": {
"type": "ManagedImage",
"imageId": "/subscriptions/<subscriptionId>/resourceGroups/{destinationResourceGroupName}/providers/Microsoft.Compute/images/<imageName>"
}
يجب أن يكون imageId
ResourceId للصورة المدارة. استخدم az image list
لسرد الصور المتاحة.
مصدر SharedImageVersion
تعيين الصورة المصدر كإصدار صورة موجود في Azure Compute Gallery.
إشعار
يتعين أن يكون إصدار الصورة المشتركة المصدر من نظام تشغيل مدعوم ويتعين أن يكون إصدار الصورة موجودًا في المنطقة نفسها الموجود فيها قالب منشئ الصورة في Azure، وإذا لم يكن الأمر كذلك، فانسخ إصدار الصورة إلى منطقة قالب منشئ الصورة.
"source": {
"type": "SharedImageVersion",
"imageVersionId": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microsoft.Compute/galleries/<sharedImageGalleryName>/images/<imageDefinitionName/versions/<imageVersion>"
}
- imageVersionId - معرف مورد قالب ARM لإصدار الصورة. عندما يكون اسم إصدار الصورة "الأحدث"، يتم تقييم الإصدار عند إجراء إنشاء الصورة.
imageVersionId
يجب أن يكون منResourceId
إصدار الصورة. استخدم قائمة az sig image-version لسرد إصدارات الصورة.
يعين JSON التالي الصورة المصدر كصورة مخزنة في معرض مشترك مباشر.
إشعار
المعرض المشترك المباشر متوفر حاليا في المعاينة.
source: {
"type": "SharedImageVersion",
"imageVersionId": "<replace with resourceId of the image stored in the Direct Shared Gallery>"
},
يعين JSON التالي الصورة المصدر كأحدث إصدار صورة لصورة مخزنة في معرض حوسبة Azure.
"properties": {
"source": {
"type": "SharedImageVersion",
"imageVersionId": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/galleries/<azureComputeGalleryName>/images/<imageDefinitionName>/versions/latest"
}
},
خصائص SharedImageVersion:
imageVersionId - معرف مورد قالب ARM لإصدار الصورة. عندما يكون اسم إصدار الصورة "الأحدث"، يتم تقييم الإصدار عند إجراء إنشاء الصورة.
الخصائص: stagingResourceGroup
stagingResourceGroup
تحتوي الخاصية على معلومات حول مجموعة الموارد المرحلية التي تنشئها خدمة Image Builder لاستخدامها أثناء عملية إنشاء الصورة. هذه stagingResourceGroup
خاصية اختيارية لأي شخص يريد مزيدًا من التحكم في مجموعة الموارد التي تم إنشاؤها بواسطة Image Builder أثناء عملية بناء الصورة. يمكنك إنشاء مجموعة موارد خاصة بك وتحديدها في القسم stagingResourceGroup
أو إنشاء منشئ الصور نيابة عنك.
هام
لا يمكن إقران مجموعة الموارد المرحلية المحددة بقالب صورة آخر، ويجب أن تكون فارغة (لا توجد موارد داخلها)، وفي نفس المنطقة مثل قالب الصورة، وأن يكون RBAC "مساهم" أو "مالك" مطبقا على الهوية المعينة لمورد قالب صورة Azure Image Builder. يتحقق "منشئ الصور" من العلامات الموجودة على مجموعة موارد التقسيم المرحلي باستخدام المفاتيح imageTemplateResourceGroupName
وتحديد imageTemplateName
ما إذا كان أي قالب صورة يستخدم مجموعة موارد التقسيم المرحلي. إذا كانت هذه العلامات موجودة قبل إرسال قالب الصورة أو أنها لا تتطابق مع قالب الصورة قيد التشغيل أثناء إنشاء الصورة، فستفشل العملية.
"properties": {
"stagingResourceGroup": "/subscriptions/<subscriptionID>/resourceGroups/<stagingResourceGroupName>"
}
سيناريوهات إنشاء القالب
تم ترك الخاصية stagingResourceGroup فارغة
stagingResourceGroup
إذا لم يتم تحديد الخاصية أو تحديدها بسلسلة فارغة، تنشئ خدمة Image Builder مجموعة موارد مرحلية مع اصطلاح الاسم الافتراضي "IT_***". تحتوي مجموعة الموارد المرحلية على العلامات الافتراضية المطبقة عليها:createdBy
، ،imageTemplateName
.imageTemplateResourceGroupName
أيضا، يتم تطبيق RBAC الافتراضي على الهوية المعينة لمورد قالب Azure Image Builder، وهو "المساهم".يتم تحديد الخاصية stagingResourceGroup مع مجموعة موارد موجودة
stagingResourceGroup
إذا تم تحديد الخاصية مع مجموعة موارد موجودة بالفعل، فإن خدمة Image Builder تتحقق للتأكد من أن مجموعة الموارد غير مقترنة بقالب صورة آخر، وهي فارغة (لا توجد موارد داخلها)، في نفس المنطقة مثل قالب الصورة، ولها إما "مساهم" أو "مالك" RBAC مطبق على الهوية المعينة لمورد قالب صورة Azure Image Builder. إذا لم يتم استيفاء أي من المتطلبات المذكورة أعلاه، يتم طرح خطأ. تحتوي مجموعة الموارد المرحلية على العلامات التالية المضافة إليها:usedBy
، ،imageTemplateName
.imageTemplateResourceGroupName
لا يتم حذف العلامات الموجودة مسبقًا.
هام
ستحتاج إلى تعيين دور المساهم إلى مجموعة الموارد لكيان الخدمة المقابل لتطبيق الطرف الأول من Azure Image Builder عند محاولة تحديد مجموعة موارد موجودة مسبقا وVNet لخدمة Azure Image Builder مع صورة مصدر Windows. للحصول على أمر CLI وإرشادات المدخل حول كيفية تعيين دور المساهم إلى مجموعة الموارد، راجع الوثائق التالية استكشاف أخطاء VM Azure Image Builder وإصلاحها: خطأ التخويل في إنشاء القرص
تم تحديد الخاصية stagingResourceGroup مع مجموعة موارد غير موجودة
إذا تم تحديد الخاصية
stagingResourceGroup
مع مجموعة موارد غير موجودة، فإن خدمة Image Builder تنشئ مجموعة موارد مرحلية بالاسم المتوفر في الخاصيةstagingResourceGroup
. سيكون هناك خطأ إذا كان الاسم المحدد لا يفي بمتطلبات تسمية Azure لمجموعات الموارد. تحتوي مجموعة الموارد المرحلية على العلامات الافتراضية المطبقة عليها:createdBy
، ،imageTemplateName
.imageTemplateResourceGroupName
بشكل افتراضي، الهوية المعينة لمورد قالب صورة Azure Image Builder لها RBAC "المساهم" المطبق عليها في مجموعة الموارد.
حذف القالب
سيتم حذف أي مجموعة موارد تقسيم مرحلي تم إنشاؤها بواسطة خدمة "منشئ الصور" بعد حذف قالب الصورة. يتضمن الحذف عملية تقسيم مرحلي لمجموعات الموارد التي تم تحديدها في stagingResourceGroup
الخاصية، ولكنها لم تكن موجودة قبل إنشاء الصورة.
إذا لم يقم Image Builder بإنشاء عملية تقسيم مرحلي لمجموعة الموارد، ولكن الموارد الموجودة داخل مجموعة الموارد، فسيتم حذف هذه الموارد بعد حذف قالب الصورة، نظرًا لأن خدمة Image Builder لديها الأذونات المناسبة أو الدور المطلوب لحذف الموارد.
الخصائص: التحقق من الصحة
يمكنك استخدام الخاصية validate
للتحقق من صحة صور النظام الأساسي وأي صور مخصصة تقوم بإنشائها بغض النظر عما إذا كنت تستخدم منشئ الصور في Azure لإنشائها.
يدعم منشئ الصور في Azure وضع "التحقق من صحة المصدر فقط" الذي يمكن تعيينه باستخدام sourceValidationOnly
الخاصية. إذا تم تعيين sourceValidationOnly
الخاصية إلى صواب، فسيتم التحقق من صحة الصورة المحددة في القسم source
مباشرة. لن يتم تشغيل أي بنية منفصلة لإنشاء صورة مخصصة ثم التحقق من صحتها.
يأخذ inVMValidations
الخاصية قائمة بالمدققات التي سيتم تنفيذها على الصورة. يدعم Azure Image Builder مدققي الملفات وPowerShell وShell.
الخاصية continueDistributeOnFailure
مسؤولة عما إذا كان سيتم توزيع صورة (صور) الإخراج في حالة فشل التحقق من الصحة. بشكل افتراضي، إذا فشل التحقق من الصحة وتم تعيين هذه الخاصية على خطأ، فلن يتم توزيع صورة (صور) الإخراج. إذا فشل التحقق من الصحة وتم تعيين هذه الخاصية على "صواب"، فسيستمر توزيع صورة (صور) الإخراج. استخدم هذا الخيار بحذر لأنه قد يؤدي إلى توزيع الصور الفاشلة للاستخدام. في كلتا الحالتين (صواب أو خطأ)، سيتم الإبلاغ عن تشغيل الصورة من النهاية إلى النهاية على أنها فاشلة في حالة فشل التحقق من الصحة. هذه الخاصية ليس لها أي تأثير على نجاح التحقق أم لا.
عند استخدام validate
:
- يمكنك استخدام مدققين متعددين.
- يقوم المدققون بالتنفيذ بالترتيب المحدد في القالب.
- إذا فشل أحد المدققين، فسيفشل مكون التحقق من الصحة بأكمله ويبلغ عن خطأ.
- يُنصح باختبار البرنامج النصي جيدًا قبل استخدامه في قالب. سيكون تصحيح أخطاء البرنامج النصي على الجهاز الظاهري الخاص بك أسهل.
- لا تضع بيانات حساسة في البرامج النصية.
- يجب أن تكون مواقع البرامج النصية متاحة للجمهور، إلا إذا كنت تستخدم MSI.
كيفية استخدام validate
الخاصية للتحقق من صحة صور Windows:
{
"properties":{
"validate":{
"continueDistributeOnFailure":false,
"sourceValidationOnly":false,
"inVMValidations":[
{
"type":"File",
"destination":"string",
"sha256Checksum":"string",
"sourceUri":"string"
},
{
"type":"PowerShell",
"name":"test PowerShell validator inline",
"inline":[
"<command to run inline>"
],
"validExitCodes":"<exit code>",
"runElevated":"<true or false>",
"runAsSystem":"<true or false>"
},
{
"type":"PowerShell",
"name":"<name>",
"scriptUri":"<path to script>",
"runElevated":"<true false>",
"sha256Checksum":"<sha256 checksum>"
}
]
}
}
}
خصائص inVMValidations
:
النوع – PowerShell.
name - اسم المدقق
scriptUri - معرف URI لملف برنامج PowerShell النصي.
inline - صفيف الأوامر المراد تشغيلها، مفصولة بفواصل.
validExitCodes – رموز اختيارية صالحة يمكن إرجاعها من الأمر النصي/المضمن، وهذا يتجنب الفشل المبلغ عنه للبرنامج النصي/الأمر المضمن.
runElevated - دعم اختياري، ومنطقي لتشغيل الأوامر والبرامج النصية بأذونات تمت ترقيتها.
sha256Checksum - قيمة المجموع الاختباري sha256 للملف، يمكنك إنشاء هذا محلياً، ومن ثم ستتكفل Image Builder بالمجموع الاختباري والتحقق من صحته.
لإنشاء المجموع الاختباري sha256Checksum باستخدام PowerShell على Windows Get-Hash
كيفية استخدام validate
الخاصية للتحقق من صور Linux:
{
"properties": {
"validate": {
"continueDistributeOnFailure": false,
"sourceValidationOnly": false,
"inVMValidations": [
{
"type": "Shell",
"name": "<name>",
"inline": [
"<command to run inline>"
]
},
{
"type": "Shell",
"name": "<name>",
"scriptUri": "<path to script>",
"sha256Checksum": "<sha256 checksum>"
},
{
"type": "File",
"destination": "string",
"sha256Checksum": "string",
"sourceUri": "string"
}
]
}
}
}
خصائص inVMValidations
:
type – Shell أو File المحدد كنوع التحقق من الصحة الذي سيتم تنفيذه.
name - اسم المدقق
scriptUri - معرف URI لملف البرنامج النصي
inline - صفيف الأوامر المراد تشغيلها، مفصولة بفواصل.
sha256Checksum - قيمة المجموع الاختباري sha256 للملف، يمكنك إنشاء هذا محلياً، ومن ثم ستتكفل Image Builder بالمجموع الاختباري والتحقق من صحته.
لإنشاء المجموع الاختباري sha256Checksum، باستخدام محطة طرفية على Mac/Linux شغّل:
sha256sum <fileName>
الوجهة - وجهة الملف.
sha256Checksum - يحدد المجموع الاختباري SHA256 للملف.
sourceUri - مصدر URI للملف.
الخصائص: vmProfile
vmSize (اختياري)
يستخدم Image Builder حجم SKU افتراضيًا Standard_D1_v2
لصور Gen1 وStandard_D2ds_v4
صور Gen2. يتم تعريف الإنشاء عن طريق الصورة التي تحددها في source
. يمكنك تجاوز vmSize لهذه الأسباب:
- إجراء التخصيصات التي تتطلب زيادة الذاكرة ووحدة المعالجة المركزية ومعالجة الملفات الكبيرة (GBs).
- عند تشغيل إنشاءات Windows، يجب عليك استخدام "Standard_D2_v2" أو جهاز ظاهري يعادلها في الحجم.
- اطلب عزل الجهاز الظاهري.
- خصص صورة تتطلب أجهزة محددة. على سبيل المثال، بالنسبة إلى جهاز ظاهري لوحدة معالجة الرسومات، تحتاج إلى حجم GPU VM.
- تتطلب التشفير من طرف إلى طرف في بقية الجهاز الظاهري للبناء، تحتاج إلى تحديد حجم الجهاز الظاهري لبناء الدعم الذي لا يستخدم الأقراص المؤقتة المحلية.
osDiskSizeGB
بشكل افتراضي، لا يغير Image Builder حجم الصورة، بل يستخدم الحجم من الصورة المصدر. يمكنك اختياريًا فقط زيادة حجم قرص نظام التشغيل (Win و Linux)، وتعني القيمة 0 ترك نفس حجم الصورة المصدر. لا يمكنك تقليل حجم قرص نظام التشغيل إلى أصغر من حجم الصورة المصدر.
vnetConfig (اختياري)
إذا لم تحدد أي خصائص VNet، يقوم Image Builder بإنشاء VNet الخاصة به وIP العام ومجموعة أمان الشبكة (NSG). يُستخدم عنوان IP العام للخدمة للتواصل مع الجهاز الظاهري للبناء. إذا كنت لا ترغب في الحصول على عنوان IP عام أو إذا كنت تريد أن يتمكن Image Builder من الوصول إلى موارد VNet الحالية، مثل خوادم التكوين (DSC، Chef، Puppet، Ansible)، مشاركة الملفات، فيمكنك تحديد VNet. لمزيد من المعلومات، راجع وثائق الشبكات.
"vnetConfig": {
"subnetId": "/subscriptions/<subscriptionID>/resourceGroups/<vnetRgName>/providers/Microsoft.Network/virtualNetworks/<vnetName>/subnets/<subnetName1>",
"containerInstanceSubnetId": "/subscriptions/<subscriptionID>/resourceGroups/<vnetRgName>/providers/Microsoft.Network/virtualNetworks/<vnetName>/subnets/<subnetName2>",
"proxyVmSize": "<vmSize>"
}
معرف الشبكة الفرعية
معرف المورد لشبكة فرعية موجودة مسبقا يتم نشر الجهاز الظاهري للبناء والتحقق من الصحة عليه.
containerInstanceSubnetId (اختياري)
معرف المورد لشبكة فرعية موجودة مسبقا يتم نشر مثيل حاوية Azure (ACI) عليها للإصدارات المعزولة. إذا لم يتم تحديد هذا الحقل، نشر شبكة ظاهرية مؤقتة، جنبا إلى جنب مع الشبكات الفرعية ومجموعات أمان الشبكة، في مجموعة موارد التقسيم المرحلي بالإضافة إلى موارد الشبكات الأخرى (نقطة النهاية الخاصة وخدمة الارتباط الخاص وموازن تحميل Azure والوكيل الظاهري) لتمكين الاتصال بين ACI والجهاز الظاهري للبناء.
[تتوفر هذه الخاصية فقط في إصدارات واجهة برمجة التطبيقات أو الإصدارات 2024-02-01
الأحدث على الرغم من أنه يمكن تحديث القوالب الموجودة التي تم إنشاؤها باستخدام إصدارات واجهة برمجة التطبيقات السابقة لتحديد هذه الخاصية.]
يمكن تحديد هذا الحقل فقط إذا subnetId
تم تحديده أيضا ويجب أن يفي بالمتطلبات التالية:
- يجب أن تكون هذه الشبكة الفرعية على نفس الشبكة الظاهرية مثل الشبكة الفرعية المحددة في
subnetId
. - يجب ألا تكون هذه الشبكة الفرعية هي نفس الشبكة الفرعية المحددة في
subnetId
. - يجب تفويض هذه الشبكة الفرعية إلى خدمة ACI بحيث يمكن استخدامها لتوزيع موارد ACI. يمكنك قراءة المزيد حول تفويض الشبكة الفرعية لخدمات Azure هنا. تتوفر معلومات تفويض الشبكة الفرعية الخاصة ب ACI هنا.
- يجب أن تسمح هذه الشبكة الفرعية بالوصول الصادر إلى الإنترنت وإلى الشبكة الفرعية المحددة في
subnetId
. هذه الوصولات مطلوبة بحيث يمكن توفير ACI ويمكنه الاتصال بالجهاز الظاهري للبناء لإجراء التخصيصات/عمليات التحقق من الصحة. على الطرف الآخر، يجب أن تسمح الشبكة الفرعية المحددة فيsubnetId
بالوصول الوارد من هذه الشبكة الفرعية. بشكل عام، تسمح قواعد الأمان الافتراضية لمجموعات أمان شبكة Azure (NSGs) بهذه الوصولات. ومع ذلك، إذا أضفت المزيد من قواعد الأمان إلى مجموعات أمان الشبكة الخاصة بك، فيجب السماح بالوصولات التالية:- الوصول الصادر من الشبكة الفرعية المحددة في
containerInstanceSubnetId
إلى:- إلى الإنترنت على المنفذ 443 (لتوفير صورة الحاوية).
- إلى الإنترنت على المنفذ 445 (لتحميل مشاركة الملفات من Azure Storage).
- إلى الشبكة الفرعية المحددة في
subnetId
على المنفذ 22 (ل ssh/Linux) والمنفذ 5986 (ل WinRM/Windows) (للاتصال بالجهاز الظاهري للإنشاء).
- الوصول الوارد إلى الشبكة الفرعية المحددة في
subnetId
:- إلى المنفذ 22 (ل ssh/Linux) والمنفذ 5986 (ل WinRM/Windows) من الشبكة الفرعية المحددة في
containerInstanceSubnetId
(ل ACI للاتصال بالجهاز الظاهري للبناء).
- إلى المنفذ 22 (ل ssh/Linux) والمنفذ 5986 (ل WinRM/Windows) من الشبكة الفرعية المحددة في
- الوصول الصادر من الشبكة الفرعية المحددة في
- يجب أن يكون لهوية القالب إذن لتنفيذ إجراء "Microsoft.Network/virtualNetworks/subnets/join/action" على نطاق هذه الشبكة الفرعية. يمكنك قراءة المزيد حول أذونات Azure للشبكات هنا.
proxyVmSize (اختياري)
حجم الجهاز الظاهري الوكيل المستخدم لتمرير نسبة استخدام الشبكة إلى الجهاز الظاهري للبناء والتحقق من الصحة. يجب عدم تحديد هذا الحقل إذا containerInstanceSubnetId
تم تحديده لأنه لم يتم نشر أي جهاز ظاهري وكيل في هذه الحالة. حذف سلسلة فارغة أو تحديدها لاستخدام الافتراضي (Standard_A1_v2).
الخصائص: التشغيل التلقائي
يمكنك استخدام الخاصية autoRun
للتحكم في ما إذا كان يجب بدء عملية إنشاء قالب الصورة تلقائيا عند إنشاء القالب. إنه تعداد بقيمتين محتملتين:
- ممكن - يتم تمكين التشغيل التلقائي، لذلك ستبدأ عملية إنشاء قالب الصورة تلقائيا عند إنشاء القالب.
- معطل - تم تعطيل التشغيل التلقائي، لذلك سيتعين عليك بدء عملية إنشاء الصورة يدويا بعد إنشاء القالب.
"properties": {
"autoRun": {
"state": "Enabled"
}
}
إشعار
عند التعيين autoRun
إلى "ممكن"، يتم تشغيل عملية إنشاء الصورة مرة واحدة عند إنشاء القالب. يضمن أن يتم إنشاء الصورة الأولية بسلاسة. ومع ذلك، فإنه لا يوفر إصدارات صور متسقة ومستمرة. للحصول على إصدارات صور متسقة ومستمرة يتم تشغيلها بمجرد تحديث قالب صورة، راجع كيفية استخدام مشغلات Azure Image Builder لإعداد بنية صورة تلقائية.
على عكس autoRun
، يضمن إنشاء الصورة التلقائي عبر مورد مشغل Azure Image Builder حدوث إنشاءات الصور باستمرار. كلما كانت هناك تغييرات على القالب، ستقوم خدمة Azure Image Builder تلقائيا بتشغيل عملية إنشاء الصورة.
اختر autoRun
لإنشاء الصور الفورية عند إنشاء القالب. اختر إنشاء الصور تلقائيا عندما تحتاج إلى تناسق مستمر في بنيات الصور. ضع في اعتبارك متطلباتك المحددة واستخدم الخيار المناسب استنادا إلى سير العمل الخاص بك.
الخصائص: managedResourceTags
يمكنك استخدام الخاصية managedResourceTags
لتطبيق العلامات على الموارد التي تنشئها خدمة Azure Image Builder في مجموعة الموارد المرحلية أثناء إنشاء الصورة. لمزيد من المعلومات حول مجموعة الموارد المرحلية، راجع نظرة عامة على Azure Image Builder
"properties": {
"managedResourceTags": {
"tag1": "value1",
"tag2": "value2"
}
}
عمليات قالب الصورة
بدء إنشاء صورة
لبدء الإنشاء، تحتاج إلى استدعاء "تشغيل" على مورد قالب الصورة، أمثلة على أوامر run
:
Invoke-AzResourceAction -ResourceName $imageTemplateName -ResourceGroupName $imageResourceGroup -ResourceType Microsoft.VirtualMachineImages/imageTemplates -ApiVersion "2023-07-01" -Action Run -Force
az resource invoke-action \
--resource-group $imageResourceGroup \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n helloImageTemplateLinux01 \
--action Run
إلغاء إنشاء صورة
إذا كنت تقوم بتشغيل إنشاء صورة تعتقد أنها غير صحيحة، أو تنتظر إدخال المستخدم، أو تشعر بأنها لن تكتمل بنجاح أبداً، فيمكنك إلغاء الإنشاء.
من الممكن إلغاء الإنشاء في أي وقت. إذا بدأت مرحلة التوزيع، فلا يزال بإمكانك إلغاء الأمر، ولكنك تحتاج إلى تنظيف أي صور قد لا تكون مكتملة. لا ينتظر أمر الإلغاء حتى يكتمل الإلغاء، راقب lastrunstatus.runstate
لتقدم الإلغاء، باستخدام أوامر الحالة هذه.
أمثلة على أوامر cancel
:
Invoke-AzResourceAction -ResourceName $imageTemplateName -ResourceGroupName $imageResourceGroup -ResourceType Microsoft.VirtualMachineImages/imageTemplates -ApiVersion "2023-07-01" -Action Cancel -Force
az resource invoke-action \
--resource-group $imageResourceGroup \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n helloImageTemplateLinux01 \
--action Cancel
الخطوات التالية
هناك نماذج من ملفات.json لسيناريوهات مختلفة في GitHub Azure Image Builder.