إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
ينطبق على: ✔️ Windows VMs ✔️ Linux VMs ✔️ البيئة ✔️ المحلية خوادم Azure VMs ✔️ Azure Arc الممكنة.
يشرح هذا الدرس كيفية إنشاء أحداث ما قبل الصيانة وما بعدها لبدء وإيقاف آلة افتراضية (VM) في سير عمل تصحيح مجدول باستخدام Azure Functions.
في هذا البرنامج التعليمي، تتعلم كيفية:
- إنشاء تطبيق دالة.
- أنشئ دالة.
- أنشئ اشتراكا في الحدث.
المتطلبات الأساسية
تأكد من أنك تستخدم دفتر تشغيل PowerShell 7.4 .
تعيين أذونات إلى الهوية المُدارةالمناسبة. يمكن لدفتر التشغيل استخدام هوية الإدارة المعينة من قبل النظام لحساب الأتمتة أو هوية مدارة معينة من قبل المستخدم.
تتطلب أمثلة السكريبتات التالية (بدء وإيقاف الأجهزة الافتراضية) دور مساهم في الآلة الافتراضية أو دورا مخصصا بهذه الأذونات المحددة:
- Microsoft.Compute/virtualMachines/start/action
- Microsoft.Compute/virtualMachines/deallocate/action
- Microsoft.Compute/virtualMachines/restart/action
- Microsoft.Compute/virtualMachines/powerOff/action
يمكنك استخدام بوابة Azure أو مجموعات Azure PowerShell لتعيين الأذونات لكل هوية:
لتعيين الأصوات، اتبع الخطوات في تعيين أدوار Azure باستخدام بوابة Azure.
- استورد الوحدة
Az.ResourceGraph. تأكد من تحديث الوحدة إلى ThreadJob مع إصدار الوحدة 2.0.3.
قم بإنشاء تطبيق دالة
اتبع الخطوات لإنشاء تطبيق وظيفي.
اذهب إلى المورد وحمل التبعيات باستخدام الخطوات التالية.
إشعار
يجب عليك تحميل التبعيات فقط من المرة الأولى. إذا كانت تبعيات PowerShell تفشل في التحميل، تحقق من أحدث إصدارات و
AzAz.ResourceGraph.بالنسبة لتطبيق الوظيفة، اختر ملفات التطبيق.
تحت host.json، قم بتعيين ManagedDependecy إلى True واختر requirements.psd1.
تحت requirements.psd1، قم بلصق الكود التالي:
@{ 'Az'='12.*' 'Az.ResourceGraph'='1.0.0' 'Az.Resources'='6.*' 'ThreadJob' = '2.*' }حدد حفظ.
أعد تشغيل تطبيق الدالة من علامة التبويب Overview لتحميل التبعيات المذكورة في ملف requirements.psd1 .
إنشاء وظيفة
بعد إنشاء تطبيق الوظائف، اذهب إلى المصدر، ثم إلى النظرة العامة، ثم اختر إنشاء في بوابة Azure.
في صفحة وظائف الإنشائ ، قم باتخاذ الخيارات التالية:
في لوحة وظائف شبكة الحدث ، اختر Code+Test من القائمة اليسرى. قم بلصق الكود التالي، ثم اختر حفظ.
# Make sure that you're using eventGridEvent for parameter binding in the Azure function. param($eventGridEvent, $TriggerMetadata) Connect-AzAccount -Identity # Install the Resource Graph module from PowerShell Gallery # Install-Module -Name Az.ResourceGraph $maintenanceRunId = $eventGridEvent.data.CorrelationId $resourceSubscriptionIds = $eventGridEvent.data.ResourceSubscriptionIds if ($resourceSubscriptionIds.Count -eq 0) { Write-Output "Resource subscriptions are not present." break } Write-Output "Querying ARG to get machine details [MaintenanceRunId=$maintenanceRunId][ResourceSubscriptionIdsCount=$($resourceSubscriptionIds.Count)]" $argQuery = @" maintenanceresources | where type =~ 'microsoft.maintenance/applyupdates' | where properties.correlationId =~ '$($maintenanceRunId)' | where id has '/providers/microsoft.compute/virtualmachines/' | project id, resourceId = tostring(properties.resourceId) | order by id asc "@ Write-Output "Arg Query Used: $argQuery" $allMachines = [System.Collections.ArrayList]@() $skipToken = $null do { $res = Search-AzGraph -Query $argQuery -First 1000 -SkipToken $skipToken -Subscription $resourceSubscriptionIds $skipToken = $res.SkipToken $allMachines.AddRange($res.Data) } while ($skipToken -ne $null -and $skipToken.Length -ne 0) if ($allMachines.Count -eq 0) { Write-Output "No Machines were found." break } $jobIDs= New-Object System.Collections.Generic.List[System.Object] $startableStates = "stopped" , "stopping", "deallocated", "deallocating" $allMachines | ForEach-Object { $vmId = $_.resourceId $split = $vmId -split "/"; $subscriptionId = $split[2]; $rg = $split[4]; $name = $split[8]; Write-Output ("Subscription Id: " + $subscriptionId) $mute = Set-AzContext -Subscription $subscriptionId $vm = Get-AzVM -ResourceGroupName $rg -Name $name -Status -DefaultProfile $mute $state = ($vm.Statuses[1].DisplayStatus -split " ")[1] if($state -in $startableStates) { Write-Output "Starting '$($name)' ..." $newJob = Start-ThreadJob -ScriptBlock { param($resource, $vmname, $sub) $context = Set-AzContext -Subscription $sub; Start-AzVM -ResourceGroupName $resource -Name $vmname -DefaultProfile $context} -ArgumentList $rg, $name, $subscriptionId $jobIDs.Add($newJob.Id) } else { Write-Output ($name + ": no action taken. State: " + $state) } } $jobsList = $jobIDs.ToArray() if ($jobsList) { Write-Output "Waiting for machines to finish starting..." Wait-Job -Id $jobsList } foreach($id in $jobsList) { $job = Get-Job -Id $id if ($job.Error) { Write-Output $job.Error } }في القائمة اليسرى، اختر التكامل. بالنسبة لمحفز، أدخل قيمة اسم معامل Event Trigger . استخدم نفس اسم المعلمة المحدد في نافذة Code+Test . في المثال، المعامل هو
eventGridEvent.حدد حفظ.
إنشاء اشتراك حدث
سجل الدخول إلى مدخل Microsoft Azure وانتقل إلى Azure Update Manager.
تحت إدارة الإعدادات، اخترإعدادات صيانةالآلات>.
في لوحة إعدادات الصيانة ، اختر التكوين.
ضمن Settings، حدد Events.
اختر +اشتراك الحدث لإنشاء حدث ما قبل الصيانة أو بعد الصيانة.
في قسم إنشاء اشتراك الحدث ، في قسم تفاصيل اشتراك الحدث ، قدم اسما مناسبا. احتفظ بالمخطط كمخطط شبكة الأحداث.
في قسم أنواع الأحداث ، لاختيار التصفية إلى أنواع الأحداث، اختر حدث ما قبل الصيانة أو حدث ما بعد الصيانة.
في قسم تفاصيل نقطة النهاية ، اختر نقطة نهاية دالة Azure ، ثم اختر تكوين نقطة نهاية.
قدم التفاصيل المناسبة، مثل مجموعة الموارد وتطبيق الوظائف لتفعيل الحدث.
حدد إنشاء.
يمكنك أيضا استخدام حسابات Azure Storage ومركز الأحداث لتخزين وإرسال واستقبال الأحداث. لمزيد من المعلومات، راجع البداية السريعة لإنشاء قائمة انتظار في Azure Storageوإنشاء مركز أحداث باستخدام بوابة Azure.