Azure Virtual Machine Scale Sets の自動インスタンス修復
Azure Virtual Machine Scale Sets の自動インスタンス修復を有効にすると、正常なインスタンスのセットを維持することで、アプリケーションの高可用性を実現できます。 アプリケーション正常性拡張機能またはロード バランサー正常性プローブによって異常なインスタンスが発見された場合、自動インスタンス修復は、異常なインスタンスの削除やそれを置換するための新しいインスタンスの作成、異常なインスタンスの再イメージ化、異常なインスタンスの再起動などの修復アクションをトリガーすることで、インスタンスの復旧を試みます。
自動インスタンス修復を使用するための要件
スケール セットでアプリケーションの正常性の監視を有効にする
スケール セットでは、インスタンスのアプリケーションの正常性の監視が有効になっている必要があります。 正常性の監視を行うには、アプリケーション正常性拡張機能または Load Balancer の正常性プローブを使用します。一度に 1 つしか有効にすることができません。 アプリケーション正常性拡張機能または Load Balancer プローブは、仮想マシン インスタンス上に構成されたアプリケーション エンドポイントに ping を行い、アプリケーションの正常性状態を判断します。 この正常性状態は、インスタンスの正常性を監視し、必要に応じて修復を実行するために、スケール セットのオーケストレーターによって使用されます。
正常性状態を提供するようにエンドポイントを構成する
自動インスタンス修復ポリシーを有効にする前に、スケール セット インスタンスにアプリケーションの正常性状態を出力するように構成されたアプリケーション エンドポイントがあることを確認します。 Application Health 拡張機能で正常性状態を構成するには、バイナリ正常性状態またはリッチ正常性状態のいずれかを使用できます。 ロード バランサーの正常性プローブを使用して正常性状態を構成するには、「プローブのアップ動作」を参照してください。
"異常" または "不明" ("不明" 状態は Application Health 拡張機能のリッチ正常性状態でのみ使用可能) としてマークされたインスタンスの場合、自動修復はスケール セットによってトリガーされます。 エンドポイントの構成中に予期せずインスタンスが修復されることを回避するため、アプリケーション エンドポイントが正しく構成されていることを確認してから、自動修復ポリシーを有効にします。
API バージョン
自動修復ポリシーは、コンピューティング API バージョン 2018-10-01 以降でサポートされています。
再イメージ化と再起動の repairAction
設定がサポートされているのは、コンピューティング API バージョン 2021-11-01 以上においてです。
リソースまたはサブスクリプションの移動に関する制限事項
自動修復機能が有効になっている場合、スケール セットでは、リソースやサブスクリプションの移動は現在サポートされていません。
Service Fabric スケール セットの制限事項
現在、この機能は Service Fabric スケール セットではサポートされていません。
プロビジョニング エラーが発生した VM の制限
自動修復では、プロビジョニング エラーが原因で VM インスタンスが "異常" とマークされるシナリオは現在サポートされていません。 正常性の監視と自動修復機能を有効にするには、VM を正常に初期化する必要があります。
自動インスタンス修復のしくみ
自動インスタンス修復機能は、スケール セット内の個々のインスタンスの正常性の監視に依存します。 スケール セット内の VM インスタンスは、アプリケーション正常性拡張機能または Load Balancer の正常性プローブを使用してアプリケーションの正常性状態を出力するように構成できます。 インスタンスに異常があることが判明した場合、スケール セットによって異常なインスタンスに対して事前構成された修復アクションが実行されます。 仮想マシン スケール セット モデルでは、automaticRepairsPolicy
オブジェクトを使用して、インスタンスの自動修復を有効にすることができます。
自動インスタンス修復プロセスは、次のように行われます。
- アプリケーション正常性拡張機能または Load Balancer の正常性プローブは、スケール セット内の各仮想マシンのアプリケーション エンドポイントに ping を行って、各インスタンスのアプリケーションの正常性状態を取得します。
- エンドポイントがステータス 200 (OK) で応答した場合、インスタンスは "正常" とマークされます。 それ以外のすべての場合 (エンドポイントに到達できない場合を含む)、インスタンスは "異常" とマークされます。
- インスタンスに異常があることが判明すると、スケール セットによって構成された修復アクション (既定値は "置換") が異常なインスタンスに適用されます。
- インスタンスの修復はバッチで実行されます。 どの時点においても、スケール セット内のインスタンスの合計の 5% 以上が修復されることはありません。 スケール セットのインスタンス数が 20 未満の場合、異常なインスタンスの修復は一度に 1 つずつ実行されます。
- 上記のプロセスは、スケール セット内のすべての異常なインスタンスが修復されるまで続行されます。
使用可能な修復アクション
自動インスタンス修復で利用できる修復アクションは置換、再イメージ化、再起動の 3 つです。 既定の修復アクションは置換ですが、automaticRepairsPolicy
オブジェクトの repairAction
設定を変更することで、再イメージ化または再起動を使用するように自動修復を構成することができます。
置換は、異常なインスタンスを削除し、新しいインスタンスを作成して置き換えます。 最新の仮想マシン スケール セット モデルは、新しいインスタンスを作成するために使用します。 この修復アクションが既定値です。
再イメージ化は、再イメージ化操作を異常なインスタンスに適用します。
再起動は、異常なインスタンスに再起動操作を適用します。
次の表は、3 つの修復アクションの違いを比較しています。
修復アクション | VM インスタンス ID は保持されるか? | プライベート IP は保持されるか? | マネージド データ ディスクは保持されるか? | マネージド OS ディスクは保持されるか? | ローカル (一時) ディスクは保持されるか? |
---|---|---|---|---|---|
置換 (既定値) | いいえ | いいえ | いいえ | いいえ | いいえ |
再イメージ化 | はい | イエス | はい | いいえ | はい |
Restart | はい | イエス | イエス | イエス | はい |
自動修復ポリシーで修復アクションを更新する方法の詳細については、「自動修復ポリシーで修復アクションを構成する」セクションを参照してください。
バッチ処理
自動インスタンス修復操作は、バッチで実行されます。 どの時点においても、スケール セット内のインスタンスの 5% 以上が自動修復ポリシーを使用して修復されることはありません。 このプロセスにより、同時に異常が検出された場合に、多数のインスタンスが同時に削除され、再作成されるのを防ぐことができます。
猶予期間
スケール セットで実行される PUT、PATCH、または POST アクションが原因でインスタンスの状態変更操作が開始されると、そのインスタンスの修復操作は、猶予期間が終了した後にのみ実行されます。 猶予期間は、インスタンスが正常な状態に戻るまでにかけられる期間です。 猶予期間は、状態の変更が完了した後に開始されます。これは、不完全または偶発的な修復操作を回避するのに役立ちます。 猶予期間は、修復操作の結果として作成されたインスタンスを含めて、スケール セット内に新しく作成されたインスタンスに適用されます。 猶予期間は、ISO 8601 形式では分単位で指定し、プロパティ automaticRepairsPolicy.gracePeriod を使用して設定できます。 猶予期間は 10 分から 90 分の範囲で指定でき、既定値は 10 分です。
修復の中断
Virtual Machine Scale Sets では、必要に応じて自動インスタンス修復を一時的に中断する機能が提供されます。 仮想マシン スケール セットのインスタンス ビューのプロパティ orchestrationServices の下にある自動修復の serviceState には、自動修復の現在の状態が表示されます。 スケール セットが自動修復にオプトインされると、パラメーター serviceState の値が Running に設定されます。 スケール セットの自動修復が中断されると、パラメーター serviceState は Suspended に設定されます。 スケール セットに automaticRepairsPolicy が定義されていても、自動修復機能が有効になっていない場合、パラメーター serviceState は Not Running に設定されます。
修復操作を繰り返し実行した後も、スケール セット内の異常なものを置き換えるために新しく作成されたインスタンスが異常な状態のままになる場合、安全対策として、プラットフォームでは自動修復の serviceState が Suspended に更新されます。 自動修復の serviceState の値を Running に設定することで、もう一度自動修復を再開することができます。 詳細な手順については、スケール セットの自動修復ポリシーのサービス状態の表示と更新に関するセクションを参照してください。
また、serviceState の変化を監視し、スケール セットで自動修復が中断されたら通知を受け取るように、Azure 警告ルールを設定することもできます。 詳しくは、「Azure 警告ルールを使用して自動インスタンス修復サービスの ServiceState の変化を監視する」をご覧ください。
インスタンスの保護と自動修復
スケール セット内のインスタンスが保護ポリシーのいずれかを適用することで保護されている場合、そのインスタンスに対して自動修復は実行されません。 この動作は、次の両方の保護ポリシーに適用されます: "スケールインから保護する" と "スケール セット アクションから保護する"。
終了通知と自動修復
スケール セットで終了通知機能が有効になっている場合、"置換" 操作中の異常なインスタンスの削除は、終了通知構成に従って行われます。 終了通知は、Azure メタデータ サービス (スケジュールされたイベント) を介して送信され、構成された遅延タイムアウトの間、インスタンスの削除が遅延します。 しかし、異常なものを置き換えるための新しいインスタンスの作成では、遅延タイムアウトが完了するまで待機しません。
新しいスケール セットを作成するときに自動修復ポリシーを有効にする
重要
2023 年 11 月以降、PowerShell と Azure CLI を使用して作成された VM スケール セットは、オーケストレーション モードが指定されていない場合、既定でフレキシブル オーケストレーション モードになります。 この変更の詳細と実行する必要があるアクションについては、「VMSS PowerShell/CLI のお客様向けの重大な変更 - Microsoft コミュニティ ハブ」を参照してください
新しいスケール セットの作成時に自動修復ポリシーを有効にするには、この機能をオプトインするためのすべての要件が満たされていることを確認します。 エンドポイントの構成中に意図せず修復がトリガーされないように、スケール セット インスタンスのアプリケーション エンドポイントを正しく構成する必要があります。 新しく作成されたスケール セットの場合、すべてのインスタンスの修復は、猶予期間が完了した後にのみ実行されます。 スケール セットで自動インスタンス修復を有効にするには、仮想マシン スケール セット モデルで automaticRepairsPolicy オブジェクトを使用します。
また、このクイックスタート テンプレートを使用して、仮想マシン スケール セットをデプロイすることもできます。 このクイックスタートでは、スケール セットにロード バランサーの正常性プローブがあり、構成猶予期間 30 分で自動インスタンス修復が有効になっています。
次の手順では、新しいスケール セットを作成するときに自動修復ポリシーを有効にします。
- 仮想マシン スケール セットに移動します。
- [+ 追加] を選択して、新しいスケール セットを作成します。
- [正常性] タブに移動します。
- [正常性] セクションを見つけます。
- [アプリケーションの正常性を監視する] オプションを有効にします。
- [自動修復ポリシー] セクションを見つけます。
- [自動修復] オプションを [オン] にします。
- [猶予期間 (分)] で、猶予期間を分単位で指定します。指定できる値は 10 分から 90 分です。
- 新しいスケール セットの作成が完了したら、[確認と作成] ボタンを選択します。
既存のスケール セットを更新するときに自動修復ポリシーを有効にする
既存のスケール セットで自動修復ポリシーを有効にする前に、この機能をオプトインするためのすべての要件が満たされていることを確認してください。 エンドポイントの構成中に意図せず修復がトリガーされないように、スケール セット インスタンスのアプリケーション エンドポイントを正しく構成する必要があります。 スケール セットで自動インスタンス修復を有効にするには、仮想マシン スケール セット モデルで automaticRepairsPolicy オブジェクトを使用します。
既存のスケール セットのモデルを更新した後、最新のモデルが確実にスケールのすべてのインスタンスに適用されるようにします。 手順については、「最新のスケール セット モデルで VM を最新の状態にする方法」を参照してください。
Azure portal を使用して、既存のスケール セットの自動修復ポリシーを変更することができます。
Note
次の手順を開始する前に、Virtual Machine Scale Sets でアプリケーション正常性拡張機能または Load Balancer 正常性プローブを有効にします。
- 既存の仮想マシン スケール セットに移動します。
- 左側のメニューの [設定] で、 [正常性と修復] を選択します。
- [アプリケーションの正常性を監視する] オプションを有効にします。
アプリケーション正常性拡張機能を使用してスケール セットを監視する場合:
[アプリケーションの正常性モニター] ドロップダウン リストから [アプリケーション正常性拡張機能] を選択します。
[プロトコル] ドロップダウン リストから、アプリケーションで正常性を報告するために使用されるネットワーク プロトコルを選択します。 アプリケーションの要件に基づいて適切なプロトコルを選択します。 プロトコル オプションは HTTP、HTTPS、または TCP です。
[ポート番号] 構成ボックスに、アプリケーションの正常性の監視に使用するネットワーク ポートを入力します。
[パス] には、アプリケーションの正常性を報告するために使用するアプリケーション エンドポイント パス ("/" など) を指定します。
Note
アプリケーション正常性拡張機能では、スケール セットの各仮想マシン内のこのパスに ping を行って、各インスタンスのアプリケーションの正常性状態が取得されます。 Binary Health States を使用しており、エンドポイントがステータス 200 (OK) で応答した場合、インスタンスは "正常" とマークされます。 それ以外のすべての場合 (エンドポイントに到達できない場合を含む)、インスタンスは "異常" とマークされます。 その他の正常性状態オプションについては、Rich Health States について確認してください。
SLB 正常性プローブを使用してスケール セットを監視している場合:
- [アプリケーションの正常性モニター] ドロップダウン リストから [ロード バランサー プローブ] を選択します。- ロード バランサーの正常性プローブの場合は、既存の正常性プローブを選択するか、監視用の新しい正常性プローブを作成します。
自動修復を有効にするには:
- [自動修復ポリシー] セクションを見つけます。
- [自動修復] オプションを [オン] にします。
- [猶予期間 (分)] で、猶予期間を分単位で指定します。 指定できる値は 10 分から 90 分です。
- 終了したら、 [保存] を選択します。
自動修復ポリシーで修復アクションを構成する
automaticRepairsPolicy
の repairAction
設定を使用すると、異常なインスタンスに応じて実行される必要な修復アクションを指定できます。 既存の自動修復ポリシーで修復アクションを更新する場合は、まずスケール セットで自動修復を無効にし、更新された修復アクションを使用して再度有効にする必要があります。 このプロセスを以下の例に示します。
この例では、既存の自動修復ポリシーを使用してスケール セットの修復アクションを更新する方法を示します。 API バージョン 2021-11-01 以降を使用します。
スケール セットの既存の自動修復ポリシーを無効にする
PUT or PATCH on '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}?api-version=2021-11-01'
{
"properties": {
"automaticRepairsPolicy": {
"enabled": "false"
}
}
}
必要な修復アクションを使用して自動修復ポリシーを再度有効にする
PUT or PATCH on '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}?api-version=2021-11-01'
{
"properties": {
"automaticRepairsPolicy": {
"enabled": "true",
"gracePeriod": "PT40M",
"repairAction": "Reimage"
}
}
}
自動インスタンス修復ポリシーのサービス状態の表示と更新
仮想マシン スケール セットで API バージョン 2019-12-01 以降を指定して「インスタンス ビューの取得」を使用し、プロパティ orchestrationServices の下の自動修復の serviceState を表示します。
GET '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/instanceView?api-version=2019-12-01'
{
"orchestrationServices": [
{
"serviceName": "AutomaticRepairs",
"serviceState": "Running"
}
]
}
[オーケストレーション サービスの状態の設定] を使用して、自動修復に対して serviceState を中断または再開します。
POST '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/instanceView?api-version=2023-07-01'
{
"serviceName": "AutomaticRepairs",
"action": "Suspend"
}
トラブルシューティング
自動修復ポリシーを有効にできない
"'プロパティ' 型のオブジェクトにメンバー 'automaticRepairsPolicy' が見つかりませんでした" というメッセージが表示された 'BadRequest' エラーが発生した場合は、仮想マシン スケール セットに使用されている API バージョンを確認してください。 この機能では、API バージョン 2018-10-01 以降が必要です。
ポリシーが有効にもかかわらずインスタンスが修復されない
インスタンスの猶予期間内である可能性があります。 この期間は、インスタンスの状態が変更された後から修復が実行されるまで待機する時間です。これは、不完全または偶発的な修復を回避するのに役立ちます。 修復操作は、インスタンスの猶予期間が完了した後に実行されます。
スケール セット インスタンスのアプリケーションの正常性状態の表示
仮想マシンスケール セットのインスタンスに対して Get Instance View API を使用すると、アプリケーションの正常性状態を表示できます。 Azure PowerShell では、コマンドレット Get-AzVmssVM を InstanceView フラグと共に使用できます。 アプリケーションの正常性状態は、プロパティ vmHealth に表示されます。
Azure portal では、正常性状態も確認できます。 既存のスケール セットに移動し、左側のメニューから [インスタンス] を選択し、 [正常性状態] 列で各スケール セット インスタンスの正常性状態を確認します。
次のステップ
スケール セットの アプリケーション正常性拡張機能 または Load Balancer の正常性プローブ を構成する方法について説明します。