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

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

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

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

ユース ケースとサンプル

各 Azure VM 拡張機能には、特定のユース ケースがあります。 以下に例を示します。

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

前提条件

Azure VM エージェント

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

重要

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

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

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

VM 拡張機能の検出

Azure VM に使用できる VM 拡張機能は多数あります。 完全な一覧を表示するには、Get-AzVMExtensionImage を使用します。 次の例では、WestUS の場所で利用できるすべての拡張機能が表示されています。

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

VM 拡張機能の実行

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

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

PowerShell

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

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 "West US"

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

$cred=Get-Credential

Set-AzVMAccessExtension -ResourceGroupName "myResourceGroup" -VMName "myVM" -Name "myVMAccess" `
    -Location WestUS -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 拡張機能のインストールを示しています。

Microsoft Antimalware 拡張機能のインストール ダイアログのスクリーンショット。

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 テンプレートの作成の詳細については、「Azure Resource Manager テンプレートの仮想マシン」を参照してください。

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

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

次の例は、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 = 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 拡張機能操作の処理。 更新プログラムには、拡張機能処理コードに対するセキュリティ修正プログラム、バグ修正プログラム、拡張機能が含まれます。

実行中のバージョンを確認するには、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 モデルから判断できます。 確認するには、Get-AzVm を使用し、リソース グループと VM の名前を次のように指定します。

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

autoUpgradeMinorVersiontrue に設定されている出力例を次に示します。

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

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

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

次の例では、VM に Microsoft.Compute.CustomScriptExtension バージョン 1.8 がインストールされています。 修正プログラムはバージョン 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'

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

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

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 で拡張機能を削除することもできます。

  1. VM を選択します。
  2. [拡張機能] を選択します。
  3. 拡張機能を選びます。
  4. [アンインストール] を選択します。

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

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

次のステップ

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