ARMテンプレートを使ってAzureパブリックIPをデプロイ

 

AzureのパブリックIP作成を、Azure Resource Manager(ARM)テンプレート使ってやってみました。

AzureのパブリックIPはAzureの各リソース(Azure仮想マシンやApplication Gateway等)がインターネットと通信する為に使用されます。

多くの場合は、インターネットにアクセスするリソース作成時に合わせて作成することも可能ですが、今回はAzureパブリックIPを単体で作成してみました。

パブリックIPに関する詳細はマイクロソフト様のサイトで確認できます。

https://docs.microsoft.com/ja-jp/azure/virtual-network/virtual-network-ip-addresses-overview-arm#public-ip-addresses

Azure Resource Manager(ARM)テンプレートを使ってデプロイするにあたっては、以下の3つのファイルを作成しています。

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

複数のパブリックIPを纏めてを作れるようにしてみました。

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

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

1 .Azure Portal上でパブリックIPを新規作成する

Azure Portal上のすべてのサービスで、パブリックIPと入力するとパブリックIPのメニューが表示されれます。追加をクリックします。

パブリックIPの作成画面が表示されます。

一般的な使い方で指定するのは、以下の内容になるかと思います。実際に利用するリソースに合わせて設定します。

    • 名前
    • DNS 名ラベル
    • リソースグループ
    • 場所(リージョン)

IPアドレスの割り当てを動的にすると、関連付けたリソースの再起動等によりIPアドレス変わる可能性があります。
DNS名ラベルを指定しておくと名前解決をしてくれます。
IPアドレスが変更されてもDNS名ラベルで指定した名前で常にアクセスできます。

すべて入力した後に作成をクリックすると、作成されます。(確認画面は表示されません。)

.パブリックIPのAzure Resource Manager(ARM)テンプレート

今回は、基本的な設定で確認する為に、以下の条件で設定で作成してみました。

      • IPバージョン、SKU、アイドルタイムアウトは固定値としています
      • 固定値はARMテンプレート内のvariablesで定義してみました
        • SKU( “sku”:”Basic”)
        • IPバージョン(publicIPAddressVersion”:”IPv4″)
        • アイドルタイムアウト( “idleTimeoutInMinutes”: “4”)
      • パラメータでDNS 名ラベルを設定する

パブリックIPのARMテンプレートはこういう形になりました。

{ 

    “$schema”: “https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#”,
    “contentVersion”: “1.0.0.0”,
    “parameters”: {
        “location”: {
            “type”: “string”,
            “metadata”:{} 
        },
        “publicIPAddresses_name”: {
            “type”: “string”,
            “metadata”: {}
        },
        “domainNameLabel”: {
            “type”: “string”,
            “metadata”: {}
        },
        “publicIPAllocationMethod”: {
            “type”: “string”,
            “allowedValues”: [
                “Dynamic”,
                “Static”
            ]
        }
    },
        “variables”: {
            “sku”:“Basic”,
            “publicIPAddressVersion”:”IPv4″,
            “idleTimeoutInMinutes”: “4”
        },
    “resources”: [
        {
            “type”: “Microsoft.Network/publicIPAddresses”,
            “apiVersion”: “2020-03-01”,
            “name”: “[parameters(‘publicIPAddresses_name’)]”,
            “location”: “[parameters(‘location’)]”,
            “sku”: {
                “name”: “[variables(‘sku’)]”
            },
            “properties”: {
                “publicIPAddressVersion”: “[variables(‘publicIPAddressVersion’)]”,
                “publicIPAllocationMethod”:  “[parameters(‘publicIPAllocationMethod’)]”,
                “idleTimeoutInMinutes”: “[variables(‘idleTimeoutInMinutes’)]”,
                “dnsSettings”: {
                    “domainNameLabel”: “[parameters(‘domainNameLabel’)]”
                },
                “ipTags”: []
            }
        }
    ]
}

固定値は適時変更して作成します。

3.パブリックIP設定用のCSV作成する

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

      • リソースグループ名(ResourceGroupName)
      • リージョン名(location)
      • パブリックIP名(vnetName)
      • DNS 名ラベル(subnet_name)
      • IP アドレスの割り当て(動的か静的か)

実際にパラメータCSVをサンプルで作成以下のようになります。

ResourceGroupName,location,publicIPAddresses_name,domainNameLabel,publicIPAllocationMethod,
RG1,japanwest,pubip-01,pubip-dnsname-01,Dynamic,
RG2,japanwest,pubip-02,pubip-dnsname-02,Static,

4. パブリックIPをARMテンプレート+Power Shellでデプロイする

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

#Public IP 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 `
-publicIPAddresses_name $c.publicIPAddresses_name `
-domainNameLabel $c.domainNameLabel `
-publicIPAllocationMethod $c.publicIPAllocationMethod `
}

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

ResourceGroupName : RG1
OnErrorDeployment :
DeploymentName : PbulicIP作成_template_20200517
CorrelationId :
ProvisioningState : Succeeded
Timestamp : 2020/YY/MM hh:ss:mm
Mode : Incremental

===================== ========================= ==========
location String japanwest
publicIPAddresses_name String pubip-01,pubip-dnsname-01,Dynamic,
domainNameLabel String pubip-dnsname-01,Dynamic
publicIPAllocationMethod String Dynami

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