事前および事後イベントの作成
[アーティクル] 07/24/2024
2 人の共同作成者
フィードバック
この記事の内容
適用対象: ✔️ Windows VM ✔️ Linux VM ✔️ オンプレミス環境 ✔️ Azure Arc 対応サーバー ✔️ Azure VM。
事前イベントと事後イベントを使用すると、スケジュールされたメンテナンス構成の前後にユーザー定義アクションを実行できます。 詳細については、Azure Update Manager での事前イベントと事後イベントの作業 に関するページを参照してください。
この記事では、Azure Update Manager で事前イベントと事後イベントの作成を行う方法について説明します。
スケジュール メンテナンス構成の Event Grid
Azure Update Manager では、Event Grid を利用して、事前イベントと事後イベントを作成および管理します。 詳細については、Event Grid の概要 のページを参照してください。 スケジュール メンテナンス期間の前後にイベントをトリガーするには、次のものが必要です。
スケジュール メンテナンス構成 - Azure Update Manager でスケジュール メンテナンス構成の事前イベントと事後イベントを作成できます。 詳細については、メンテナンス構成を使用した更新のスケジュール に関するページを参照してください。
事前または事後イベントで実行するアクション - Event Grid でサポートされているイベント ハンドラー (エンドポイント) を使用して、アクションまたはタスクを定義できます。 Webhook と Azure Functions を使用して Azure Automation Runbook を作成する方法の例を次に示します。 これらのイベント ハンドラーまたはエンドポイント内で、事前イベントと事後イベントの一部として実行するアクションを定義する必要があります。
Webhook - PowerShell 7.2 Runbook を作成し 、Runbook を Webhook にリンクします 。
Azure 関数 - Azure 関数を作成します 。
事前および事後イベント - 次のセクションに示されている手順に従って、スケジュール メンテナンス構成の事前イベントと事後イベントを作成できます。 Event Grid の [基本] タブで使用される用語の詳細については、Event Grid の用語を参照してください。
事前および事後イベントの作成
新しいスケジュール メンテナンス構成の作成中に事前および事後イベントを作成する
Azure portal にサインインし、[Azure Update Manager] に移動します。
[管理] で [マシン] を選択します。
上部リボンから [更新のスケジュール] を選択します。
「メンテナンス構成を作成する 」ページで、[イベント] タブを選択します。
[+イベント サブスクリプション] を選択して、事前または事後イベントを作成します。
「イベント サブスクリプションを追加する 」ページで、次の詳細を入力します: [イベント サブスクリプションの詳細] セクションで、適切な名前を指定します。
スキーマは Event Grid スキーマ のままにします。
このメンテナンス構成で作成する最初のイベントのシステム トピック名 を入力します。 結果のイベントに対しても、同じシステム トピック名が自動的に設定されます。
[イベントの種類] セクションの [イベントの種類にフィルターを適用] で、エンドポイントまたは送信先にプッシュするイベントの種類を選択します。 [メンテナンス前イベント] と [メンテナンス後イベント] のどちらかでも、両方でも選択できます。 メンテナンス構成のスケジュールに固有のイベントの種類の詳細については、Azure のイベントの種類 に関する記事を参照してください。
[エンドポイントの詳細] セクションで、応答を受信するエンドポイントを選択します。
[追加] を選択して、スケジュールの作成時に事前および事後イベントを作成します。
Note
上記のフローでは、Webhook と Azure Functions の 2 つをイベント ハンドラーまたはエンドポイントとして選択できます。 [追加] を選択すると、イベント サブスクリプションは作成されませんが、メンテナンス構成に追加されます。 イベント サブスクリプションは、スケジュール メンテナンス構成と共に作成されます。
こちら に記載されているステップに従って、メンテナンス構成を作成します。
# Obtain the Maintenance Configuration ID from Step 1 and assign it to MaintenanceConfigurationResourceId variable
$MaintenanceConfigurationResourceId = "/subscriptions/<subId>/resourceGroups/<Resource group>/providers/Microsoft.Maintenance/maintenanceConfigurations/<Maintenance configuration Name>"
# Use the same Resource Group that you used to create maintenance configuration in Step 1
$ResourceGroupForSystemTopic = "<Resource Group for System Topic>"
$SystemTopicName = "<System topic name>"
$TopicType = "Microsoft.Maintenance.MaintenanceConfigurations"
$SystemTopicLocation = "<System topic location>"
# System topic creation
New-AzEventGridSystemTopic -ResourceGroupName $ResourceGroupForSystemTopic -Name $SystemTopicName -Source $MaintenanceConfigurationResourceId -TopicType $TopicType -Location $SystemTopicLocation
# Event subscription creation
$IncludedEventTypes = @("Microsoft.Maintenance.PreMaintenanceEvent")
# Webhook
$EventSubscriptionName = "PreEventWebhook"
$PreEventWebhookEndpoint = "<Webhook URL>"
$dest = New-AzEventGridWebHookEventSubscriptionDestinationObject -EndpointUrl $PreEventWebhookEndpoint
New-AzEventGridSystemTopicEventSubscription -ResourceGroupName $ResourceGroupForSystemTopic -SystemTopicName $SystemTopicName -EventSubscriptionName $EventSubscriptionName -Endpoint $PreEventWebhookEndpoint -IncludedEventType $IncludedEventTypes -Destination $dest
# Azure Function
$dest = New-AzEventGridAzureFunctionEventSubscriptionDestinationObject -ResourceId "<Azure Function Resource Id>"
New-AzEventGridSystemTopicEventSubscription -ResourceGroupName $ResourceGroupForSystemTopic -SystemTopicName $SystemTopicName -EventSubscriptionName $EventSubscriptionName -Destination $dest -IncludedEventType $IncludedEventTypes
こちら に記載されているステップに従って、メンテナンス構成を作成します。
SystemTopicName="<System topic name>
# Use the same Resource Group that you used to create maintenance configuration in Step 1
ResourceGroupName="<Resource Group mentioned in Step 1>"
# Obtain the Maintenance Configuration ID from Step 1 and assign it to Source variable
Source="/subscriptions/<subId>/resourceGroups/<Resource group>/providers/Microsoft.Maintenance/maintenanceConfigurations/<Maintenance configuration Name>"
TopicType="Microsoft.Maintenance.MaintenanceConfigurations"
Location="<System topic location> "
# System topic creation
az eventgrid system-topic create --name $SystemTopicName --resource-group $ResourceGroupName --source $Source --topic-type $TopicType --location $Location
# Event subscription creation
IncludedEventTypes='("Microsoft.Maintenance.PreMaintenanceEvent")'
# Webhook
az eventgrid system-topic event-subscription create --name "<Event subscription name>" --resource-group $ResourceGroupName --system-topic-name $SystemTopicName --endpoint-type webhook --endpoint "<webhook URL>" --included-event-types IncludedEventTypes
# Azure Function
az eventgrid system-topic event-subscription create –name "<Event subscription name>" --resource-group $ResourceGroupName --system-topic-name $SystemTopicName --endpoint-type azurefunction --endpoint "<Azure Function ResourceId>" --included-event-types IncludedEventTypes
こちら に記載されているステップに従って、メンテナンス構成を作成します。
# システム トピックの作成 詳細情報
PUT /subscriptions/<subscription Id>/resourceGroups/<resource group name>/providers/Microsoft.EventGrid/systemTopics/<system topic name>?api-version=2022-06-15
要求本文:
{
"properties": {
"source": "/subscriptions/<subscription Id>/resourceGroups/<resource group>/providers/Microsoft.Maintenance/maintenanceConfigurations/<maintenance configuration name> ",
"topicType": "Microsoft.Maintenance.MaintenanceConfigurations"
},
"location": "<location>"
}
# イベント サブスクリプションの作成 詳細情報
許可されるイベントの種類 - Microsoft.Maintenance.PreMaintenanceEvent、Microsoft.Maintenance.PostMaintenanceEvent
Webhook
PUT /subscriptions/<subscription Id>/resourceGroups/<resource group name>/providers/Microsoft.EventGrid/systemTopics/<system topic name>/eventSubscriptions/<Event Subscription name>?api-version=2022-06-15
要求本文:
{
"properties": {
"destination": {
"endpointType": "WebHook",
"properties": {
"endpointUrl": "<Webhook URL>"
}
},
"filter": {
"includedEventTypes": [
"Microsoft.Maintenance.PreMaintenanceEvent"
]
}
}
}
Azure 関数
PUT /subscriptions/<subscription Id>/resourceGroups/<resource group name>/providers/Microsoft.EventGrid/systemTopics/<system topic name>/eventSubscriptions/<Event Subscription name>?api-version=2022-06-15
要求本文
{
"properties": {
"destination": {
"endpointType": "AzureFunction",
"properties": {
"resourceId": "<Azure Function Resource Id>"
}
}
},
"filter": {
"includedEventTypes": [
"Microsoft.Maintenance.PostMaintenanceEvent"
]
}
}
既存のスケジュール メンテナンス構成に事前および事後イベントを作成する
Azure portal にサインインし、[Azure Update Manager] に移動します。
[管理] で、[マシン] 、[メンテナンス構成] の順に選択します。
[メンテナンス構成] ページで、事前イベントと事後イベントを追加するメンテナンス構成を選択します。
選択した [メンテナンス構成] ページで、[設定] で [イベント] を選択します。 または、[概要] で [メンテナンス イベントの作成] のカードを選択します。
[+イベント サブスクリプション] を選択して、メンテナンス前/メンテナンス後イベントを作成します。
[イベント サブスクリプションの作成] ページで、次の詳細を入力します:
[イベント サブスクリプションの詳細] セクションで、適切な名前を指定します。
スキーマは Event Grid スキーマ のままにします。
[トピックの詳細] セクションで、[システム トピック名] に適切な名前を指定します。
[イベントの種類] セクションの [イベントの種類にフィルターを適用] で、エンドポイントまたは送信先にプッシュするイベントの種類を選択します。 [メンテナンス前イベント] と [メンテナンス後イベント] を選択できます。 メンテナンス構成のスケジュールに固有のイベントの種類の詳細については、Azure のイベントの種類 に関する記事を参照してください。
[エンドポイントの詳細] セクションで、応答を受信するエンドポイントを選択します。
[作成] を選択して、既存のスケジュールで事前イベントと事後イベントを構成します。
$MaintenanceConfigurationResourceId = "/subscriptions/<subId>/resourceGroups/<Resource group>/providers/Microsoft.Maintenance/maintenanceConfigurations/<Maintenance configuration Name>"
$ResourceGroupForSystemTopic = "<Resource Group for System Topic>"
$SystemTopicName = "<System topic name>"
$TopicType = "Microsoft.Maintenance.MaintenanceConfigurations"
$SystemTopicLocation = "<System topic location>"
# System topic creation
New-AzEventGridSystemTopic -ResourceGroupName $ResourceGroupForSystemTopic -Name $SystemTopicName -Source $MaintenanceConfigurationResourceId -TopicType $TopicType -Location $SystemTopicLocation
# Event subscription creation
$IncludedEventTypes = @("Microsoft.Maintenance.PreMaintenanceEvent")
# Webhook
$EventSubscriptionName = "PreEventWebhook"
$PreEventWebhookEndpoint = "<Webhook URL>"
$dest = New-AzEventGridWebHookEventSubscriptionDestinationObject -EndpointUrl $PreEventWebhookEndpoint
New-AzEventGridSystemTopicEventSubscription -ResourceGroupName $ResourceGroupForSystemTopic -SystemTopicName $SystemTopicName -EventSubscriptionName $EventSubscriptionName -Endpoint $PreEventWebhookEndpoint -IncludedEventType $IncludedEventTypes -Destination $dest
# Azure Function
$dest = New-AzEventGridAzureFunctionEventSubscriptionDestinationObject -ResourceId "<Azure Function Resource Id>"
New-AzEventGridSystemTopicEventSubscription -ResourceGroupName $ResourceGroupForSystemTopic -SystemTopicName $SystemTopicName -EventSubscriptionName $EventSubscriptionName -Destination $dest -IncludedEventType $IncludedEventTypes
SystemTopicName="<System topic name>
ResourceGroupName="<Resource Group for System Topic>"
Source="/subscriptions/<subId>/resourceGroups/<Resource group>/providers/Microsoft.Maintenance/maintenanceConfigurations/<Maintenance configuration Name>"
TopicType="Microsoft.Maintenance.MaintenanceConfigurations"
Location="<System topic location> "
# System topic creation
az eventgrid system-topic create --name $SystemTopicName --resource-group $ResourceGroupName --source $Source --topic-type $TopicType --location $Location
# Event subscription creation
IncludedEventTypes='("Microsoft.Maintenance.PreMaintenanceEvent")'
# Webhook
az eventgrid system-topic event-subscription create --name "<Event subscription name>" --resource-group $ResourceGroupName --system-topic-name $SystemTopicName --endpoint-type webhook --endpoint "<webhook URL>" --included-event-types IncludedEventTypes
# Azure Function
az eventgrid system-topic event-subscription create –name "<Event subscription name>" --resource-group $ResourceGroupName --system-topic-name $SystemTopicName --endpoint-type azurefunction --endpoint "<Azure Function ResourceId>" --included-event-types IncludedEventTypes
# システム トピックの作成 詳細情報
PUT /subscriptions/<subscription Id>/resourceGroups/<resource group name>/providers/Microsoft.EventGrid/systemTopics/<system topic name>?api-version=2022-06-15
要求本文:
{
"properties": {
"source": "/subscriptions/<subscription Id>/resourceGroups/<resource group>/providers/Microsoft.Maintenance/maintenanceConfigurations/<maintenance configuration name> ",
"topicType": "Microsoft.Maintenance.MaintenanceConfigurations"
},
"location": "<location>"
}
# イベント サブスクリプションの作成 詳細情報
許可されるイベントの種類 - Microsoft.Maintenance.PreMaintenanceEvent、Microsoft.Maintenance.PostMaintenanceEvent
Webhook
PUT /subscriptions/<subscription Id>/resourceGroups/<resource group name>/providers/Microsoft.EventGrid/systemTopics/<system topic name>/eventSubscriptions/<Event Subscription name>?api-version=2022-06-15
要求本文:
{
"properties": {
"destination": {
"endpointType": "WebHook",
"properties": {
"endpointUrl": "<Webhook URL>"
}
},
"filter": {
"includedEventTypes": [
"Microsoft.Maintenance.PreMaintenanceEvent"
]
}
}
}
Azure 関数
PUT /subscriptions/<subscription Id>/resourceGroups/<resource group name>/providers/Microsoft.EventGrid/systemTopics/<system topic name>/eventSubscriptions/<Event Subscription name>?api-version=2022-06-15
要求本文
{
"properties": {
"destination": {
"endpointType": "AzureFunction",
"properties": {
"resourceId": "<Azure Function Resource Id>"
}
}
},
"filter": {
"includedEventTypes": [
"Microsoft.Maintenance.PostMaintenanceEvent"
]
}
}
次のステップ
Azure Update Manager での事前および事後イベントの概要については、こちら を参照してください。
事前および事後イベントを管理する方法、またはスケジュール実行をキャンセルする方法については、事前と事後のメンテナンス構成イベント に関する記事を参照してください。
Webhooks を使用して VM をオンまたはオフするために事前または事後イベントを使用する方法については、こちら を参照してください。
Azure Functions を使用して VM をオンまたはオフするために事前または事後イベントを使用する方法については、こちら を参照してください。