チュートリアル:ARM テンプレートを使用して仮想マシン拡張機能をデプロイする

Azure 仮想マシン拡張機能を使用して、Azure VM でデプロイ後の構成タスクと自動化タスクを実行する方法について説明します。 Azure VM と共に、多くのさまざまな VM 拡張機能を使用できます。 このチュートリアルでは、Azure Resource Manager テンプレート (ARM テンプレート) からカスタム スクリプト拡張機能をデプロイして、Windows VM で PowerShell スクリプトを実行します。 スクリプトによって Web サーバーが VM にインストールされます。

このチュートリアルに含まれるタスクは次のとおりです。

  • PowerShell スクリプトを準備する
  • クイック スタート テンプレートを開く
  • テンプレートの編集
  • テンプレートのデプロイ

Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。

前提条件

この記事を完了するには、以下が必要です。

  • Visual Studio Code と Resource Manager ツール拡張機能。 「クイック スタート:Visual Studio Code を使用して ARM テンプレートを作成する」を参照してください。

  • セキュリティを向上させるには、生成されたパスワードを仮想マシンの管理者アカウントに対して使用します。 Azure Cloud Shell を使用して、PowerShell または Bash で次のコマンドを実行できます。

    openssl rand -base64 32
    

    詳細については、man openssl rand を実行して man ページを開きます。

    Azure Key Vault は、暗号化キーおよびその他のシークレットを保護するために設計されています。 詳細については、ARM テンプレートのデプロイで Azure Key Vault を統合する方法に関するチュートリアルを参照してください。 また、パスワードは 3 か月ごとに更新することをお勧めします。

PowerShell スクリプトを準備する

インライン PowerShell スクリプトまたはスクリプト ファイルを使用することができます。 このチュートリアルでは、スクリプト ファイルの使用方法について説明します。 次の内容が含まれた PowerShell スクリプトは、GitHub から共有されます。

Install-WindowsFeature -Name Web-Server -IncludeManagementTools

ファイルを独自の場所に発行する場合は、チュートリアルの後半でテンプレートの fileUri 要素を更新する必要があります。

クイック スタート テンプレートを開く

Azure クイックスタート テンプレートは、ARM テンプレートのリポジトリです。 テンプレートを最初から作成しなくても、サンプル テンプレートを探してカスタマイズすることができます。 このチュートリアルで使用するテンプレートは、「Deploy a simple Windows VM」(単純な Windows VM をデプロイする) と呼ばれます。

  1. Visual Studio Code の [ファイル]>[ファイルを開く] を選択します。

  2. [ファイル名] ボックスに次の URL を貼り付けます。

    https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.compute/vm-simple-windows/azuredeploy.json
    
  3. ファイルを開くには、 [開く] を選択します。 このテンプレートには、次の 5 つのリソースが定義されています。

  4. [ファイル]>[Save As](名前を付けて保存) を選択し、このファイルのコピーを azuredeploy.json という名前でローカル コンピューターに保存します。

テンプレートの編集

次の内容を使用して、仮想マシン拡張機能リソースを既存のテンプレートに追加します。

{
  "type": "Microsoft.Compute/virtualMachines/extensions",
  "apiVersion": "2021-04-01",
  "name": "[format('{0}/{1}', variables('vmName'), 'InstallWebServer')]",
  "location": "[parameters('location')]",
  "dependsOn": [
    "[format('Microsoft.Compute/virtualMachines/{0}',variables('vmName'))]"
  ],
  "properties": {
    "publisher": "Microsoft.Compute",
    "type": "CustomScriptExtension",
    "typeHandlerVersion": "1.7",
    "autoUpgradeMinorVersion": true,
    "settings": {
      "fileUris": [
        "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/tutorial-vm-extension/installWebServer.ps1"
      ],
      "commandToExecute": "powershell.exe -ExecutionPolicy Unrestricted -File installWebServer.ps1"
    }
  }
}

このリソース定義の詳細については、拡張機能のリファレンスを参照してください。 以下にいくつかの重要な要素を示します。

  • name:拡張機能リソースが仮想マシン オブジェクトの子リソースであるため、名前には仮想マシン名のプレフィックスが含まれている必要があります。 子リソースの名前と種類の設定に関する記事を参照してください。
  • dependsOn:仮想マシンの作成後に拡張機能リソースを作成します。
  • fileUris: スクリプト ファイルが格納される場所です。 提供された場所を使用しない場合は、値を更新する必要があります。
  • commandToExecute:このコマンドによってスクリプトが呼び出されます。

インライン スクリプトを使用するには、fileUris を削除し、commandToExecute を次のように更新します。

powershell.exe Install-WindowsFeature -name Web-Server -IncludeManagementTools && powershell.exe remove-item 'C:\\inetpub\\wwwroot\\iisstart.htm' && powershell.exe Add-Content -Path 'C:\\inetpub\\wwwroot\\iisstart.htm' -Value $('Hello World from ' + $env:computername)

このインライン スクリプトは、iisstart.html の内容も更新します。

Web サーバーにアクセスできるように、HTTP ポートを開放する必要もあります。

  1. テンプレートで securityRules を探します。

  2. default-allow-3389 の横に次のルールを追加します。

    {
      "name": "AllowHTTPInBound",
      "properties": {
        "priority": 1010,
        "access": "Allow",
        "direction": "Inbound",
        "destinationPortRange": "80",
        "protocol": "Tcp",
        "sourcePortRange": "*",
        "sourceAddressPrefix": "*",
        "destinationAddressPrefix": "*"
      }
    }
    

テンプレートのデプロイ

デプロイ手順については、「チュートリアル: 依存リソースを含む ARM テンプレートを作成する」の「テンプレートのデプロイ」セクションを参照してください。 生成されたパスワードを仮想マシンの管理者アカウントに対して使用することが推奨されます。 この記事の「前提条件」セクションを参照してください。

Cloud Shell から次のコマンドを実行して、VM のパブリック IP アドレスを取得します。

(Get-AzPublicIpAddress -ResourceGroupName $resourceGroupName).IpAddress

IP アドレスを Web ブラウザーに貼り付けます。 インターネット インフォメーション サービス (IIS) の既定のウェルカム ページ (下記) が表示されます。

インターネット インフォメーション サービスのウェルカム ページのスクリーンショット。

リソースをクリーンアップする

デプロイした Azure リソースが不要になったら、リソース グループを削除してそれらをクリーンアップしてください。

  1. Azure portal の左側のウィンドウで、 [リソース グループ] を選択します。
  2. [名前でフィルター] ボックスにリソース グループの名前を入力します。
  3. リソース グループ名を選択します。 リソース グループには 6 つのリソースが表示されます。
  4. 一番上のメニューで、 [リソース グループの削除] を選択します。

次のステップ

このチュートリアルでは、仮想マシンと仮想マシン拡張機能をデプロイしました。 拡張機能によって、仮想マシンに IIS Web サーバーがインストールされました。 Azure SQL Database 拡張機能を使用して BACPAC ファイルをインポートする方法については、以下を参照してください。