ARMテンプレートを使ってサブネットをデプロイ
既存の仮想ネットワークへのサブネットデプロイをAzure Resource Manager(ARM)テンプレート+Power Shellでやってみました。
パラメータをCSVから分けて読み込むようにする事で、デプロイ先の仮想ネットワークを別にしたり、複数のサブネットを纏めてを作れるようにしてみました。
サブネットのデプロイは下記の3つのファイルで実施しています。
-
- サブネットを定義するARMテンプレート(JSONファイル)
- パラメータを指定するCSV
- テンプレートをデプロイするPower Shell
今回作成したものはGitHubにも公開しております。
仮想ネットワークのARMテンプレートを使ったデプロイに関してはこちら。
Azure Portalで既存仮想ネットワーク(VNET) へサブネットを追加
Azure Portal上でサブネットを追加するのは、仮想ネットワークのメニューになります。
メニューで仮想ネットワーク>サブネットと選びます。そうすると+サブネットが表示されますをクリックすると下記のような画面が表示されます。
名前やサブネットのアドレスレンジやNSGを選択した後にOKボタンをクリックすると、仮想ネットワークに対して、サブネットが作成されます。
今回はこの作業と同等の作業をARMテンプレートやパラメータ指定するCSVを使ってやってみます。ARMテンプレートのデプロイはAzure Portalを使用せずにPower Shellでデプロイしています。
サブネットのAzure Resource Manager(ARM)テンプレート
今回は、基本的な設定で確認する為に、以下の条件で設定で作成してみました。
-
- サービスエンドポイントの指定は行わない
- NSGを指定する
作成したサブネット単体でのARMテンプレートのサンプルは以下のようになります。
{{
“$schema": “http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
“contentVersion": “1.0.0.0",
“parameters": {
“location": {
“type": “string",
“metadata":{}
},
“vnetName": {
“type": “string",
“metadata": {}
},
“subnet_name": {
“type": “string",
“metadata":{}
},
“subnet_addressRange": {
“type": “string",
“metadata":{}
},
“NSG_Name": {
“type": “string",
“metadata":{}
}
},
“variables": {
“NSG_ID":"[resourceId('Microsoft.Network/networkSecurityGroups’, parameters('NSG_Name’))]",
“privateEndpointNetworkPolicies":"Enabled",
“privateLinkServiceNetworkPolicies":"Enabled"
},
“resources": [
{
“type": “Microsoft.Network/virtualNetworks/subnets",
“apiVersion": “2018-10-01",
“location": “[parameters('location’)]",
“name": “[concat(parameters('vnetName’) ,’/’,parameters('subnet_name’))]",
“properties": {
“addressPrefix": “[parameters('subnet_addressRange’)]",
“networkSecurityGroup": {
“id": “[variables('NSG_ID’)]"
},
“serviceEndpoints": [],
“delegations": [],
“privateEndpointNetworkPolicies": “[variables('privateEndpointNetworkPolicies’)]",
“privateLinkServiceNetworkPolicies": “[variables('privateLinkServiceNetworkPolicies’)]"
}
}
]
}
|
ARMテンプレート作成時にドはまりしました。嵌ったのは2点あります。
1つ目は、サブネットのNameは、仮想ネットワーク名/サブネット名で作成する必要がありました。
“name": “[concat(parameters('vnetName’) ,’/’,parameters('subnet_name’))]",
contactを使用する事で、仮想ネットワーク名/サブネット名となるようにしています
2つ目は、depends Onで仮想ネットワークをアタッチしない点になります。
depends Onで仮想ネットワークをアタッチするようなサンプルが多く見かけたのですが、この方法で実施すると、同じ仮想ネットワークに複数のサブネットをデプロイ出来ませんでした。最後のサブネットで上書きされてしまい結果、1つのサブネットしか出来ない形になってしまいました。
サブネット設定用のパラメータCSVを作成
サブネット を作成する為にCSVから読み込むパラメータは以下の通りになります。リソースグループ名はデプロイ先のリソースグループ名になります。
-
- リソースグループ名(ResourceGroupName)
- リージョン名(location)
- 仮想ネットワーク名(vnetName)
- サブネット名(subnet_name)
- サブネットのアドレス範囲(subnet_addressRange)
- ネットワークセキュリティグループ名(NSG_name)
パラメータCSVのサンプルは以下のようになります。
ResourceGroupName,location,vnetName,subnet_name,subnet_addressRange,NSG_name, |
サブネットの設定内容に合わせてCSVを作成します。
ARMテンプレート+Power Shell使ってサブネットをデプロイ
ARMテンプレートのパス、CSVのパスを指定してデプロイを実施します。
#Subnet Template Deploy #基本設定(SubnetのNSGを指定する) $TemplateFilePath = “テンプレートのファイルパス" # Inclued Configure Entries # Template Deploy New-AzResourceGroupDeployment ` |
デプロイが成功すると、以下の通りにProvisioningState : Succeededと表示されます。(ログは途中省略しています。)
ResourceGroupName : デプロイ先のリソースグループ名 ===================== ========================= ========== |
CSVで指定した値で作成した値で作成されている事が確認できます。
※ARMテンプレート作成時にドはまりした時に、マイクロソフトサポート様に助けて頂きました。本当に有難うございました。