演習 - 変換されたテンプレートのテストとデプロイ

完了

おもちゃのトラック サービスを実行する仮想マシンを表す Bicep ファイルが作成されました。 パイプライン内でファイルの使用をコミットする前に、ファイルが現在の Azure 環境を正確に表していることを確認する必要があります。 このモジュールでは、Bicep ファイルをテストし、既存の Azure リソースの上にデプロイします。

プロセスの間に、次のタスクを実行します。

  • What-If コマンドを実行して、デプロイの影響を判断します。
  • テンプレートをデプロイし、デプロイの状態を確認します。

What-If を実行する

新しい Bicep ファイルをデプロイする前に、What-If コマンドを実行します。 このコマンドは、Bicep ファイルが有効であることを確認します。 また、このコマンドは、ファイルをデプロイしたときに Azure 環境で発生する変更の一覧も提供します。

Note

実際の移行では、環境ごとに適切なパラメーター セットを使用して、運用環境と非運用環境に対して What-If コマンドを実行する必要があります。 そうすることで、検出できなかった可能性がある構成の違いを検出するのに役立ちます。 この例では 1 つの環境を使用するので、その環境に対してのみ What-If 操作を実行します。

注意事項

What-If コマンドと後続のテンプレートのデプロイに使用するデプロイ モードでは、リスクが生じる可能性があります。 完全モードでは、テンプレートで指定されていないリソース グループで定義されているすべてのリソースが削除されます。 多くの場合、Bicep コードが完成していることを確認するのに役立つため、この方法を使用することをお勧めします。 ただし、移行中にリソースがなくなっている可能性があるため、このオプションにはある程度のリスクが伴います。

