ARMテンプレートを使って仮想ネットワークとサブネットをデプロイ

 

Azure仮想ネットワークとサブネットのデプロイをAzure Resource Manager(ARM)テンプレートを使って実施してみました。

仮想ネットワークのデプロイは下記の3つのファイルを使って実施してみました。

    • 仮想ネットワークを定義するARMテンプレート(JSONファイル)
    • 仮想ネットワークのパラメータを指定するCSV
    • テンプレートをデプロイするPower Shell

デプロイはPower Shellを使用し、foreachを利用する事で複数の仮想ネットワークを作れるようにしています。

仮想ネットワークを作成するARMテンプレートはマイクロソフト様サイトと、実際に作成されているARMテンプレートを参考に作成してみました。

https://docs.microsoft.com/ja-jp/azure/virtual-network/template-samples

今回作成したものは GitHub上に公開しています。

https://github.com/Tama-negi/Li-akb-branch-office/tree/PowerShell_Azure/vnet_subnet_deploy_basic_20200504

サブネット単体でのデプロイはこちらに記載しております。

ARMテンプレートを使ってSubnet単体でデプロイしてみた

1 .仮想ネットワークをAzure Portalで作成してみた

ARMテンプレートを作成する前に、まず最初にAzure Portal上で作成してみました。

メニューで仮想ネットワークを選択します。下記画面が表示されますので、追加をクリックします。

仮想ネットワークの作成が表示されますので、名前やデプロイするリージョン等を選択します。

次に、アドレス空間(利用するIPの範囲)の設定になります。併せてサブネット名やサブネットのアドレス空間も指定します。

次に、DDos保護や、ファイアウォールの設定になりますが、通常はそのままでよいです。

次にタグの設定になります。適時設定を行います。

最後に確認画面が表示されますので、作成ボタンをクリックします。仮想ネットワークが作成されます。

今回は、これをARMテンプレート、設定ファイルを指定するCSV、テンプレートのデプロイを行うPower Shellを使う事により、Azure Portalを使わずにデプロイしてみました。

2 .仮想ネットワークのAzure Resource Manager(ARM)テンプレート

今回は、以下のように基本的な設定で作成しています。

    • 仮想ネットーワークと紐づくサブネットは1つとする
    • サービスエンドポイントの指定は行わない
    • TAGを1つ指定する

なおIPv6使用可否、DDoS 保護、ファイアウォール使用可否の指定が可能ですが、今回はデフォルトと同じく利用しないようにしています。

作成したARMテンプレートのサンプルは以下のようになります。

{

    “$schema”: “http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#”,
    “contentVersion”: “1.0.0.0”,
    “parameters”: {
        “vnetName”: {
        “type”: “string”,
        “defaultValue”: “VNet1”,
        “metadata”: {}
        },
        “location”: {
            “type”: “string”,
            “metadata”:{} 
        },
        “addressSpaces”: {
            “type”: “string”,
            “metadata”:{} 
        },
        “subnet_name”: {
            “type”: “string”,
            “metadata”:{} 
        },
        “subnet_addressRange”: {
            “type”: “string”,
            “metadata”:{} 
        },
        “tag_name”: {
            “type”: “string”,
            “defaultValue”: “notag”,
            “metadata”:{} 
        },
        “tag_value”: {
            “type”: “string”,
            “defaultValue”: “notag”,
            “metadata”:{} 
        }
    },
    “variables”: {},
    “resources”: [
        {
            “type”: “Microsoft.Network/VirtualNetworks”,
            “apiVersion”: “2019-09-01”,
            “name”: “[parameters(‘vnetName’)]”,
            “location”: “[parameters(‘location’)]”,
            “tags”:  {
                “[parameters(‘tag_name’)]”:”[parameters(‘tag_value’)]”
            },
            “properties”: {
                “addressSpace”: {
                    “addressPrefixes”: [
                       “[parameters(‘addressSpaces’)]”
               ]
            }
        },
      “resources”: [
        {
            “type”: “subnets”,
            “apiVersion”: “2018-10-01”,
            “location”: “[parameters(‘location’)]”,
            “name”: “[parameters(‘subnet_name’)]”,
            “dependsOn”: [
                “[parameters(‘vnetName’)]”
            ],
            “properties”: {
                “addressPrefix”: “[parameters(‘subnet_addressRange’)]”
           }
        }
      ]
    }
  ]
}

今後、1つではなく複数のサブネットやサブネット単体での作成してを想定して、サブネットは別のリソースで作成するようにしています。

3.仮想ネットワークの設定内容を指定するCSV

仮想ネットワーク を作成する為にCSVから読み込むパラメータは以下の通りになります。リソースグループ名はデプロイ先のリソースグループ名になります。

    • リソースグループ名(ResourceGroupName)
    • リージョン名(location)
    • 仮想ネットワーク名(vnetName)
    • 仮想ネットワークのアドレス空間(IPv4)(addressSpaces)
    • サブネット名(subnet_name)
    • サブネットのアドレス範囲(subnet_addressRange)
    • Tag(tag_name,tag_value)

作成したパラメータCSVファイルのサンプルは以下のようになります。

ResourceGroupName,location,vnetName,addressSpaces,subnet_name,subnet_addressRange,tag_name,tag_value
test-rg,japaneast,test-vnet,192.168.0.0/16,test-subnet,192.168.1.0/24,tag-name,tag-value

仮想ネットワークとサブネットの設定内容に合わせてCSVを作成します。

4. 仮想ネットワークをARMテンプレート+Power Shellでデプロイする

ARMテンプレートのパス、CSVのパスを指定してデプロイを実施します。

#VNET+Subnet Template Deploy

#基本設定

$TemplateFilePath = “テンプレートのファイルパス”
$ImportCSVPath = “CSVファイルのファイルパス”

# Inclued Configure Entries
$csv = Import-Csv -path $ImportCSVPath

# Template Deploy
 foreach( $c in $csv ){

New-AzResourceGroupDeployment `
 -ResourceGroupName $c.ResourceGroupName `
 -TemplateFile $TemplateFilePath `
 -location $c.location `
 -vnetName $c.vnetname `
 -addressSpaces $c.addressSpaces `
 -subnet_name $c.subnet_name `
 -subnet_addressRange $c.subnet_addressRange `
 -tag_name $c.tag_name `
 -tag_value $c.tag_value
}

デプロイが成功すると、以下の通りにProvisioningState : Succeededと表示されます。(ログは途中省略しています。)

DeploymentName : VNET-SUbnet作成(基本編1)_template
ResourceGroupName : test-rg
ProvisioningState : Succeeded
Timestamp : YYYY/MM/DD hh:mm:ss
Mode : Incremental
TemplateLink :
Parameters :
Name Type Value
===================== ========================= ==========
vnetName String test-vnet
location String japaneast
addressSpaces String 192.168.0.0/16
subnet_name String test-subnet
subnet_addressRange String 192.168.1.0/24
tag_name String tag-name
tag_value String tag-value

CSVで指定した値で作成した値で作成されている事が確認できます。