演習 - What-If コマンドを使用して変更をプレビューする
Note
初めてサンドボックスをアクティブ化して利用規約に同意すると、Microsoft アカウントが Microsoft Learn Sandbox という名前の新しい Azure ディレクトリに関連付けられます。 また、コンシェルジェ サブスクリプションという名前の特殊なサブスクリプションにも追加されます。
あなたは、勤務先のおもちゃ会社の設計チームから、仮想ネットワークを構成するテンプレートの更新を依頼されました。 このユニットでは、What-If を使用して、更新されたテンプレートをデプロイした場合の影響を検証します。
このプロセスでは、次のことを行います。
- 初期テンプレートを作成してデプロイします。
- 少し異なるテンプレートをデプロイするための準備を行い、What-If 操作を使用して、予想される変更を確認します。
- 完全なデプロイを使用して空のテンプレートをデプロイし、what-if 操作を使用して予想される変更を確認します。
この演習では、Azure Resource Manager Tools for Visual Studio Code を使用します。 この拡張機能を Visual Studio Code にインストールしてください。
この演習では、Visual Studio Code 用の Bicep 拡張機能を使用します。 この拡張機能を Visual Studio Code にインストールしてください。
出発点となるテンプレートを作成する
チームが使用している既存のテンプレートを使用して開始します。 このテンプレートは、仮想ネットワークを作成します。
Visual Studio Code を開きます。
azuredeploy.json という名前の新しいファイルを作成します。
Visual Studio Code によって ARM テンプレート ツールが読み込まれるように、空のファイルを保存します。
[ファイル]>[名前を付けて保存] を選択するか、Windows で Ctrl+S (macOS では ⌘+S) を選択できます。 ファイルを保存した場所を忘れないようにしてください。 たとえば、保存場所として、scripts フォルダーを作成することをお勧めします。
次のコードを azuredeploy.json にコピーします。
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": {}, "variables": {}, "resources": [ { "apiVersion": "2024-01-01", "type": "Microsoft.Network/virtualNetworks", "name": "vnet-001", "location": "[resourceGroup().location]", "tags": { "CostCenter": "12345", "Owner": "Team A" }, "properties": { "addressSpace": { "addressPrefixes": [ "10.0.0.0/16" ] }, "enableVmProtection": false, "enableDdosProtection": false, "subnets": [ { "name": "subnet001", "properties": { "addressPrefix": "10.0.0.0/24" } }, { "name": "subnet002", "properties": { "addressPrefix": "10.0.1.0/24" } } ] } } ] }
テンプレートを保存します。
Visual Studio Code を開きます。
main.bicep という名前の新しいファイルを作成します。
Visual Studio Code によって Bicep ツールが読み込まれるように、空のファイルを保存します。
[ファイル]>[名前を付けて保存] を選択するか、Windows で Ctrl+S (macOS では ⌘+S) を選択できます。 ファイルを保存した場所を忘れないようにしてください。 たとえば、保存場所として、scripts フォルダーを作成することをお勧めします。
次のコードを main.bicep にコピーします。
resource vnet 'Microsoft.Network/virtualNetworks@2024-01-01' = { name: 'vnet-001' location: resourceGroup().location tags: { 'CostCenter': '12345' 'Owner': 'Team A' } properties: { addressSpace: { addressPrefixes: [ '10.0.0.0/16' ] } enableVmProtection: false enableDdosProtection: false subnets: [ { name: 'subnet001' properties: { addressPrefix: '10.0.0.0/24' } } { name: 'subnet002' properties: { addressPrefix: '10.0.1.0/24' } } ] } }
テンプレートを保存します。
テンプレートを Azure にデプロイする
このテンプレートを Azure にデプロイするには、Visual Studio Code ターミナルから Azure アカウントにサインインします。 Azure PowerShell をインストールしたことを確認し、サンドボックスをアクティブ化したのと同じアカウントにサインインします。
[ターミナル] メニューで、[新しいターミナル] を選択します。 通常、ターミナル ウィンドウは画面の下半分に表示されます。
ターミナル ウィンドウの右側に表示されるシェルが powershell または pwsh の場合、正しいシェルが開いているので、次のセクションに進むことができます。
Powershell または pwsh 以外のシェルが表示された場合は、シェルのドロップダウン矢印を選択し、[PowerShell] を選びます。
ターミナル シェルの一覧で、Powershell または pwsh を選択します。
ターミナルで、テンプレートを保存したディレクトリに移動します。 たとえば、それをテンプレート フォルダーに保存した場合、次のコマンドを使用します。
Set-Location -Path templates
Bicep CLI のインストール
Azure PowerShell で Bicep を使用するには、Bicep CLI をインストールします。
Azure PowerShell を使用して Azure にサインインする
Visual Studio Code ターミナルで、次のコマンドを実行します。
Connect-AzAccount
ブラウザーが開き、Azure アカウントにサインインできるようになります。
Azure にサインインすると、ターミナルに、このアカウントに関連付けられているサブスクリプションの一覧が表示されます。
サンドボックスをアクティブにした場合は、"コンシェルジェ サブスクリプション" という名前のサブスクリプションが表示されます。 演習の残りの部分では、これを使用します。
このセッションで実行するすべての Azure PowerShell コマンドについて既定のサブスクリプションを設定します。
$context = Get-AzSubscription -SubscriptionName 'Concierge Subscription' Set-AzContext $context
注意
最近、複数のサンドボックスを使用した場合、ターミナルに、"コンシェルジェ サブスクリプション" の複数のインスタンスが表示される場合があります。 その場合は、次の 2 つのステップを使用して、1 つを既定のサブスクリプションとして設定します。 上記のコマンドが正常に実行され、1 つの "コンシェルジェ サブスクリプション" のみがリストされたら、次の 2 つのステップをスキップします。
サブスクリプション ID を取得します。 次のコマンドを実行すると、ご使用のサブスクリプションとその ID が一覧表示されます。
Concierge Subscription
を探して、2 番目の列から ID をコピーします。 これは、aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e
のように表示されます。Get-AzSubscription
アクティブなサブスクリプションを "コンシェルジェ サブスクリプション" に変更します。 必ず、"{ご使用のサブスクリプションの ID}" を、コピーした ID に置き換えてください。
$context = Get-AzSubscription -SubscriptionId {Your subscription ID} Set-AzContext $context
既定のリソース グループを設定する
この演習では、既定のリソース グループを設定し、残りの Azure PowerShell コマンドからパラメーターを省略できます。 サンドボックス環境で自分用に作成されたリソース グループに、この既定値を設定します。
Set-AzDefault -ResourceGroupName <rgn>[sandbox resource group name]</rgn>
このテンプレートを Azure にデプロイするには、Visual Studio Code ターミナルから Azure アカウントにサインインする必要があります。 Azure CLI がインストールされていることを確認し、サンドボックスのアクティブ化に使用したのと同じアカウントでサインインします。
[ターミナル] メニューで、[新しいターミナル] を選択します。 通常、ターミナル ウィンドウは画面の下半分に表示されます。
ターミナル ウィンドウの右側に表示されるシェルが Bash の場合、正しいシェルが開いているので、次のセクションに進むことができます。
Bash 以外のシェルが表示された場合は、シェルのドロップダウン矢印を選択した後、[Azure Cloud Shell (Bash)] を選択します。
ターミナル シェルの一覧で、Bash を選択します。
ターミナルで、テンプレートを保存したディレクトリに移動します。 たとえば、それをテンプレート フォルダーに保存した場合、次のコマンドを使用します。
cd templates
Bicep をインストールする
次のコマンドを実行して、最新バージョンの Bicep がインストールされていることを確認します。
az bicep install && az bicep upgrade
Azure へのサインイン
Visual Studio Code ターミナルで、次のコマンドを実行して Azure にサインインします。
az login
開いたブラウザーで、Azure アカウントにサインインします。
Visual Studio Code ターミナルには、このアカウントに関連付けられているサブスクリプションの一覧が表示されます。
このセッションで実行するすべての Azure CLI コマンドに対して、既定のサブスクリプションを設定します。
az account set --subscription "Concierge Subscription"
注意
最近、複数のサンドボックスを使用した場合、ターミナルに、"コンシェルジェ サブスクリプション" の複数のインスタンスが表示される場合があります。 その場合は、次の 2 つのステップを使用して、1 つを既定のサブスクリプションとして設定します。 上記のコマンドが正常に実行され、1 つの "コンシェルジェ サブスクリプション" のみがリストされたら、次の 2 つのステップをスキップします。
コンシェルジェ サブスクリプションの ID を取得します。
az account list \ --refresh \ --query "[?contains(name, 'Concierge Subscription')].id" \ --output table
サブスクリプション ID を使用して、既定のサブスクリプションを設定します。 {your subscription ID} を最新のコンシェルジェ サブスクリプション ID に置き換えます。
az account set --subscription {your subscription ID}
既定のリソース グループを設定する
Azure CLI を使用する場合は、既定のリソース グループを設定し、この演習の残りの Azure CLI コマンドでパラメーターを省略できます。 サンドボックス環境で自分用に作成されたリソース グループに、既定値を設定します。
az configure --defaults group="<rgn>[sandbox resource group name]</rgn>"
このテンプレートを Azure にデプロイするには、Visual Studio Code ターミナルから Azure アカウントにサインインします。 Azure PowerShell をインストールしたことを確認し、サンドボックスをアクティブ化したのと同じアカウントにサインインします。
[ターミナル] メニューで、[新しいターミナル] を選択します。 通常、ターミナル ウィンドウは画面の下半分に表示されます。
ターミナル ウィンドウの右側に表示されるシェルが powershell または pwsh の場合、正しいシェルが開いているので、次のセクションに進むことができます。
Powershell または pwsh 以外のシェルが表示された場合は、シェルのドロップダウン矢印を選択し、[PowerShell] を選びます。
ターミナル シェルの一覧で、Powershell または pwsh を選択します。
ターミナルで、テンプレートを保存したディレクトリに移動します。 たとえば、それをテンプレート フォルダーに保存した場合、次のコマンドを使用します。
Set-Location -Path templates
Azure PowerShell を使用して Azure にサインインする
Visual Studio Code ターミナルで、次のコマンドを実行します。
Connect-AzAccount
ブラウザーが開き、Azure アカウントにサインインできるようになります。
Azure にサインインすると、ターミナルに、このアカウントに関連付けられているサブスクリプションの一覧が表示されます。
サンドボックスをアクティブにした場合は、"コンシェルジェ サブスクリプション" という名前のサブスクリプションが表示されます。 演習の残りの部分では、これを使用します。
このセッションで実行するすべての Azure PowerShell コマンドについて既定のサブスクリプションを設定します。
$context = Get-AzSubscription -SubscriptionName 'Concierge Subscription' Set-AzContext $context
注意
最近、複数のサンドボックスを使用した場合、ターミナルに、"コンシェルジェ サブスクリプション" の複数のインスタンスが表示される場合があります。 その場合は、次の 2 つのステップを使用して、1 つを既定のサブスクリプションとして設定します。 上記のコマンドが正常に実行され、1 つの "コンシェルジェ サブスクリプション" のみがリストされたら、次の 2 つのステップをスキップします。
サブスクリプション ID を取得します。 次のコマンドを実行すると、ご使用のサブスクリプションとその ID が一覧表示されます。
Concierge Subscription
を探して、2 番目の列から ID をコピーします。 これは、aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e
のように表示されます。Get-AzSubscription
アクティブなサブスクリプションを "コンシェルジェ サブスクリプション" に変更します。 必ず、"{ご使用のサブスクリプションの ID}" を、コピーした ID に置き換えてください。
$context = Get-AzSubscription -SubscriptionId {Your subscription ID} Set-AzContext $context
既定のリソース グループを設定する
この演習では、既定のリソース グループを設定し、残りの Azure PowerShell コマンドからパラメーターを省略できます。 サンドボックス環境で自分用に作成されたリソース グループに、この既定値を設定します。
Set-AzDefault -ResourceGroupName <rgn>[sandbox resource group name]</rgn>
このテンプレートを Azure にデプロイするには、Visual Studio Code ターミナルから Azure アカウントにサインインする必要があります。 Azure CLI がインストールされていることを確認し、サンドボックスのアクティブ化に使用したのと同じアカウントでサインインします。
[ターミナル] メニューで、[新しいターミナル] を選択します。 通常、ターミナル ウィンドウは画面の下半分に表示されます。
ターミナル ウィンドウの右側に表示されるシェルが Bash の場合、正しいシェルが開いているので、次のセクションに進むことができます。
Bash 以外のシェルが表示された場合は、シェルのドロップダウン矢印を選択した後、[Azure Cloud Shell (Bash)] を選択します。
ターミナル シェルの一覧で、Bash を選択します。
ターミナルで、テンプレートを保存したディレクトリに移動します。 たとえば、それをテンプレート フォルダーに保存した場合、次のコマンドを使用します。
cd templates
Azure へのサインイン
Visual Studio Code ターミナルで、次のコマンドを実行して Azure にサインインします。
az login
開いたブラウザーで、Azure アカウントにサインインします。
Visual Studio Code ターミナルには、このアカウントに関連付けられているサブスクリプションの一覧が表示されます。
このセッションで実行するすべての Azure CLI コマンドに対して、既定のサブスクリプションを設定します。
az account set --subscription "Concierge Subscription"
注意
最近、複数のサンドボックスを使用した場合、ターミナルに、"コンシェルジェ サブスクリプション" の複数のインスタンスが表示される場合があります。 その場合は、次の 2 つのステップを使用して、1 つを既定のサブスクリプションとして設定します。 上記のコマンドが正常に実行され、1 つの "コンシェルジェ サブスクリプション" のみがリストされたら、次の 2 つのステップをスキップします。
コンシェルジェ サブスクリプションの ID を取得します。
az account list \ --refresh \ --query "[?contains(name, 'Concierge Subscription')].id" \ --output table
サブスクリプション ID を使用して、既定のサブスクリプションを設定します。 {your subscription ID} を最新のコンシェルジェ サブスクリプション ID に置き換えます。
az account set --subscription {your subscription ID}
既定のリソース グループを設定する
Azure CLI を使用する場合は、既定のリソース グループを設定し、この演習の残りの Azure CLI コマンドでパラメーターを省略できます。 サンドボックス環境で自分用に作成されたリソース グループに、既定値を設定します。
az configure --defaults group="<rgn>[sandbox resource group name]</rgn>"
Azure PowerShell を使用してテンプレートをデプロイする
New-AzResourceGroupDeployment
を実行して、テンプレートをデプロイします。
New-AzResourceGroupDeployment -TemplateFile main.bicep
ターミナルに [実行中...] というテキストが表示されます。 デプロイが完了するまで 1 - 2 分かかります。
Azure PowerShell を使用してテンプレートをデプロイする
New-AzResourceGroupDeployment
を実行して、テンプレートをデプロイします。
New-AzResourceGroupDeployment -TemplateFile azuredeploy.json
ターミナルに [実行中...] というテキストが表示されます。 デプロイが完了するまで 1 - 2 分かかります。
Azure CLI を使用してテンプレートをデプロイする
az deployment group create
を実行して、テンプレートをデプロイします。
az deployment group create --template-file main.bicep
デプロイが完了するまで 1 - 2 分かかります。
Azure CLI を使用してテンプレートをデプロイする
az deployment group create
を実行して、テンプレートをデプロイします。
az deployment group create --template-file azuredeploy.json
デプロイが完了するまで 1 - 2 分かかります。
デプロイを検証する
デプロイが作成され、Azure に送信されたことを検証するには、Azure portal に移動し、サンドボックス サブスクリプション内にいることを確認します。
ページの上部隅にある自分のアバターを選択します。
[ディレクトリの切り替え] を選択します。 一覧で、[Microsoft Learn サンドボックス] ディレクトリを選択します。
[リソース グループ] を選択します。
[サンドボックス リソース グループ名] を選択します。[概要] に、1 つのデプロイが成功したことが表示されます。
[1 Succeeded] (1 件の成功) を選択して、デプロイの詳細を確認します。
デプロイされたリソースを確認するには、[メイン] デプロイを選択します。 この例では、1 つの仮想ネットワーク (アドレス空間 10.0.0.0/16) と 2 つのサブネットがデプロイされています。
後でデプロイをもう一度チェックできるように、ブラウザーでページを開いたままにします。
テンプレートの変更
Visual Studio Code で、azuredeploy.json ファイル内の
Owner
という名前のタグとその値を削除します。 完了すると、仮想ネットワークのtags
プロパティは、次のようになります。"tags": { "CostCenter": "12345" },
addressPrefixes
を更新して、/16
を/15
に変更します。 完了すると、仮想ネットワークのaddressSpace
プロパティは、次のようになります。"addressSpace": { "addressPrefixes": [ "10.0.0.0/15" ] },
subnet001
という名前のサブネットを削除します。 サブネット オブジェクト全体が削除されていることを確認します。 完了すると、仮想ネットワークのsubnets
プロパティは、次のようになります。"subnets": [ { "name": "subnet002", "properties": { "addressPrefix": "10.0.1.0/24" } } ]
テンプレートを保存します。
Visual Studio Code で、main.bicep ファイル内の
Owner
という名前のタグとその値を削除します。 完了すると、仮想ネットワークのtags
プロパティは、次のようになります。tags: { 'CostCenter': '12345' }
addressPrefixes
を更新して、/16
を/15
に変更します。 完了すると、仮想ネットワークのaddressSpace
プロパティは、次のようになります。addressSpace: { addressPrefixes: [ '10.0.0.0/15' ] }
subnet001
という名前のサブネットを削除します。 サブネット オブジェクト全体が削除されていることを確認します。 完了すると、仮想ネットワークのsubnets
プロパティは、次のようになります。subnets: [ { name: 'subnet002' properties: { addressPrefix: '10.0.1.0/24' } } ]
テンプレートを保存します。
変更したテンプレートを使用して What-If コマンドを実行する
-WhatIf
フラグを指定して New-AzResourceGroupDeployment
を実行し、What-If 操作を実行します。
New-AzResourceGroupDeployment `
-WhatIf `
-TemplateFile main.bicep
-WhatIf
フラグを指定して New-AzResourceGroupDeployment
を実行し、What-If 操作を実行します。
New-AzResourceGroupDeployment `
-WhatIf `
-TemplateFile azuredeploy.json
az deployment group what-if
を実行して、What-If 操作を実行します。
az deployment group what-if \
--template-file main.bicep
az deployment group what-if
を実行して、What-If 操作を実行します。
az deployment group what-if \
--template-file azuredeploy.json
What-If の出力は、次のようになります。
結果にはプレフィックスが付けられているだけでなく、色分けされている点に注目してください。
- 紫と ~ は、変更を示します
- 緑と + は、作成される新しいリソースを示します
- オレンジと - は、削除を示します
テンプレート内のリソースを削除する
Visual Studio Code で azuredeploy.json ファイルを更新して、
resources
配列のすべての内容を削除します。 完了すると、テンプレートは次のようになります。{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "resources": [ ] }
テンプレートを保存します。
Visual Studio Code で、main.bicep 内のすべての内容を削除します。ただし、ファイル自体は削除しないでください。
テンプレートを保存します。
完全モードと確認オプションを使用してデプロイする
次の手順では、既存の環境に空のテンプレートをデプロイします。
警告
この操作を実際に行うと、クラウド内にあるすべてのものが "削除されます"。 以下のコードは、知的実験として興味深いものですが、このモードの使用については注意が必要です。 少なくとも、-Confirm
フラグを使用して、提案された変更を望まない場合にこの操作を停止できるようにしてください。
警告
この操作を実際に行うと、クラウド内にあるすべてのものが "削除されます"。 以下のコードは、知的実験として興味深いものですが、このモードの使用については注意が必要です。 少なくとも、--confirm-with-what-if
フラグを使用して、提案された変更を望まない場合にこの操作を停止できるようにしてください。
-Mode Complete
フラグを指定してNew-AzResourceGroupDeployment
を実行し、デプロイを完全モードで実行します。New-AzResourceGroupDeployment ` -Mode Complete ` -Confirm ` -TemplateFile main.bicep
出力は、次のようになります。
出力の最後の行が確認であることに注意してください。 続行するかどうかについて、y または n を選択するよう求められています。
[A] Yes to All の場合、「A」と入力して、デプロイを実行し、環境を消去します。
-Mode Complete
フラグを指定してNew-AzResourceGroupDeployment
を実行し、デプロイを完全モードで実行します。New-AzResourceGroupDeployment ` -Mode Complete ` -Confirm ` -TemplateFile azuredeploy.json
出力は、次のようになります。
出力の最後の行が確認であることに注意してください。 続行するかどうかについて、y または n を選択するよう求められています。
[A] Yes to All の場合、「A」と入力して、デプロイを実行し、環境を消去します。
フラグ
--mode Complete
を指定してaz deployment group create
を実行し、完全モードでデプロイを作成します。az deployment group create \ --mode Complete \ --confirm-with-what-if \ --template-file main.bicep
出力は、次のようになります。
出力の最後の行が確認であることに注意してください。 続行するかどうかについて、y または n を選択するよう求められています。
「y」 ("yes" を表す) と入力して、デプロイを実行し、環境を消去します。
フラグ
--mode Complete
を指定してaz deployment group create
を実行し、完全モードでデプロイを作成します。az deployment group create \ --mode Complete \ --confirm-with-what-if \ --template-file azuredeploy.json
出力は、次のようになります。
出力の最後の行が確認であることに注意してください。 続行するかどうかについて、y または n を選択するよう求められています。
「y」 ("yes" を表す) と入力して、デプロイを実行し、環境を消去します。
デプロイを検証する
前に使用していた開いているブラウザーに戻ります。 次のスクリーンショットのように、仮想ネットワークが存在しなくなったことを確認します。