この演習では、完全モードを使用して What-If コマンドを実行し、欠落している可能性のあるリソースが検出されるようにします。 次に、デプロイを増分モードで実行します。

  1. Visual Studio Code ターミナルで、次のコマンドを実行します。

    az deployment group what-if \
      --mode Complete \
      --resource-group ToyTruck \
      --template-file main.bicep \
      --parameters main.parameters.production.json
    
  2. プロンプトが表示されたら、virtualMachineAdminPassword パラメーター値としてセキュリティで保護されたパスワードを入力します。

  1. Visual Studio Code ターミナルで、次のコマンドを実行します。

    New-AzResourceGroupDeployment `
      -WhatIf `
      -Mode Complete `
      -ResourceGroupName ToyTruck `
      -TemplateFile main.bicep `
      -TemplateParameterFile main.parameters.production.json
    
  2. プロンプトが表示されたら、virtualMachineAdminPassword パラメーター値としてセキュリティで保護されたパスワードを入力します。

What-If 出力をレビューする

What-if の出力を確認します。次の例のようになります。

Note: The result may contain false positive predictions (noise).
You can help us improve the accuracy of the result by opening an issue here: https://aka.ms/WhatIfIssues.

Resource and property changes are indicated with these symbols:
  - Delete
  ~ Modify
  x NoEffect
  = NoChange

The deployment will update the following scope:

Scope: /subscriptions/f0750bbe-ea75-4ae5-b24d-a92ca601da2c/resourceGroups/TOYTRUCK

  - Microsoft.Compute/disks/ToyTruckServer_disk1_23e6a144c4ea4049b3e2be24b78a9e81

      id:        "/subscriptions/f0750bbe-ea75-4ae5-b24d-a92ca601da2c/resourceGroups/TOYTRUCK/providers/Microsoft.Compute/disks/ToyTruckServer_disk1_23e6a144c4ea4049b3e2be24b78a9e81"
      location:  "westus3"
      managedBy: "/subscriptions/f0750bbe-ea75-4ae5-b24d-a92ca601da2c/resourceGroups/ToyTruck/providers/Microsoft.Compute/virtualMachines/ToyTruckServer"
      name:      "ToyTruckServer_disk1_23e6a144c4ea4049b3e2be24b78a9e81"
      sku.name:  "Premium_LRS"
      sku.tier:  "Premium"
      type:      "Microsoft.Compute/disks"

  ~ Microsoft.Network/networkInterfaces/toytruckserver123 [2022-05-01]
    - kind:                                              "Regular"
    - properties.allowPort25Out:                         true
    ~ properties.ipConfigurations: [
      ~ 0:

        - properties.privateIPAddress:                        "10.0.0.4"
        - properties.publicIPAddress.properties.deleteOption: "Detach"
        - properties.publicIPAddress.sku:

            name: "Basic"
            tier: "Regional"


      ]
    x properties.ipConfigurations[0].properties.primary: true

  = Microsoft.Compute/virtualMachines/ToyTruckServer [2022-08-01]
    x properties.storageProfile.osDisk.managedDisk.storageAccountType: "Premium_LRS"

  = Microsoft.Network/networkSecurityGroups/ToyTruckServer-nsg [2022-05-01]
  = Microsoft.Network/publicIPAddresses/ToyTruckServer-ip [2022-05-01]
  = Microsoft.Network/virtualNetworks/ToyTruck-vnet [2022-05-01]

Resource changes: 1 to delete, 1 to modify, 4 no change.

出力には、3 つの重要な情報が含まれています。 それぞれをレビューしてみましょう。

  • What-If コマンドは、マネージド ディスクが削除されることを検出します。 この出力は正確ではありません。 仮想マシンを作成すると、マネージド ディスクが自動的に作成されます。 マネージド ディスクは削除されるリソースの一覧に表示されていますが、仮想マシンはそれらが削除されないようにします。 ただし、常に慎重なアプローチを採用することをお勧めします。そのため、次の手順では、実際のデプロイを増分モードで実行し、問題が発生するリスクを軽減します。

  • what-if コマンドは、networkInterface リソースの privateIPAddress プロパティが削除されることを検出しています。 このプロパティは意図的に削除したため、この結果は問題ありません。 privateIPAllocationMethod プロパティは Dynamic に設定されているため、privateIPAddress プロパティが削除されても、変更の場合でも、影響はありません。

  • what-if コマンドは、networkInterface リソースの publicIPAddress の 2 つのプロパティが削除されることを検出しています。 問題を解決するには、これらのプロパティを追加します。

テンプレートを更新する

main.bicep で、networkInterface リソースを更新して、publicIPAddressdeleteOption のプロパティと sku を含めます。

resource networkInterface 'Microsoft.Network/networkInterfaces@2022-05-01' = {
  name: networkInterfaceName
  location: location
  properties: {
    ipConfigurations: [
      {
        name: 'ipconfig1'
        properties: {
          privateIPAllocationMethod: 'Dynamic'
          publicIPAddress: {
            id: publicIPAddress.id
            properties: {
              deleteOption: 'Detach'
            }
            sku: {
              name: 'Basic'
              tier: 'Regional'
            }
          }
          subnet: {
            id: virtualNetwork::defaultSubnet.id
          }
          primary: true
          privateIPAddressVersion: 'IPv4'
        }
      }
    ]
    enableAcceleratedNetworking: true
    enableIPForwarding: false
    disableTcpStateTracking: false
    networkSecurityGroup: {
      id: networkSecurityGroup.id
    }
    nicType: 'Standard'
  }
}

what-if コマンドを再実行する

  1. Visual Studio Code ターミナルで、次のコマンドを実行します。

    az deployment group what-if \
      --mode Complete \
      --resource-group ToyTruck \
      --template-file main.bicep \
      --parameters main.parameters.production.json
    
  2. プロンプトが表示されたら、virtualMachineAdminPassword パラメーター値としてセキュリティで保護されたパスワードを入力します。

  3. 操作が完了した後、出力を確認します。 出力は次の例のようになります。 deleteOptionsku のプロパティは出力には表示されません。

    Note: The result may contain false positive predictions (noise).
    You can help us improve the accuracy of the result by opening an issue here: https://aka.ms/WhatIfIssues.
    
    Resource and property changes are indicated with these symbols:
      - Delete
      ~ Modify
      x NoEffect
      = NoChange
    
    The deployment will update the following scope:
    
    Scope: /subscriptions/f0750bbe-ea75-4ae5-b24d-a92ca601da2c/resourceGroups/TOYTRUCK
    
      - Microsoft.Compute/disks/ToyTruckServer_disk1_23e6a144c4ea4049b3e2be24b78a9e81
    
          id:        "/subscriptions/f0750bbe-ea75-4ae5-b24d-a92ca601da2c/resourceGroups/TOYTRUCK/providers/Microsoft.Compute/disks/ToyTruckServer_disk1_23e6a144c4ea4049b3e2be24b78a9e81"
          location:  "westus3"
          managedBy: "/subscriptions/f0750bbe-ea75-4ae5-b24d-a92ca601da2c/resourceGroups/ToyTruck/providers/Microsoft.Compute/virtualMachines/ToyTruckServer"
          name:      "ToyTruckServer_disk1_23e6a144c4ea4049b3e2be24b78a9e81"
          sku.name:  "Premium_LRS"
          sku.tier:  "Premium"
          type:      "Microsoft.Compute/disks"
    
      ~ Microsoft.Network/networkInterfaces/toytruckserver123 [2022-05-01]
        - kind:                                              "Regular"
        - properties.allowPort25Out:                         true
        ~ properties.ipConfigurations: [
          ~ 0:
    
            - properties.privateIPAddress: "10.0.0.4"
    
          ]
        x properties.ipConfigurations[0].properties.primary: true
    
      = Microsoft.Compute/virtualMachines/ToyTruckServer [2022-08-01]
        x properties.storageProfile.osDisk.managedDisk.storageAccountType: "Premium_LRS"
    
      = Microsoft.Network/networkSecurityGroups/ToyTruckServer-nsg [2022-05-01]
      = Microsoft.Network/publicIPAddresses/ToyTruckServer-ip [2022-05-01]
      = Microsoft.Network/virtualNetworks/ToyTruck-vnet [2022-05-01]
    
    Resource changes: 1 to delete, 1 to modify, 4 no change.
    
  1. Visual Studio Code ターミナルで、次のコマンドを実行します。

    New-AzResourceGroupDeployment `
      -WhatIf `
      -Mode Complete `
      -ResourceGroupName ToyTruck `
      -TemplateFile main.bicep `
      -TemplateParameterFile main.parameters.production.json
    
  2. プロンプトが表示されたら、virtualMachineAdminPassword パラメーター値としてセキュリティで保護されたパスワードを入力します。

  3. 操作が完了した後、出力を確認します。 出力は次の例のようになります。 deleteOptionsku のプロパティは出力には表示されません。

    Note: The result may contain false positive predictions (noise).
    You can help us improve the accuracy of the result by opening an issue here: https://aka.ms/WhatIfIssues.
    
    Resource and property changes are indicated with these symbols:
      - Delete
      ~ Modify
      x NoEffect
      = NoChange
    
    The deployment will update the following scope:
    
    Scope: /subscriptions/f0750bbe-ea75-4ae5-b24d-a92ca601da2c/resourceGroups/TOYTRUCK
    
      - Microsoft.Compute/disks/ToyTruckServer_disk1_23e6a144c4ea4049b3e2be24b78a9e81
    
          id:        "/subscriptions/f0750bbe-ea75-4ae5-b24d-a92ca601da2c/resourceGroups/TOYTRUCK/providers/Microsoft.Compute/disks/ToyTruckServer_disk1_23e6a144c4ea4049b3e2be24b78a9e81"
          location:  "westus3"
          managedBy: "/subscriptions/f0750bbe-ea75-4ae5-b24d-a92ca601da2c/resourceGroups/ToyTruck/providers/Microsoft.Compute/virtualMachines/ToyTruckServer"
          name:      "ToyTruckServer_disk1_23e6a144c4ea4049b3e2be24b78a9e81"
          sku.name:  "Premium_LRS"
          sku.tier:  "Premium"
          type:      "Microsoft.Compute/disks"
    
      ~ Microsoft.Network/networkInterfaces/toytruckserver123 [2022-05-01]
        - kind:                                              "Regular"
        - properties.allowPort25Out:                         true
        ~ properties.ipConfigurations: [
          ~ 0:
    
            - properties.privateIPAddress: "10.0.0.4"
    
          ]
        x properties.ipConfigurations[0].properties.primary: true
    
      = Microsoft.Compute/virtualMachines/ToyTruckServer [2022-08-01]
        x properties.storageProfile.osDisk.managedDisk.storageAccountType: "Premium_LRS"
    
      = Microsoft.Network/networkSecurityGroups/ToyTruckServer-nsg [2022-05-01]
      = Microsoft.Network/publicIPAddresses/ToyTruckServer-ip [2022-05-01]
      = Microsoft.Network/virtualNetworks/ToyTruck-vnet [2022-05-01]
    
    Resource changes: 1 to delete, 1 to modify, 4 no change.
    

