1. はじめに
1-1 ご挨拶
初めまして、井村と申します。
Azureリソースを変更した際に、意図しない結果になった経験はありませんか?
そのような結末を防ぐ1つの方法として変更内容を事前に確認することがあげられます。
本記事はBicepにてデプロイを実行する前に、変更を確認する what-if コマンドを使ってみます。
1-2 検証内容
仮想ネットワークおよびサブネットを作成・変更する際に確認コマンドを使ってみます。
2. そもそもBicep とは
Bicepは、Azure向けの宣言型インフラ構成言語です。Microsoftが開発したもので、従来のARMテンプレート(JSON形式)よりも簡潔で読みやすい構文を提供します。
以下画像は左がBicep、右がARMテンプレートになります。
公式ドキュメントより
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 CLI、Visual Studio Code と Bicep 拡張機能をインストールします。
上記終了後、Azure上にリソースを作成します。
1 . Azureへログイン
Azure上にリソースを作成するためログインします。
az login
現在ログインしているAzureサブスクリプションを確認するには、以下のAzure CLIコマンドを使用します
az account show
2 . リソースグループの作成
東日本リージョンで作成します。
az group create --name rg-demo-dev --location japaneast
Azure上にリソースグループが作成されました。
4. 検証
4-1 仮想ネットワークの作成
1 . Bicepの準備
今回利用する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 コマンドでデプロイするリソースを確認します。
az deployment group what-if --name first-deploy --template-file vnet.bicep --resource-group rg-demo-dev
色が表示されるのでわかりやすいです。
Createは緑色で表示されます。
3 . 仮想ネットワークのデプロイ
以下コマンドでデプロイします。
az deployment group create --name first-deploy --template-file vnet.bicep --resource-group rg-demo-dev
コンソール画面にて仮想ネットワークのデプロイを確認できました。
ログを確認します。
Deployment What-Ifがあることは知りませんでした。実際の差分を確認します。赤枠を選択後、変更履歴をクリックします。
左が変更前、右が変更後になります。空のリソースグループ内に仮想ネットワークおよびサブネットが作成されたことを確認することができます。
サブネットは以下の通りです。
5. 検証2
次はBicepを修正してデプロイします。
5-1 仮想ネットワークの作成
1 . Bicepの準備
今回利用する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サブネットへの名前変更
az deployment group create --name second-deploy --template-file vnet.bicep --resource-group rg-demo-dev
結果は以下の通りです。
Createは緑色で表示されます。
Deleteは橙色で表示されます。
Modifyは紫色で表示されます。
なるほど。自分の認識とは少し違いました。
- 変更内容:
- 既存のサブネット "AzureFirewallSubnet":
- 名前が "snet-private" に変更される
- アドレスプレフィックスも "10.0.1.0/24" に変更される
- → これは、既存のサブネットを再利用して名前と範囲を変更する
- 既存のサブネット "snet-public":
- テンプレートに存在しないため、削除される
- 既存のサブネット "AzureFirewallSubnet":
サブネットの配列として[0]が更新(削除→作成)、[1]が削除されるかな。
3 . 仮想ネットワークのデプロイ
以下コマンドでデプロイします。
az deployment group create --name second-deploy --template-file vnet.bicep --resource-group rg-demo-dev
リソースが更新されていることを確認できました。
6. 終わりに
本記事を最後まで読んで頂きましてありがとうございます。
デプロイ前に確認コマンドを実行することを習慣化したいですね。