Windows 用の仮想マシン拡張機能とその機能

Azure 仮想マシン (VM) 拡張機能は、Azure VM でのデプロイ後の構成と自動タスクを提供する複数の小さなアプリケーションです。 たとえば、仮想マシンでソフトウェアのインストール、ウイルス対策保護、または VM 内でスクリプトを実行する機能が必要な場合は、VM 拡張機能を使用できます。

Azure VM 拡張機能は、Azure CLI、PowerShell、Azure Resource Manager (ARM) テンプレート、Azure portal を使って実行できます。 拡張機能は、新しい VM のデプロイにバンドルするか、既存の任意のシステムに対して実行することができます。

この記事では、前提条件や拡張機能を検出、管理、削除する方法についてのガイダンスなど、Azure VM 拡張機能の概要を説明します。 使用できる VM の拡張機能は数多くあるため、この記事では一般的な情報について説明します。 拡張機能にはそれぞれ固有の構成があり、独自のドキュメントがあります。

ユース ケースとサンプル

各 Azure VM 拡張機能には、特定のユース ケースがあります。 次に例をいくつか示します。

プロセス固有の拡張機能のほか、カスタム スクリプト拡張機能を Windows と Linux の両方の仮想マシンで使用できます。 Windows 用カスタム スクリプト拡張機能では、任意の PowerShell スクリプトを VM で実行できます。 カスタム スクリプトは、ネイティブの Azure ツールが提供可能な構成以上の構成を必要とする Azure のデプロイを設計する場合に役立ちます。

前提条件

Azure VM 拡張機能を使用するには、次の前提条件を確認してください。

Azure VM エージェント

VM で拡張機能を処理するには、Windows 用 Azure 仮想マシン エージェントがインストールされている必要があります。 このエージェントは、Azure VM エージェントまたは Windows ゲスト エージェントとも呼ばれます。 拡張機能のインストールの準備をするときは、リソースや依存関係へのアクセスなど、一部の拡張機能には個別の前提条件があることに注意してください。

Azure VM エージェントは、Azure VM と Azure ファブリック コントローラーとの相互動作を管理します。 エージェントは、Azure VM のデプロイと管理の多くの機能面を担当します (VM 拡張機能の実行など)。

Azure VM エージェントは、Azure Marketplace イメージにプレインストールされています。 また、サポートされているオペレーティング システムにエージェントを手動でインストールすることもできます。

エージェントは、複数のオペレーティング システム上で動作します。 ただし、拡張機能フレームワークでは、拡張機能が使うオペレーティング システムに制限があります。 一部の拡張機能は、すべてのオペレーティング システムではサポートされず、エラー コード 51 ("OS がサポートされていません") が出力される場合があります。 サポートの可否については、個々の拡張機能のドキュメントを確認してください。

ネットワーク アクセス

拡張機能パッケージは、Azure Storage 拡張機能リポジトリからダウンロードされます。 拡張機能状態のアップロードは、Azure Storage に投稿されます。

サポートされているバージョンの Azure VM エージェントを使っている場合は、VM のリージョンで Azure Storage へのアクセスを許可する必要はありません。 VM エージェントを使用して、エージェント通信用に Azure ファブリック コントローラーへの通信をリダイレクトすることができます (プライベート IP 168.63.129.16 の特権チャネルを介した HostGAPlugin 機能を使用)。 サポートされていないバージョンの VM エージェントを使う場合は、そのリージョン内の Azure Storage への VM からの送信アクセスを許可する必要があります。

重要

ゲスト ファイアウォールまたはプロキシを使用して IP アドレス 168.63.129.16 へのアクセスをブロックすると、拡張機能は失敗します。 サポートされているバージョンの VM エージェントを使用している場合や送信アクセスを構成した場合でも、エラーが発生します。 ポート 80 および 32526 が必要です。

エージェントは、拡張機能パッケージおよびレポート ステータスをダウンロードするためだけに使用できます。 たとえば、拡張機能のインストール時に GitHub からスクリプトをダウンロードする必要がある場合 (カスタム スクリプト拡張機能)、または Azure Storage へのアクセスが必要な場合 (Azure Backup) は、他のファイアウォールまたはネットワーク セキュリティ グループ (NSG) ポートを開く必要があります。 拡張機能はそれぞれ独自のアプリケーションであるため、要件も異なります。 Azure Storage または Microsoft Entra ID へのアクセスが必要な拡張機能の場合、Azure NSG サービス タグを使用してアクセスを許可することができます。

