1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Azure】Bicepでデプロイ前に変更内容を確認する方法(what-ifコマンド)

Posted at

1. はじめに

1-1 ご挨拶

初めまして、井村と申します。

Azureリソースを変更した際に、意図しない結果になった経験はありませんか?
そのような結末を防ぐ1つの方法として変更内容を事前に確認することがあげられます。

本記事はBicepにてデプロイを実行する前に、変更を確認する what-if コマンドを使ってみます。

1-2 検証内容

仮想ネットワークおよびサブネットを作成・変更する際に確認コマンドを使ってみます。

2. そもそもBicep とは

Bicepは、Azure向けの宣言型インフラ構成言語です。Microsoftが開発したもので、従来のARMテンプレート(JSON形式)よりも簡潔で読みやすい構文を提供します。
以下画像は左がBicep、右がARMテンプレートになります。

000_0.png

公式ドキュメントより
For example, you can view the file to deploy a SQL server and database. The Bicep is about half the size of the ARM template.

3. 準備

3-1 リソースグループの作成

公式ドキュメントに沿って Azure CLIVisual Studio Code と Bicep 拡張機能をインストールします。
上記終了後、Azure上にリソースを作成します。

1 . Azureへログイン

Azure上にリソースを作成するためログインします。

Azure CLI
az login

現在ログインしているAzureサブスクリプションを確認するには、以下のAzure CLIコマンドを使用します

Azure CLI
az account show

2 . リソースグループの作成

東日本リージョンで作成します。

Azure CLI
az group create --name rg-demo-dev --location japaneast

Azure上にリソースグループが作成されました。

001.png

4. 検証

4-1 仮想ネットワークの作成

1 . Bicepの準備

今回利用するBicep以下になります。

vnet.bicep
vnet.bicep
@description('作成するシステム名を指定します。')
param systemName string = 'demo'
@description('リソースグループのロケーション。今回は東日本リージョン (Japan East) を指定します。')
param location string = 'japaneast'

@allowed([
  'dev'
  'stg'
  'pro'
])
@description('環境を指定します。dev, stg, pro のいずれかを選択してください。')
param env string = 'dev'

@description('仮想ネットワークのアドレスプレフィックス(例: 10.0.0.0/16)')
param addressPrefixes array = [
  '10.0.0.0/16'
]

@description('仮想ネットワークの名前。')
var vnetName = 'vnet-${systemName}-${env}'

@description('作成するサブネットの一覧。各サブネットに名前とアドレスプレフィックスを指定します。')
var subnets = [
  {
    name: 'AzureFirewallSubnet' // Azure Firewall 用の予約サブネット名
    subnetPrefix: '10.0.0.0/26'
  }
  {
    name: 'snet-public'
    subnetPrefix: '10.0.1.0/24'
  }
]

@description('仮想ネットワークのリソース定義')
resource vnet 'Microsoft.Network/virtualNetworks@2023-11-01' = {
  name: vnetName
  location: location
  properties: {
    addressSpace: {
      addressPrefixes: addressPrefixes
    }
    subnets: [for subnet in subnets: {
      name: subnet.name
      properties: {
        addressPrefix: subnet.subnetPrefix
      }
    }]
  }
}

2 . 検証1回目

what-if コマンドでデプロイするリソースを確認します。

Azure CLI
az deployment group what-if --name first-deploy --template-file vnet.bicep --resource-group rg-demo-dev

色が表示されるのでわかりやすいです。

Createは緑色で表示されます。

002.png

3 . 仮想ネットワークのデプロイ

以下コマンドでデプロイします。

Azure CLI
az deployment group create --name first-deploy --template-file vnet.bicep --resource-group rg-demo-dev

コンソール画面にて仮想ネットワークのデプロイを確認できました。
ログを確認します。

003.png

Deployment What-Ifがあることは知りませんでした。実際の差分を確認します。赤枠を選択後、変更履歴をクリックします。

004.png

左が変更前、右が変更後になります。空のリソースグループ内に仮想ネットワークおよびサブネットが作成されたことを確認することができます。

005.png

サブネットは以下の通りです。

006_2.png

5. 検証2

次はBicepを修正してデプロイします。

5-1 仮想ネットワークの作成

1 . Bicepの準備

今回利用するBicep以下になります。

vnet.bicep
vnet.bicep
@description('作成するシステム名を指定します。')
param systemName string = 'demo'
@description('リソースグループのロケーション。今回は東日本リージョン (Japan East) を指定します。')
param location string = 'japaneast'

@allowed([
  'dev'
  'stg'
  'pro'
])
@description('環境を指定します。dev, stg, pro のいずれかを選択してください。')
param env string = 'dev'

@description('仮想ネットワークのアドレスプレフィックス(例: 10.0.0.0/16)')
param addressPrefixes array = [
  '10.0.0.0/16'
]

@description('仮想ネットワークの名前。')
var vnetName = 'vnet-${systemName}-${env}'

@description('作成するサブネットの一覧。各サブネットに名前とアドレスプレフィックスを指定します。')
var subnets = [
  {
    name: 'snet-private'
    subnetPrefix: '10.0.1.0/24'
  }
]

@description('仮想ネットワークのリソース定義')
resource vnet 'Microsoft.Network/virtualNetworks@2023-11-01' = {
  name: vnetName
  location: location
  properties: {
    addressSpace: {
      addressPrefixes: addressPrefixes
    }
    subnets: [for subnet in subnets: {
      name: subnet.name
      properties: {
        addressPrefix: subnet.subnetPrefix
      }
    }]
  }
}

前回との差分は以下の通りです。

  • AzureFirewallSubnetサブネットの削除
  • snet-publicサブネットからsnet-privateサブネットへの名前変更
Azure CLI
az deployment group create --name second-deploy --template-file vnet.bicep --resource-group rg-demo-dev

結果は以下の通りです。

Createは緑色で表示されます。
Deleteは橙色で表示されます。
Modifyは紫色で表示されます。

007.png

なるほど。自分の認識とは少し違いました。

  • 変更内容:
    • 既存のサブネット "AzureFirewallSubnet":
      • 名前が "snet-private" に変更される
      • アドレスプレフィックスも "10.0.1.0/24" に変更される
      • → これは、既存のサブネットを再利用して名前と範囲を変更する
    • 既存のサブネット "snet-public":
      • テンプレートに存在しないため、削除される

サブネットの配列として[0]が更新(削除→作成)、[1]が削除されるかな。

3 . 仮想ネットワークのデプロイ

以下コマンドでデプロイします。

Azure CLI
az deployment group create --name second-deploy --template-file vnet.bicep --resource-group rg-demo-dev

リソースが更新されていることを確認できました。

008_2.png

6. 終わりに

本記事を最後まで読んで頂きましてありがとうございます。
デプロイ前に確認コマンドを実行することを習慣化したいですね。

7. 参考

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?