テンプレートをデプロイする

Bicep ファイルが有効であることがわかり、what-if 操作により、テンプレートが想定した結果を提供することが示されています。 これでテンプレートをデプロイする準備が整いました。 このステップが成功した場合、何も起こりません。

  1. Visual Studio Code ターミナルで、次のコマンドを実行します。

    az deployment group create \
      --resource-group ToyTruck \
      --template-file main.bicep \
      --parameters main.parameters.production.json
    
  2. プロンプトが表示されたら、virtualMachineAdminPassword パラメーター値としてセキュリティで保護されたパスワードを入力します。

    数秒以内にデプロイが正常に完了します。

  3. Azure portal で、リソース グループを開きます。 [2 件成功] を選んで、デプロイの一覧を表示します。

    Screenshot of the Azure portal that shows the resource group. The 2 Succeeded link is highlighted.

    デプロイは成功しました。

    Screenshot of the Azure portal that shows the resource group deployments. The successful deployment is highlighted.

  1. Visual Studio Code ターミナルで、次のコマンドを実行します。

    New-AzResourceGroupDeployment `
      -ResourceGroupName ToyTruck `
      -TemplateFile main.bicep `
      -TemplateParameterFile main.parameters.production.json
    
  2. プロンプトが表示されたら、virtualMachineAdminPassword パラメーター値としてセキュリティで保護されたパスワードを入力します。

    数秒以内にデプロイが正常に完了します。

  3. Azure portal で、リソース グループを開きます。 [2 件成功] のリンクを選択して、デプロイの一覧を表示します。

    Screenshot of the Azure portal that shows the resource group. The 2 Succeeded link is highlighted.

    デプロイは成功しました。

    Screenshot of the Azure portal that shows the resource group deployments. The successful deployment is highlighted.

ヒント

実際の移行では、"スモーク テスト" を実行して、リソースが依然として正しく動作していることを確認する必要もあります。 "スモーク テスト" は、意図しない変更を行わなかったことを確認するための最後のチェックです。

リソースのクリーンアップ

これで演習が完了したので、課金されないようにリソースを削除できます。

Visual Studio Code ターミナルで、次のコマンドを実行します。

az group delete --resource-group ToyTruck --yes --no-wait

リソース グループとそのすべてのリソースはバックグラウンドで削除されます。

Remove-AzResourceGroup -Name ToyTruck -Force