Azure VM エージェントでは、エージェント トラフィック要求のリダイレクトを有効にするプロキシ サーバーのサポートは提供されません。 Azure VM エージェント (がある場合) は、 カスタムプロキシに依存して、インターネット上またはホスト上のリソースに IP アドレス 168.63.129.16 経由でアクセスします。

VM 拡張機能の検出

Azure VM に使用できる VM 拡張機能は多数あります。 全一覧を表示するには、PowerShell コマンドレット Get-AzVMExtensionImage を使用します。

次のコマンドは、米国西部リージョンの場所で使用可能なすべての VM 拡張機能を一覧表示します。

Get-AzVmImagePublisher -Location "West US" |
Get-AzVMExtensionImageType |
Get-AzVMExtensionImage | Select Type, Version

このコマンドにより、次の例のような出力が提供されます。

Type                Version
----                -------
AcronisBackup       1.0.33
AcronisBackup       1.0.51
AcronisBackupLinux  1.0.33
AlertLogicLM        1.3.0.1
AlertLogicLM        1.3.0.0
AlertLogicLM        1.4.0.1

VM 拡張機能の実行

Azure VM 拡張機能は既存の VM で実行できます。これは、構成の変更や、デプロイ済みの VM での接続の回復が必要な場合に便利です。 VM 拡張機能は、ARM テンプレートのデプロイにバンドルすることもできます。 拡張機能を ARM テンプレートと共に使うことで、デプロイ後の操作なしで Azure VM をデプロイおよび構成することができます。

既存の VM に対して拡張機能を実行するには、次の方法を使用できます。

注意

次の一部の例では、コマンドでパラメーター値 "<placeholder>" を使用します。 各コマンドを実行する前に、すべての "<placeholder>" 値を自分の構成における特定の値で置き換えてください。

PowerShell

個々の拡張機能を実行するための PowerShell コマンドがいくつか存在します。 一覧を表示するには、Get-command コマンドを使用して Extension でフィルター処理します。

Get-Command Set-Az*Extension* -Module Az.Compute

このコマンドにより、次の例のような出力が提供されます。

CommandType     Name                                          Version    Source
-----------     ----                                          -------    ------
Cmdlet          Set-AzVMAccessExtension                       4.5.0      Az.Compute
Cmdlet          Set-AzVMADDomainExtension                     4.5.0      Az.Compute
Cmdlet          Set-AzVMAEMExtension                          4.5.0      Az.Compute
Cmdlet          Set-AzVMBackupExtension                       4.5.0      Az.Compute
Cmdlet          Set-AzVMBginfoExtension                       4.5.0      Az.Compute
Cmdlet          Set-AzVMChefExtension                         4.5.0      Az.Compute
Cmdlet          Set-AzVMCustomScriptExtension                 4.5.0      Az.Compute
Cmdlet          Set-AzVMDiagnosticsExtension                  4.5.0      Az.Compute
Cmdlet          Set-AzVMDiskEncryptionExtension               4.5.0      Az.Compute
Cmdlet          Set-AzVMDscExtension                          4.5.0      Az.Compute
Cmdlet          Set-AzVMExtension                             4.5.0      Az.Compute
Cmdlet          Set-AzVMSqlServerExtension                    4.5.0      Az.Compute
Cmdlet          Set-AzVmssDiskEncryptionExtension             4.5.0      Az.Compute

次の例では、カスタム スクリプト拡張機能を使って、ターゲットの仮想マシン上に GitHub リポジトリからスクリプトをダウンロードし、スクリプトを実行します。

Set-AzVMCustomScriptExtension -ResourceGroupName "<myResourceGroup>" `
    -VMName "<myVM>" -Name "<myCustomScript>" `
    -FileUri "https://raw.githubusercontent.com/neilpeterson/nepeters-azure-templates/master/windows-custom-script-simple/support-scripts/Create-File.ps1" `
    -Run "Create-File.ps1" -Location "<myVMregion>"

次の例では、VMAccess 拡張機能を使って、Windows VM の管理パスワードを一時パスワードにリセットします。 このコードを実行した後は、最初のサインイン時にパスワードをリセットする必要があります。

$cred=Get-Credential

Set-AzVMAccessExtension -ResourceGroupName "myResourceGroup" -VMName "myVM" -Name "myVMAccess" `
    -Location "myVMregion" -UserName $cred.GetNetworkCredential().Username `
    -Password $cred.GetNetworkCredential().Password -typeHandlerVersion "2.0"

Set-AzVMExtension コマンドを使用して、任意の VM 拡張機能を開始できます。

Azure portal

VM 拡張機能は、Azure portal から既存の VM に適用できます。 ポータルで VM を選び、[拡張機能とアプリケーション] を選び、[+ 追加] を選びます。 利用可能な拡張機能の一覧から目的の拡張機能を選び、ウィザードの手順に従います。

次の例は、Azure Portal からの Microsoft Antimalware 拡張機能のインストールを示しています。

Screenshot of the dialog for installing the Microsoft Antimalware extension.

Azure Resource Manager のテンプレート

ARM テンプレートに VM 拡張機能を追加して、テンプレートのデプロイと共に実行することができます。 テンプレートを使用して拡張機能をデプロイする場合は、完全に構成された Azure デプロイを作成できます。

次の JSON の例は、負荷分散された一連の VM と Azure SQL データベースをデプロイした後、各 VM に .NET Core アプリケーションをインストールする完全な ARM テンプレートからのものです。 VM 拡張機能はソフトウェアのインストールに対応します。

{
    "apiVersion": "2015-06-15",
    "type": "extensions",
    "name": "config-app",
    "location": "[resourceGroup().location]",
    "dependsOn": [
    "[concat('Microsoft.Compute/virtualMachines/', variables('vmName'),copyindex())]",
    "[variables('musicstoresqlName')]"
    ],
    "tags": {
    "displayName": "config-app"
    },
    "properties": {
    "publisher": "Microsoft.Compute",
    "type": "CustomScriptExtension",
    "typeHandlerVersion": "1.9",
    "autoUpgradeMinorVersion": true,
    "settings": {
        "fileUris": [
        "https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-windows/scripts/configure-music-app.ps1"
        ]
    },
    "protectedSettings": {
        "commandToExecute": "[concat('powershell -ExecutionPolicy Unrestricted -File configure-music-app.ps1 -user ',parameters('adminUsername'),' -password ',parameters('adminPassword'),' -sqlserver ',variables('musicstoresqlName'),'.database.windows.net')]"
    }
    }
}

ARM テンプレートの作成の詳細については、Virtual machines in an ARM template テンプレートの仮想マシンに関する記事を参照してください。

VM 拡張機能データをセキュリティで保護する

VM 拡張機能の実行時には、資格情報、ストレージ アカウント名、アクセス キーなどの機密情報を含めなければならない場合があります。 多くの VM 拡張機能には、データを暗号化し、ターゲットの VM 内でのみ暗号化を解除する保護された構成が含まれます。 拡張機能には、それぞれ固有の保護された構成スキーマがあります。各スキーマについては、拡張機能のドキュメントで詳しく説明されています。

次の JSON の例は、Windows 用カスタム スクリプト拡張機能のインスタンスを示しています。 実行するコマンドには、一連の資格情報が含まれています。 この例では、実行するコマンドは暗号化されません。

{
    "apiVersion": "2015-06-15",
    "type": "extensions",
    "name": "config-app",
    "location": "[resourceGroup().location]",
    "dependsOn": [
    "[concat('Microsoft.Compute/virtualMachines/', variables('vmName'),copyindex())]",
    "[variables('musicstoresqlName')]"
    ],
    "tags": {
    "displayName": "config-app"
    },
    "properties": {
    "publisher": "Microsoft.Compute",
    "type": "CustomScriptExtension",
    "typeHandlerVersion": "1.9",
    "autoUpgradeMinorVersion": true,
    "settings": {
        "fileUris": [
        "https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-windows/scripts/configure-music-app.ps1"
        ],
        "commandToExecute": "[concat('powershell -ExecutionPolicy Unrestricted -File configure-music-app.ps1 -user ',parameters('adminUsername'),' -password ',parameters('adminPassword'),' -sqlserver ',variables('musicstoresqlName'),'.database.windows.net')]"
    }
    }
}

commandToExecute プロパティを protected 構成に移動することで、次の例のように実行文字列をセキュリティで保護できます。

{
    "apiVersion": "2015-06-15",
    "type": "extensions",
    "name": "config-app",
    "location": "[resourceGroup().location]",
    "dependsOn": [
    "[concat('Microsoft.Compute/virtualMachines/', variables('vmName'),copyindex())]",
    "[variables('musicstoresqlName')]"
    ],
    "tags": {
    "displayName": "config-app"
    },
    "properties": {
    "publisher": "Microsoft.Compute",
    "type": "CustomScriptExtension",
    "typeHandlerVersion": "1.9",
    "autoUpgradeMinorVersion": true,
    "settings": {
        "fileUris": [
        "https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-windows/scripts/configure-music-app.ps1"
        ]
    },
    "protectedSettings": {
        "commandToExecute": "[concat('powershell -ExecutionPolicy Unrestricted -File configure-music-app.ps1 -user ',parameters('adminUsername'),' -password ',parameters('adminPassword'),' -sqlserver ',variables('musicstoresqlName'),'.database.windows.net')]"
    }
    }
}

拡張機能を使用する Azure サービスとしてのインフラストラクチャ (IaaS) VM の証明書コンソールには、Windows Azure CRP Certificate Generator という件名の証明書が表示されることがあります。 クラシック RedDog Front End (RDFE) VM の場合、証明書の件名は Windows Azure Service Management for Extensions になります。

これらの証明書により、拡張機能によって使用される保護された設定 (パスワードやその他の資格情報) の転送中、VM とそのホストの間の通信がセキュリティで保護されます。 Azure ファブリック コントローラーによって証明書が作成され、Azure VM エージェントに渡されます。 VM を毎日起動し、停止する場合、ファブリック コントローラーによって新しい証明書が作成されることがあります。 証明書はコンピューターの個人用証明書ストアに保存されます。 これらの証明書は削除できます。 必要に応じて、Azure VM エージェントにより証明書が再作成されます。

エージェントと拡張機能の更新方法

エージェントと拡張機能は、同じ自動更新メカニズムを共有します。

更新プログラムが使用可能で自動更新が有効になっている場合、拡張機能または他の VM モデルが変更された後にのみ、更新プログラムが VM にインストールされます。 変更には、以下が含まれます。

  • データ ディスク
  • 拡張機能
  • 拡張機能タグ
  • ブート診断コンテナー
  • ゲスト OS のシークレット
  • VM サイズ
  • ネットワーク プロファイル

パブリッシャーは、さまざまなタイミングで、更新プログラムをリージョンで使用できるようにします。 別のリージョンの VM はバージョンが異なる場合があります。

Note

一部の更新プログラムでは、追加のファイアウォール規則を必要とする可能性があります。 詳細については、「ネットワーク アクセス」を参照してください。

VM にデプロイされる拡張機能を一覧表示する

次のコマンドを使用して、VM にデプロイされる拡張機能を一覧表示できます。

$vm = Get-AzVM -ResourceGroupName "<myResourceGroup>" -VMName "<myVM>"
$vm.Extensions | select Publisher, VirtualMachineExtensionType, TypeHandlerVersion

次の例のような出力が表示されます。

Publisher             VirtualMachineExtensionType          TypeHandlerVersion
---------             ---------------------------          ------------------
Microsoft.Compute     CustomScriptExtension                1.9

エージェントの更新プログラム

Azure VM エージェントには、拡張機能処理コードのみが含まれています。 Windows プロビジョニング コードは分離されています。 Azure VM エージェントをアンインストールできます。 Azure VM エージェントの自動更新を無効にすることはできません。

拡張機能処理コードは、次のタスクを実行します。

  • Azure ファブリックと通信する。
  • インストール、状態の報告、個々の拡張機能の更新、拡張機能の削除など、VM 拡張機能操作を処理する。 更新プログラムには、拡張機能処理コードに対するセキュリティ修正プログラム、バグ修正プログラム、拡張機能が含まれます。

実行中のバージョンを確認するには、Azure VM エージェントの検出に関するページを参照してください。

拡張機能の更新プログラム

拡張機能の更新プログラムが使用可能で自動更新が有効になっている場合、VM モデルが変更されると、Azure VM エージェントによって拡張機能がダウンロードされ、アップグレードされます。

拡張機能の自動更新プログラムは、"マイナー" または "修正プログラム" のどちらかです。 マイナー更新プログラムは、拡張機能をプロビジョニングするときに、オプトインまたはオプトアウトできます。 次の例は、ARM テンプレートで "autoUpgradeMinorVersion": true, パラメーターを使ってマイナー バージョンを自動的にアップグレードする方法を示しています。

    "properties": {
    "publisher": "Microsoft.Compute",
    "type": "CustomScriptExtension",
    "typeHandlerVersion": "1.9",
    "autoUpgradeMinorVersion": true,
    "settings": {
        "fileUris": [
        "https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-windows/scripts/configure-music-app.ps1"
        ]
    },

最新のマイナー リリースのバグ修正プログラムを取得するには、拡張機能のデプロイで常に自動更新を選ぶことを強くお勧めします。 セキュリティや重要なバグの修正を含む修正プログラムをオプトアウトすることはできません。

自動更新を無効にした場合、またはメジャー バージョンをアップグレードする必要がある場合は、Set-AzVMExtension コマンドを使用してターゲット バージョンを指定します。

拡張機能の更新プログラムを識別する方法

拡張機能の更新プログラムを識別するには、いくつかの方法があります。

拡張機能が autoUpgradeMinorVersion を使って VM 上に設定されているかどうかを識別する

autoUpgradeMinorVersion パラメーターを使用して、VM モデルを確認して拡張機能がプロビジョニングされているかどうかを判断できます。 VM モデルを確認するには、Get-AzVm コマンドを使用し、リソース グループと VM の名前を次のように指定します。

 $vm = Get-AzVm -ResourceGroupName "myResourceGroup" -VMName "myVM"
 $vm.Extensions

次の出力例では、autoUpgradeMinorVersion パラメーターが true に設定されていることが示されています。

ForceUpdateTag              :
Publisher                   : Microsoft.Compute
VirtualMachineExtensionType : CustomScriptExtension
TypeHandlerVersion          : 1.9
AutoUpgradeMinorVersion     : True

autoUpgradeMinorVersion イベントが発生する時間を特定する

拡張機能への更新がいつ行われたかを判断するには、C:\WindowsAzure\Logs\WaAppAgent.log で VM 上のエージェント ログを確認できます。

次の例は、Microsoft.Compute.CustomScriptExtension バージョン 1.8 がインストールされた VM と、バージョン 1.9 で使用できる修正プログラムを示しています。

[INFO]  Getting plugin locations for plugin 'Microsoft.Compute.CustomScriptExtension'. Current Version: '1.8', Requested Version: '1.9'
[INFO]  Auto-Upgrade mode. Highest public version for plugin 'Microsoft.Compute.CustomScriptExtension' with requested version: '1.9', is: '1.9'

エージェントのアクセス許可

タスクを実行するには、Azure VM エージェントが "ローカル システム" として実行される必要があります。

VM 拡張機能のトラブルシューティング

各 VM 拡張機能には、固有のトラブルシューティング手順が存在する場合があります。 たとえば、カスタム スクリプト拡張機能を使う場合、スクリプト実行の詳細は、拡張機能が実行される VM のローカルに保存されます。

次のトラブルシューティング アクションは、すべての VM 張機能に適用されます。

  • Azure VM エージェント ログをチェックするには、C:\WindowsAzure\Logs\WaAppAgent.log で拡張機能がプロビジョニングされたときのアクティビティを確認します

  • C:\WindowsAzure\Logs\Plugins<extensionName>> で、拡張機能ログの詳細を確認します。

  • エラー コード、既知の問題、その他の拡張機能固有の情報については、拡張機能固有のドキュメントのトラブルシューティングのセクションを参照してください。

  • システム ログを確認します。 排他的なパッケージ マネージャーへのアクセスを必要とする別のアプリケーションのインストールが長時間実行されている場合など、拡張機能に干渉する可能性のある他の操作をチェックします。

  • VM で、プロビジョニング失敗状態の既存の拡張機能がある場合、その他の新しい拡張機能のインストールは失敗します。

拡張機能のエラーの一般的な理由

拡張機能が失敗する一般的な理由を次に示します。

  • 拡張機能の実行には 20 分かかります (例外は、カスタム スクリプト、Chef、DSC であり、90 分かかります)。デプロイがこの時間を超えると、タイムアウトとマークされます。 この問題の原因としては、VM のリソースが少ない場合や、拡張機能がプロビジョニングを試行している間に他の VM の構成や起動タスクによって大量のリソースが消費されている場合が考えられます。

  • 最小限の前提条件が満たされていません。 一部の拡張機能では、HPC イメージなど、VM SKU 上に依存関係があります。 拡張機能は、Azure Storage やパブリック サービスとの通信など、特定のネットワーク アクセス要件を必要とする場合があります。 その他の例としては、パッケージ リポジトリへのアクセス、ディスク領域の不足、セキュリティ上の制限事項が考えられます。

  • パッケージ マネージャーのアクセスが排他的です。 場合によっては、長時間にわたる VM 構成の実行が拡張機能のインストールと競合し、どちらもパッケージ マネージャーへの排他的なアクセスを必要とする状況になることがあります。

拡張機能の状態表示

VM に対して VM 拡張機能が実行されたら、Get-AzVM コマンドを使用して拡張機能の状態を返します。 Substatuses[0] の結果は、拡張機能のプロビジョニングが成功したことを示します。これは、VM に正常にデプロイされたことを意味します。 Substatuses[1] の結果が表示された場合、VM 内の拡張機能の実行は失敗しました。

Get-AzVM -ResourceGroupName "myResourceGroup" -VMName "myVM" -Status

出力は次の例のようになります。

Extensions[0]           :
  Name                  : CustomScriptExtension
  Type                  : Microsoft.Compute.CustomScriptExtension
  TypeHandlerVersion    : 1.9
  Substatuses[0]        :
    Code                : ComponentStatus/StdOut/succeeded
    Level               : Info
    DisplayStatus       : Provisioning succeeded
    Message             : Windows PowerShell \nCopyright (C) Microsoft Corporation. All rights reserved.\n
  Substatuses[1]        :
    Code                : ComponentStatus/StdErr/succeeded
    Level               : Info
    DisplayStatus       : Provisioning succeeded
    Message             : The argument 'cseTest%20Scriptparam1.ps1' to the -File parameter does not exist. Provide the path to an existing '.ps1' file as an argument to the

-File parameter.
  Statuses[0]           :
    Code                : ProvisioningState/failed/-196608
    Level               : Error
    DisplayStatus       : Provisioning failed
    Message             : Finished executing command

拡張機能の実行の状態は、Azure portal で確認することもできます。 VM を選び、[拡張機能] を選び、目的の拡張機能を選びます。

VM 拡張機能の再実行

VM 拡張機能の再実行が必要になる場合があります。 拡張機能を再実行するには、その拡張機能を削除し、その後任意の実行方法で拡張機能を再実行します。 拡張機能を削除するには、Remove-AzVMExtension コマンドを次のように使用します。

Remove-AzVMExtension -ResourceGroupName "myResourceGroup" -VMName "myVM" -Name "myExtensionName"

また、Azure portal で拡張機能を削除することもできます。 VM を選び、[拡張機能] を選び、目的の拡張機能を選びます。 [アンインストール] を選択します。

一般的な VM 拡張機能のリファレンス

次の表に、VM 拡張機能の一般的なリファレンスをいくつか示します。

拡張機能の名前 説明
Windows でのカスタムのスクリプト拡張機能 Azure 仮想マシンに対してスクリプトを実行します。
Windows での DSC 拡張機能 PowerShell Desired State Configuration を仮想マシンに適用します。
Azure Diagnostics 拡張機能 Azure Diagnostics を管理します
VMAccess 拡張機能 ユーザーと資格情報を管理します。

次のステップ

VM 拡張機能の詳細については、「Azure 仮想マシンの拡張機能とその機能」を参照してください。