Azure Database for MariaDBを作ってみた

 

Azure Database for MariaDBのデプロイをAzure PortalとAzure Resource Manager(ARM)テンプレートの2つパターンで実施してみました。

ARMテンプレートでは、少し利用しやすいように直してみました。

    • デフォルト値の設定を追加しています。
    • Power Shellを使ってデプロイする場合に、ARMテンプレートのパラメータをCSVから読み込むようにしてみた。

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

    • Azure Database for MariaDBを定義するARMテンプレート(JSONファイル)
    • Azure Database for MariaDBプランのパラメータを指定するCSV
    • ARMテンプレートをデプロイするPower Shell

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

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

1 .Azure Portal上でAzure Database for MariaDBを新規作成する

Azure Portalを利用して、Azure Database for MariaDBを作成してみました。

手順はマイクロソフト様のサイトに記載されていますので、その通り実施してみました。

https://docs.microsoft.com/en-us/azure/mariadb/quickstart-create-mariadb-server-database-using-azure-portal

Azure Portalを利用して作成する場合、以下の内容を選択します。実際に利用するリソースに合わせて設定します。

    • リソースグループ
    • サーバ名
    • データソース(新規に作成する場合はなしを選択します。バックアップからリカバリする際にはバックアップを選択します。)
    • 場所(リージョン)
    • バージョン(MariaDBのバージョンを選択します。2020年5月現在では10.2か10.3になります。)
    • コンピューティングとストレージ(価格レベルです。MariaDBを利用する為のリソースになります。)
    • 管理者ユーザー名(MariaDBにアクセスする管理者ユーザーになります。)
    • パスワード(管理者ユーザーのパスワードになります。)
    • タグ

1)すべてのサービスでMariaと入力します。Azure Database for MariaDBが表示されますので選択します。

2)下記画面が表示されますので、+追加をクリックします。

3)基本設定の画面が表示されますので、適時入力します。

コンピューティングとリソースにあるサーバの構成をクリックします。なお、場所(リージョン)を変更すると、サーバの構成が初期値に戻るので要注意です。

5)価格レベルやvCore、ストレージ容量を選択します。

今回は下記記載の設定で作ってみました。(一番お安い構成にしています。)

    • 価格レベルはBasicを選択
    • vCore:1
    • ストレージ:5GB
    • 自動拡張:いいえ
    • バックアップ保持期間:7日間

一度作成しまうと、後からBasicから汎用目的への変更はできません。注意が必要となります。

6)OKを選択すると、基本のページに戻ります。

タグを設定しない場合はそのまま確認および作成を選択します。

7)確認画面が表示されますので、問題がなければそのまま作成します。

完了すると、Azure Database for MariaDBが作成されます。

 

2 .Azure Database for MariaDBのAzure Resource Manager(ARM)テンプレート

マイクロソフト様のサイトを参考にし、Azure Database for MariaDBのARMテンプレートを作成してみました。

https://docs.microsoft.com/en-us/azure/mariadb/quickstart-create-mariadb-server-database-arm-template?tabs=azure-portal

サンプルを使いやすくする為に、少しだけシンプルにしてみました。

    • デフォルト値を設定しています。今回はAzure Portalを利用して作成した場合の値をデフォルト値としています。
    • パラメータをAzure Portalを利用して作成した場合+SSLの有効化指定の設定のみに変更(サンプルからvirtualNetwork関連の情報を抜きました。)
    • コンピューティング世代(SkuFamily)が現時点ではGen5のみなので、variablesで固定値にしています。

Azure Database for MariaDBのARMテンプレートはこういう形になりました。

{

    “$schema”: “https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#”,
    “contentVersion”: “1.0.0.0”,
    “parameters”: {
        “serverName”: {
            “type”: “string”,
            “minLength”:3,
            “maxLength”:63
        },
        “administratorLogin”: {
            “type”: “string”,
            “minLength”:1,
            “maxLength”:16
        },
        “administratorLoginPassword”: {
            “type”: “securestring”
        },
        “location”: {
            “type”: “string”,
            “defaultValue”: “japaneast”
        },
        “skuCapacity”: {
            “type”: “int”,
            “defaultValue”: 1
        },
        “skuName”: {
            “type”: “string”,
            “defaultValue”: “B_Gen5_1”
        },
        “skuSizeMB”: {
            “type”: “int”,
            “defaultValue”: 5120
        },
        “skuTier”: {
            “type”: “string”,
            “defaultValue”: “Basic”,
            “allowedValues”: [
                “Basic”,
                “GeneralPurpose”,
                “MemoryOptimize”
            ]
        },
        “version”: {
            “type”: “string”,
            “defaultValue”: “10.3”,
            “allowedValues”: [
                “10.2”,
                “10.3”
            ]
        },
        “backupRetentionDays”: {
            “type”: “int”,
            “defaultValue”: 7
        },
        “geoRedundantBackup”: {
            “type”: “string”,
            “defaultValue”: “Disabled”,
           “allowedValues”: [
                “Disabled”,
                “Enabled”
            ]
        },
        “storageAutoGrow”: {
            “type”: “string”,
            “defaultValue”: “Disabled”,
           “allowedValues”: [
                “Disabled”,
                “Enabled”
            ]
        },
        “sslEnforcement”: {
            “type”: “string”,
            “defaultValue”: “Disabled”,
            “allowedValues”: [
                “Disabled”,
                “Enabled”
            ]
        },
        “infrastructureEncryption”: {
            “type”: “string”,
            “defaultValue”: “Disabled”,
            “allowedValues”: [
                “Disabled”,
                “Enabled”
            ]
        }
    },
    “variables”: {
        “skuFamily”:”Gen5″
    },    
    “resources”: [
        {
            “apiVersion”: “2018-06-01-preview”,
            “kind”: “”,
            “location”: “[parameters(‘location’)]”,
            “name”: “[parameters(‘serverName’)]”,
            “properties”: {
                “version”: “[parameters(‘version’)]”,
                “administratorLogin”: “[parameters(‘administratorLogin’)]”,
                “administratorLoginPassword”: “[parameters(‘administratorLoginPassword’)]”,
                “storageProfile”: {
                    “storageMB”: “[parameters(‘skuSizeMB’)]”,
                    “backupRetentionDays”: “[parameters(‘backupRetentionDays’)]”,
                    “geoRedundantBackup”: “[parameters(‘geoRedundantBackup’)]”,
                    “storageAutoGrow”: “[parameters(‘storageAutoGrow’)]”
                },
                “sslEnforcemen”: “[parameters(‘sslEnforcement’)]”,
                “infrastructureEncryption”: “[parameters(‘infrastructureEncryption’)]”
            },
            “sku”: {
                “name”: “[parameters(‘skuName’)]”,
                “tier”: “[parameters(‘skuTier’)]”,
                “capacity”: “[parameters(‘skuCapacity’)]”,
                “size”: “[parameters(‘skuSizeMB’)]”,
                “family”: “[variables(‘skuFamily’)]”
            },
            “tags”: {},
            “type”: “Microsoft.DBforMariaDB/servers”
        }
    ]
}

 

3.Azure Database for MariaDBのパラメータ設定CSV作成する

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

    • リソースグループ(ResourceGroupName)
    • DBサーバ名(serverName)(小文字のみです)
    • 管理者ユーザ名(AppServicePlanName)
    • 管理者ユーザーパスワード(administratorLoginPassword)
    • リージョン名(location)
    • SKU名(skuName)
    • ストレージサイズ(skuSizeMB)
    • 価格レベル(skuTier)
    • MariaDBのバージョン(version)
    • バックアップ保存日数(backupRetentionDays)
    • バックアップ冗長(geoRedundantBackup)
    • ストレージの自動拡張(storageAutoGrow)
    • SSKの強制(sslEnforcement)
    • DB暗号化(infrastructureEncryption)

CSVのサンプルは以下のようになりました。(CSVが長くなっためPart1、Part2、Part3の3行に分割しています。)

#Part1
ResourceGroupName,location,serverName,administratorLogin,administratorLoginPassword,skuName,
RG1,japaneast,mariadb-01,mariadatabaseadmin,mariadbadminpassword,B_Gen5_1,5120,
 
#Part2
skuSizeMB,skuTier,version,backupRetentionDays,geoRedundantBackup,
5120,Basic,10.3,7,Disabled,Disabled,Enabled,Disabled
 
#Part3

storageAutoGrow,sslEnforcement,infrastructureEncryption

Disabled,Enabled,Disabled

4.Azure Database for MariaDBをARMテンプレート+Power Shellでデプロイする

ARMテンプレートのパス、CSVのパスを指定してARMテンプレートをデプロイするPower Shellを実行します。MariaDBがデプロイされます。

Azure Database for MariaDBのARMテンプレートをデプロイするPower Shellはこんな感じになりました。

#Azure Database for MariaDB ARMTemplate Deploy

 
#基本設定
#serverName DBサーバ名
#administratorLogin 管理者ユーザー名
#administratorLoginPassword 管理者ユーザーパスワード
#location リージョン名
#skuName SKU名(skuTier略称(B,GP,MO)+Gen5+vCore数)
#skuSizeMB ストレージサイズ
#skuTier 価格レベル(Basic,GeneralPurpose,MemoryOptimize))
#version MariaDBのバージョン(10.2,10.3))
#backupRetentionDays バックアップ保存日数(最低7日)
#geoRedundantBackup バックアップでGeo冗長を利用するか
#storageAutoGrow ストレージの自動拡張
#sslEnforcement MariaDBへアクセスする際にSSLを強制するか
#infrastructureEncryption DB暗号化

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

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

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

$secureadminpass = ConvertTo-SecureString $c.administratorLoginPassword -AsPlainText -Force

New-AzResourceGroupDeployment `
  -ResourceGroupName $c.ResourceGroupName `
  -TemplateFile $TemplateFilePath `
  -serverName $c.serverName `
  -administratorLogin $c.administratorLogin `
  -administratorLoginPassword $secureadminpass `
  -location $c.location `
  -skuName $c.skuName `
  -skuSizeMB $c.skuSizeMB `
  -skuTier $c.skuTier `
  -version $c.version `
  -backupRetentionDays $c.backupRetentionDays `
  -geoRedundantBackup $c.geoRedundantBackup `
  -storageAutoGrow $c.storageAutoGrow `
  -sslEnforcement $c.sslEnforcement `
  -infrastructureEncryption $c.infrastructureEncryption `
}

デプロイが成功すると、Power Shellの実行ログにProvisioningState : Succeededと表示され、実際にPortal上で確認するとPortalを利用した場合と同じ設定通り出来ている事が確認できます。

なお、接続方法については、以下の記事に記載しておりますので、こちらも参考ください。

Azure Database for MariaDBに接続してみた

 

Linux のAzure Web Appsをデプロイしてみた

 

Linux のWeb Apps のデプロイをAzure PortalとAzure Resource Manager(ARM)テンプレートの2つパターンで実施してみました。

ARMテンプレート利用時には、以下の点に対応してみました。

    • 既存のApp Serviceプランを利用するか、新規に作成するかを選べるようにしてみました。
    • Power Shellを使ってデプロイする場合に、ARMテンプレートのパラメータをCSVから読み込むようにして再利用しやすいようにしています。

※ARMテンプレートをWindowsと共通にしたかったのですが、linuxFxVersionという項目があり無理でした。

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

    • Web Apps(Linux用) を定義するARMテンプレート(JSONファイル)
    • Web Apps(Linux用) プランのパラメータを指定するCSV
    • ARMテンプレートをデプロイするPower Shell

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

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

 

App Serviceプラン単体での作成は、前回実施していますのでこちらの記事も併せて参考にして頂ければと。

Azure App Service プランを単体で作ってみた

 

1 .Azure Portal上でLinuxのWeb Appsを新規作成する

Azure Portalを利用して、Linux のApp Service を作成します。

Azure Portal上のすべてのサービスでApp Serviceと入力すると、App Serviceのメニューが表示されれますのでこれを選択します。

+追加をクリックします。

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

    • リソースグループ
    • 名前
    • 公開(Dockerコンテナを利用するか(今回はコードを選択))
    • ランタイムスタック(使用する開発言語(これを選ぶとオペレーティングシステムも自動選択されます)
    • オペレーティングシステム
    • 地域(ロケーション)
    • AppServiceプラン名
    • Application Insightsの利用可否(利用できる組み合わせには制限があり、LinuxとPHPの構成では利用不可です。)
    • タグ

リソースグループ、Web Apps名、公開(コンテナの利用等)、ランタイムスタック、地域(ロケーション)やApp Serviceプラン名を選択し、次へクリックします。オペレーティングシステムはWeb Apps利用時に選択されるランタイムスタックにより自動的に選択されます。

次に監視の設定を実施します。利用できる組み合わせには制限があり、LinuxとPHPの構成では利用不可な為、”いいえ”のままにします。

次にタグの設定を実施します。必要に応じて適時付与します。

設定したら、確認および作成をクリックします。確認画面が表示されますので、作成をクリックします。

完了するとLinuxのWeb Apps が作成されます。

 

2 .LinuxのWeb AppsのAzure Resource Manager(ARM)テンプレート

マイクロソフト様が公開されているサイトを参考にし、Web AppsのARMテンプレートを作成してみました。

https://github.com/Azure/azure-quickstart-templates/tree/master/101-webapp-basic-linux

以下の点を修正しています。

    • Conditionを利用して、既存のApp Serviceプランを利用するかどうかを選ぶようにしてみました。パラメータにnewOrExistingを追加しています。newを指定した場合は新規にApp Serviceプランが作成され、existingを指定すると既存のものを利用します。
    • App Serviceプラン部分は前回記事で作成のものを利用しています。

結果、Web AppsのARMテンプレートはこういう形になりました。Linux用のARMテンプレートなので、Kind(linux)やreserved(true)を固定値で設定する事も可能です。

{

  “$schema”: “https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#”,
  “contentVersion”: “1.0.0.0”,
  “parameters”: {
    “webAppName”: {
        “type”: “string”,
        “defaultValue” : “AzureLinuxApp”,
        “metadata”: {},
        “minLength”: 2
    },
    “appServicePlanName”:{
        “type”: “string”,
        “defaultValue” :”[concat(‘AppServicePlan-‘, parameters(‘webAppName’))]”,
        “metadata”: {}
    },
    “sku”: {
        “defaultValue”: “Basic”,
        “type”: “string”,
        “allowedValues”: [
            “Basic”,
            “Standard”,
            “PremiumV2”
        ]
    },
    “skucode”: {
        “defaultValue”: “B1”,
        “type”: “string”,
        “allowedValues”: [
            “B1″,”B2″,”B3”,
            “S1″,”S2″,”S3”,
            “P1v2″,”P2v2″,”P3v2”
        ]
    },
    “reserved”: {
            “defaultValue”: “true”,
            “type”: “bool”,
            “metadata”: {}
    },
    “kind”: {
            “type”: “string”,
            “allowedValues”: [
                “linux”,
                “app”
                ]
     },
    “linuxFxVersion” : {
        “type”: “string”,
        “defaultValue” : “PHP|7.3”,
        “metadata”: {}
    },
    “location”: {
      “type”: “string”,
      “defaultValue”: “[resourceGroup().location]”,
      “metadata”: {
      }
    },
    “newOrExisting”: {
        “type”: “string”,
        “allowedValues”: [
            “new”,
            “existing”
            ]
    }
  },
  “variables”: {},
   “resources”: [
        {
    “condition”: “[equals(parameters(‘newOrExisting’), ‘new’)]”,
    “apiVersion”: “2018-11-01”,
            “type”: “Microsoft.Web/serverfarms”,
            “name”: “[parameters(‘AppServicePlanName’)]”,
            “location”: “[parameters(‘location’)]”,
            “kind”: “[parameters(‘kind’)]”,
            “tags”: {},
            “properties”: {
                “name”: “[parameters(‘AppServicePlanName’)]”,
                “reserved”: “[parameters(‘reserved’)]”
            },
            “sku”: {
                “Tier”: “[parameters(‘sku’)]”,
                “Name”: “[parameters(‘skuCode’)]”
            }
        },
        {
      “type”: “Microsoft.Web/sites”,
      “apiVersion”: “2018-11-01”,
      “name”: “[parameters(‘webAppName’)]”,
      “location”: “[parameters(‘location’)]”,
      “kind”: “linux,app”,
      “dependsOn”: [
        “[resourceId(‘Microsoft.Web/serverfarms’, parameters(‘appServicePlanName’))]”
      ],
      “properties”: {
        “serverFarmId”: “[resourceId(‘Microsoft.Web/serverfarms’, parameters(‘appServicePlanName’))]”,
        “siteConfig”: {
            “linuxFxVersion”: “[parameters(‘linuxFxVersion’)]”
          }
      }
    }
  ]
}

 

3.LinuxのWeb Appsのパラメータ設定CSV作成する

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

    • リソースグループ(ResourceGroupName)
    • Web Apps名(webAppName)
    • App Serviceプラン名(AppServicePlanName)
    • オペレーティングシステム(reserved,Kind)
    • 地域(location)
    • App Serviceプランの価格レベル(sku,skucode)
    • ランタイムスタック(RuntimeStackVersion)
    • 新規作成か既存利用か(newOrExisting)

上記を踏まえてCSVをサンプルで作成以下のようになります。(RuntimeStackVersionで改行を入れてますので実施に利用時は抜いてください。)

#新規作成の場合
ResourceGroupName,location,webAppName,AppServicePlanName,sku,skucode,reserved,kind,
RuntimeStackVersion,newOrExisting

RG1,japaneast,wbapps-01,app-service-plan-001,Basic,B1,true,linux,PHP|7.3,new
 
#既存作成の場合(事前に作成した、app-service-plan-001を利用する場合)
ResourceGroupName,location,webAppName,AppServicePlanName,sku,skucode,reserved,kind,
RuntimeStackVersion,newOrExisting

RG1,japaneast,wbapps-01,app-service-plan-001,Basic,B1,true,linux,PHP|7.3,existing

4.LinuxのWeb AppsをARMテンプレート+Power Shellでデプロイする

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

ARMテンプレートをデプロイするPower Shellは下記のようになりました。

#Web Apps Template For Linux Deploy
#基本設定
#webAppName Web Apps名
#AppServicePlanName AppServicePlan名
#location リージョン名
#sku プラン名(Basic,Standard,PremiumV2)、
#skucode インスタンス名(B1等)
#kind (linux)
#linuxFxVersion(RuntimeStackVersion)(ランタイムスタック)
#newOrExisting(新規作成 Or 既存利用)

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

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

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

# Bool Value
[Bool]$boolValue = [System.Convert]::ToBoolean($c.reserved)

New-AzResourceGroupDeployment `
  -ResourceGroupName $c.ResourceGroupName `
  -TemplateFile $TemplateFilePath `
  -webAppName $c.webAppName `
  -AppServicePlanName $c.AppServicePlanName `
  -location $c.location `
  -sku $c.sku `
  -skucode $c.skucode `
  -reserved $boolValue `
  -kind $c.kind `
  -linuxFxVersion $c.RuntimeStackVersion `
  -newOrExisting $c.newOrExisting `
}

デプロイが成功すると、Power Shellの実行ログにProvisioningState : Succeededと表示され、実際にPortal上で確認すると設定通り出来ている事が確認できます。

 

Azure App Service プランを単体で作ってみた

 

App Service プランを単体での作成をやってみました。Azure Portalで作成した後、ARMテンプレートでもやってみました。

App Service プラン自体は、App Service作成時にも作れますが、今回は勉強を兼ねて事前に作成してみました。

App Service プランは、App Service利用する為のリソース利用料になります。

https://azure.microsoft.com/ja-jp/pricing/details/app-service/plans/

App Serviceを作成時にリソースとして指定されるもので、機能やリソースによって価格が決まります。

https://azure.microsoft.com/ja-jp/pricing/details/app-service/windows/

 

ARMテンプレートを使ってデプロイするにあたっては、以下の3つのファイルを作成しています。ARMテンプレートを使った場合は、複数のコンテナーを一括でデプロイできるようにパラメータをCSVから読み込むようにしています。

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

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

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

1 .Azure Portal上でApp Service プランを新規作成する

Azure Portalを利用して、App Service プランを作成します。

Azure Portal上のすべてのサービスでApp Service Planと入力すると、App Service プランのメニューが表示されれますのでこれを選択します。

App Service プランに移動しますので、+追加をクリックします。

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

    • リソースグループ
    • 名前
    • オペレーティングシステム
    • 地域(ロケーション)
    • 価格レベル
    • タグ

まず、リソースグループ、名前、オペレーティングシステム、価格レベルを選択し、次へクリックします。オペレーティングシステムはApp Service利用時に選択するフレームワークにより選択します。.Net環境を利用するのであればWindows、PHPならばLinuxという感じです。現時点ではコンテナの場合はLinuxの方が選べるロケーションが多いようです。

次にタグの設定を必要に応じて実施します。

設定したら、確認および作成をクリックします。確認画面が表示されますので、作成をクリックします。App Service プランが作成されます。

.App Service プランのAzure Resource Manager(ARM)テンプレート

マイクロソフト様が公開されているサイトを参考にし、App ServiceプランのARMテンプレートを作成してみました。

https://docs.microsoft.com/ja-jp/azure/templates/microsoft.web/serverfarms

以下の点を修正しています。

    • skuやskucodeのデフォルト値はBasic前提にしてます。Isolatedも使わなかったので抜いてます。利用環境に合わせて適時修正下さい。
    • reservedとkindはパラメータで指定するようにしています。

結果、App ServiceプランのARMテンプレートはこういう形になりました。

{
    “$schema”: “http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#”,
    “contentVersion”: “1.0.0.0”,
    “parameters”: {
        “AppServicePlanName”: {
            “type”: “string”
        },
        “location”: {
            “defaultValue”: “[resourceGroup().location]”,
            “type”: “string”
        },
        “sku”: {
            “defaultValue”: “Basic”,
            “type”: “string”,
            “allowedValues”: [
                “Basic”,
                “Standard”,
                “PremiumV2”
                ]
        },
        “skucode”: {
            “defaultValue”: “B1”,
            “type”: “string”,
            “allowedValues”: [
                “B1″,”B2″,”B3”,
                “S1″,”S2″,”S3”,
                “P1v2″,”P2v2″,”P3v2”
                ]
        },
        “reserved”: {
            “defaultValue”: “true”,
            “type”: “bool”,
            “metadata”: {}
        },
        “kind”: {
            “type”: “string”,
            “allowedValues”: [
                “linux”,
                “app”
                ]
        }
     },
    “variables”: {},
    “resources”: [
        {
            “apiVersion”: “2018-11-01”,
            “type”: “Microsoft.Web/serverfarms”,
            “name”: “[parameters(‘AppServicePlanName’)]”,
            “location”: “[parameters(‘location’)]”,
            “kind”: “[parameters(‘kind’)]”,
            “tags”: {},
            “properties”: {
                “name”: “[parameters(‘AppServicePlanName’)]”,
                “reserved”: “[parameters(‘reserved’)]”
            },
            “sku”: {
                “Tier”: “[parameters(‘sku’)]”,
                “Name”: “[parameters(‘skuCode’)]”
            }
        }
    ]
}

 

3.App Serviceプランのパラメータ設定CSV作成する

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

    • リソースグループ(ResourceGroupName)
    • 名前(AppServicePlanName)
    • オペレーティングシステム(reserved,Kind)
    • 地域(location)
    • 価格レベル(sku,skucode)
    • タグ(今回は未指定)

オペレーティングシステムの組み合わせは下記の通りになります。Windowsの場合は指定がappになります。また同じリソースグループにWindowsとLinuxのデプロイはエラーになります。(現時点でのAzureでの仕様になります。)

    • Linuxの場合は、reservedをtrue、kindをlinuxに指定します。
    • Windowsの場合は、reservedをfalse、kindをappに指定します。

上記を踏まえてCSVをサンプルで作成以下のようになります。

RG1にLinux(B1)、RG2にWindows(S1)でデプロイする想定にしています。

ResourceGroupName,location,AppServicePlanName,sku,skucode,reserved,kind,
RG1,japaneast,app-service-plan-001,Basic,B1,true,linux,
RG2,japaneast,app-service-plan-002,Standard,S1,false,app,

4.App ServiceプランをARMテンプレート+Power Shellでデプロイする

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

reservedについては、bool形式である為StriingからBoolに変換ししています。

#AppServicePlan Template Deploy

#基本設定
#Name AppServicePlan名
#location リージョン名
#sku プラン名(Basic,Standard,PremiumV2)、
#skucode インスタンス名(B1等)
#kind (linux or Win)(Winの場合はappと指定する)

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

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

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

# Bool Value
[Bool]$boolValue = [System.Convert]::ToBoolean($c.reserved)

New-AzResourceGroupDeployment `
  -ResourceGroupName $c.ResourceGroupName `
  -TemplateFile $TemplateFilePath `
  -location $c.location `
  -AppServicePlanName $c.AppServicePlanName `
  -sku $c.sku `
  -skucode $c.skucode `
  -reserved $boolValue `
  -kind $c.kind
}
 

デプロイが成功すると、Power Shellの実行ログにProvisioningState : Succeededと表示され、実際にPortal上で確認すると設定通り出来ている事が確認できます。

Azure Recovery Services コンテナーを作ってみた

 

Azure Recovery Services コンテナーはAzure Virtual Machine等のバックアップやリストアに使用されるAzure上のサービスです。

色々な機能が提供されていますので、機能内容はマイクロソフト様のサイトでご確認下さい。自分はシンプルにバックアップソフトとバックアップストレージがセットで提供されるサービスと理解しています。

https://docs.microsoft.com/ja-jp/azure/backup/backup-azure-recovery-services-vault-overview

 

今回は、Azure Recovery Services コンテナー作成を、Azure PortalとAzure Resource Manager(ARM)テンプレートを利用して実施してみました。

Azure Portalで実施した内容を踏まえて、ARMテンプレートでのデプロイをやっていみました。

ARMテンプレートを使ってデプロイするにあたっては、以下の3つのファイルを作成しています。ARMテンプレートを使った場合は、複数のコンテナーを一括でデプロイできるようにパラメータをCSVから読み込むようにしています。

    • Azure Recovery Services コンテナーを定義するARMテンプレート(JSONファイル)
    • Azure Recovery Services コンテナーのパラメータを指定するCSV
    • ARMテンプレートをデプロイするPower Shell

今回はAzure Recovery Services コンテナーの作成のみとなっております。Virtual Machineのバックアップ設定やバックアップスケジュール設定は別の機会に実施したいと思います。

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

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

1 .Azure Portal上でRecovery Services コンテナーを新規作成する

Azure Portalを利用したRecovery Services コンテナーを作成は以下の手順で実施しました。

    • Recovery Services コンテナーの作成
    • バックアップ ストレージの冗長選択(ローカル冗長ストレージ (LRS) と Geo 冗長ストレージ (GRS))
    • 論理削除(14日間保持)、物理削除(即時削除)の選択

バックアップストレージの冗長選択はバックアップ設定した後では変更不可である為最初に設定します。また、論理削除にしておくと、Recovery Services コンテナーが削除が論理的にデータ保存されている14日間出来なくなります。その為必要に応じて設定変更します。

Azure Portalを利用した作成手順はマイクロソフト様のサイトに公開されています。今回は勉強もかねて実施してみました。

https://docs.microsoft.com/ja-jp/azure/backup/backup-create-rs-vault

 

最初に、Recovery Services コンテナーの作成を行います。

Azure Portal上のすべてのサービスでRecoveryと入力すると、Recovery Services コンテナーのメニューが表示されれますのでこれを選択します。

Recovery Services コンテナーに移動しますので、+追加をクリックします。

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

    • リソースグループ
    • 資格情報コンテナー名(名前ですね。)
    • リージョン
    • タグ(プレビューで追加になってました。)

まず、リソースグループ、資格情報コンテナー名、リージョンを選択し、次へクリックします。

次にタグの設定を必要に応じて実施します。

設定したら、確認および作成をクリックします。確認画面が表示されますので、作成をクリックします。Recovery Services コンテナーが作成されます。

Recovery Services コンテナーが作成されましたので、最初にやっておくべき設定を行います。

作成したRecovery Services コンテナーのメニューにあるプロパティを選択します。

バックアップ構成という項目が表示されているかと思います。ここで更新をクリックします。下記画面が表示されます。ストレージレプリケーションの種類を選択します。

デフォルトGeo冗長になっております。

別リージョンにリカバリするやDCが全部吹っ飛んでもリカバリするんだ、というような別リージョンに保管する要件が無い場合はローカル冗長(LRS)に変更します。

マイクロソフト様のサイトを見て頂ければわかりますが、料金が2倍違います。(保管場所が2重になるので、容量も2倍。という事で料金も2倍という事だと思います。。。)

https://azure.microsoft.com/ja-jp/pricing/details/backup/

設定変更した場合は、忘れずに保存します。

次に、セキュリティ設定を行います。(なお、こちらは後からでも変更可能です。)

即時物理削除したい場合は、論理削除を無効に設定します。

設定変更した場合は保存します。論理削除の保存期間は14日間固定のようで変更はできないようです。

.Recovery Services コンテナーのAzure Resource Manager(ARM)テンプレート

マイクロソフト様が公開されているARMテンプレートを参考にし、デフォルト値のみを変更しています。

https://github.com/Azure/azure-quickstart-templates/blob/master/101-recovery-services-vault-create/azuredeploy.json

https://docs.microsoft.com/ja-jp/azure/site-recovery/quickstart-create-vault-template?tabs=CLI

基本は参考通りなのですが、以下の点だけ修正しています。

    • バックアップ構成のデフォルト値をローカル冗長になるようにしています。
    • バックアップアラート部分等は設定してません。
    • TAGの設定はしていません。
    • 論理削除はデフォルトの通り有効になります。(無効にする方法が見当たりませんでした。)

skuNameと、skuTierは固定値になります。その為、Parametersの指定ではなく、variablesでの指定としています。

ARMテンプレートでは、バックアップポリシーの規定をしてませんが、Azure Portalを利用して作成した時と同様に、HourlyLogBackupとDefaultPolicyは作成されます。

Recovery Services コンテナーのARMテンプレートはこういう形になりました。

{
  “$schema”: “https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#”,
  “contentVersion”: “1.0.0.0”,
  “parameters”: {
    “vaultName”: {
      “type”: “string”,
      “metadata”: {}
   },
    “changeStorageType”: {
      “type”: “bool”,
      “defaultValue”: true ,
      “metadata”: {}
    },
    “vaultStorageType”: {
      “type”: “string”,
      “defaultValue”: “LocallyRedundant”,
      “allowedValues”: [
        “LocallyRedundant”,
        “GloballyRedundant”
      ],
      “metadata”: {}
    },
    “location”: {
      “type”: “string”,
      “defaultValue”: “[resourceGroup().location]”,
      “metadata”: {}
    }
  },
  “variables”: {
    “skuName”: “RS0”,
    “skuTier”: “Standard”
  },
 “resources”: [
   {
     “type”: “Microsoft.RecoveryServices/vaults”,
     “apiVersion”: “2018-01-10”,
     “name”: “[parameters(‘vaultName’)]”,
     “location”: “[parameters(‘location’)]”,
     “sku”: {
       “name”: “[variables(‘skuName’)]”,
       “tier”: “[variables(‘skuTier’)]”
     },
   “properties”: {}
   },
   {
     “condition”: “[parameters(‘changeStorageType’)]”,
     “type”: “Microsoft.RecoveryServices/vaults/backupstorageconfig”,
     “apiVersion”: “2018-01-10”,
     “name”: “[concat(parameters(‘vaultName’), ‘/vaultstorageconfig’)]”,
     “dependsOn”: [
         “[resourceId(‘Microsoft.RecoveryServices/vaults/’, parameters(‘vaultName’))]”
     ],
     “properties”: {
         “StorageModelType”:”[parameters(‘vaultStorageType’)]”
     }
   }
 ]
}

 

3.Azure Recovery Services コンテナーのパラメータ設定CSV作成する

Azure Recovery Services コンテナーを作成する為にCSVから読み込むパラメータは以下の通りになります。リソースグループ名はデプロイ先のリソースグループ名になります。

    • リソースグループ(ResourceGroupName)
    • リージョン(location)
    • コンテナー名(vaultName)
    • ストレージの種類の変更(changeStorageType)
    • コンテナー ストレージの種類(vaultStorageType)

ストレージの種類の変更と、コンテナーストレージの種類の組み合わせは下記の通りになります。

    • ローカル冗長の場合は、changeStorageTypeをTrue、vaultStorageTypeをLocallyRedundantに指定します。
    • Geo冗長のの場合は、changeStorageTypeをfalse、vaultStorageTypeをGloballyRedundantに指定します。

上記を踏まえてCSVをサンプルで作成以下のようになります。

RG1にローカル冗長、RG2にGeo冗長でデプロイする想定にしています。

ResourceGroupName,location,vaultName,changeStorageType,vaultStorageType
RG1,japaneast,rsc-01,true,LocallyRedundant
RG2,japanwest,rsc-02,false,GloballyRedundant

4.Azure Recovery Services コンテナーをARMテンプレート+Power Shellでデプロイする

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

changeStorageTypeについては、bool形式である為そのままCSVを読み込むとエラーになりました。調べた結果、明示的にBool指定が必要だという事がわかりましたので、# Bool Value行でStriingからBoolに変換しエラーにならないようにしています。

#RecoveryServicesコンテナー Template Deploy

$TemplateFilePath = “ARMテンプレートファイルのパス”
$ImportCSVPath = “パラメータを指定するCSVファイルのパス”

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

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

# Bool Value
[Bool]$boolValue = [System.Convert]::ToBoolean($c.changeStorageType)

# Deploy Command
New-AzResourceGroupDeployment `
  -ResourceGroupName $c.ResourceGroupName `
  -TemplateFile $TemplateFilePath `
  -location $c.location `
  -changeStorageType $boolValue `
  -vaultStorageType $c.vaultStorageType `
  -vaultName $c.vaultName
}

デプロイが成功すると、Power Shellの実行ログにProvisioningState : Succeededと表示され、実際にAzure Portal上で確認すると設定通り出来ている事が確認できました。

ARMテンプレートを使った場合は、論理削除の設定は有効になっています。

AzureパブリックIP作成をARMテンプレート使ってやってみた

 

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

AzureのパブリックIPはAzureの各リソース(Azure Virtual Machine等)がインターネットと通信する為に使用されます。その為仮想マシンを構築する等、Azureを利用する多くの場合に、パブリックIPが作成する事になります。

多くの場合は、インターネットにアクセスするリソース作成時に合わせて作成することも可能ですが、今回は、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のメニューが表示されれます。追加をクリックします。

作成画面が表示されます。

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

    • 名前
    • 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で指定した値で作成した値で作成されている事が確認できます。

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

 

既存の仮想ネットワークに対して、サブネット単体でのデプロイをAzure Resource Manager(ARM)テンプレートを使って実施してみました。

パラメータをCSVから分けて読み込むようにする事で、作成先の仮想ネットワークを別にしたり、複数のサブネットを纏めてを作れるようにしてみました。

サブネットのデプロイは下記の3つのファイルで実施しています。

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

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

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

仮想ネットワークの初期デプロイに関しては下記記事を参考にしていただければと。

https://www.tama-negi.com/2020/05/04/template-vnet-subnet/

Azure Resource Managerテンプレートを使って仮想ネットワークとサブネットをデプロイする(基本部分)

 

1 .Azure Portal上でサブネットを追加する

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つのサブネットしか出来ない形になってしまいました。

3.サブネット設定用のCSV作成する

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

    • リソースグループ名(ResourceGroupName)
    • リージョン名(location)
    • 仮想ネットワーク名(vnetName)
    • サブネット名(subnet_name)
    • サブネットのアドレス範囲(subnet_addressRange)
    • ネットワークセキュリティグループ名(NSG_name)

パラメータCSVのサンプルは以下のようになります。

ResourceGroupName,location,vnetName,subnet_name,subnet_addressRange,NSG_name,
デプロイ先RG名,リージョン名,仮想ネットワーク名,サブネット名,サブネットのアドレスレンジ,ネットワークセキュリティグループ名,
RG-1,japaneast,VNET-Name,Snbnet-Name,192.168.1.0/24,NSG-Name,

サブネットの設定内容に合わせてCSVを作成します。

4. サブネットをARMテンプレート+Power Shellでデプロイする

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

#Subnet Template Deploy

#基本設定(SubnetのNSGを指定する)

$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 `
 -subnet_name $c.subnet_name `
 -subnet_addressRange $c.subnet_addressRange `
 -NSG_Name $c.NSG_name `
}

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

ResourceGroupName : デプロイ先のリソースグループ名
OnErrorDeployment :
DeploymentName : Subnet作成(NSG付き)_template_20200515
CorrelationId :
ProvisioningState : Succeeded
Timestamp : 2020/YY/MM hh:ss:mm
Mode : Incremental

===================== ========================= ==========
location String リージョン名
vnetName String 仮想ネットワーク名
subnet_name String サブネット名
subnet_addressRange String サブネットアドレスレンジ
NSG_Name String NSG名 

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

※ARMテンプレート作成時にドはまりし、マイクロソフトサポート様にご教授頂きました。本当に有難うございました。

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

 

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つではなく複数のサブネットやサブネット単体での作成してを想定して、サブネットは別のリソースで作成するようにしています。

 

2.仮想ネットワークの設定内容を指定する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を作成します。

 

3. 仮想ネットワークを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で指定した値で作成した値で作成されている事が確認できます。

 

Azure Application GatewayのARMテンプレートをPower Shell使ってエクスポートする

 

検証でAzure Application Gatewayの設定を行っていたのですが、設定項目が多く、いろいろな所の設定変更していくと、どこを変更した分からなくなる事が多々ありました。恥ずかしながらその結果、元に戻せてなくて設定がうまく行かないケースがありました。

Azure PortalでARMテンプレートのエクスポートするようにしたのですが、何度も繰り返しているのが面倒になってきたので、Power Shellでエクスポートをという事を試してみました。併せてGet-AzApplicationGatewayで設定情報を取得も実施してみました。

実施にあたっては以下のサイトを参考に進めました。

https://docs.microsoft.com/en-us/powershell/module/az.resources/export-azresourcegroup?view=azps-3.8.0
https://docs.microsoft.com/en-us/powershell/module/az.network/get-azapplicationgatewayhttplistener?view=azps-3.8.0

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

https://github.com/Tama-negi/Li-akb-branch-office/tree/PowerShell_Azure/ApllicationGateway-Template-Export-20200422

1.Azure Application Gatewayのテンプレートエクスポート+情報取得

今回は、Get-AzApplicationGateway でApplication Gatewayの情報を取得しています。

また、Export-AzResourceGroupで、テンプレートのエクスポートを行います。Application Gateway名を指定することで、Application Gatewayのみのテンプレートをエクスポートします。

#Application Gateway Template Export

#取得するApplication Gatewayのパラメータ

$SubscriptionId = “サブスクリプションID”
$RG = “リソースグループ名”
$APGW = “Application Gateway名”
$TemplatePath =“テンプレートのパス(例:C:\temp)”

#Getコマンドで情報取得
Get-AzApplicationGateway -Name $APGW -ResourceGroupName $RG

#テンプレートをエクスポートする
Export-AzResourceGroup `
-ResourceGroupName $RG `
-Resource “/subscriptions/$SubscriptionId/resourceGroups/$RG/providers/Microsoft.Network/applicationGateways/$APGW”`
-Path $TemplatePath

 

なお、上記サンプルのように、Get-AzApplicationGatewayだけでそのまま情報を取得した場合、子に入っているSKUの情報等が取得出来ません。適時必要に応じて表示するようにして下さい。注意願います。

Azureのリソースグループを複数まとめて作成・削除する

 

Azure上で複数個リソースグループを纏めて作成・削除することがあったので、これをPower Shellでやってみました。併せて、一括して削除も実行してみました。

リソースグループの作成自体は、下記サイトに記載があります。

https://docs.microsoft.com/ja-jp/azure/logic-apps/logic-apps-azure-resource-manager-templates-overview

これを以下のように少し改変して、まとめて作れるようにしてみました。

    • パラメータの指定はCSVファイルを利用する
    • 作成、削除するリソースグループのパラメータは、CSVで指定する

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

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

1.パラメータCSVファイルを作成する

リソースグループを作成する為にCSVから読み込むパラメータは以下の2つになります。この2つを指定するCSVを作成します。

    • リソースグループ名
    • ロケーション

ResourceGroup作成.csv

resourceGroupName,location
RG-01,japaneast,
RG-02,eastus2,

.複数のリソースグループをまとめて作成する

先ほど作成したCSVファイルのパスを指定してデプロイします。

リソースグループを複数個一括してデプロイする_外部ファイルを読み込む .ps1

#Resource Group Deploy
#RGを複数個纏めて作成します。設定値はCSVファイルを読み込みます。

#初期設定値
$ImportCSVPath = “CSVファイルのパス”

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

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

New-AzResourceGroup `
-Name $c.resourceGroupName `
-Location $c.location
}

パラメータ用CSVファイル内で指定したパラメータでリソースグループが作成されます。

.複数のリソースグループをまとめて削除する

先ほど作成したCSVファイルのパスを指定してリソースグループを削除します。

今回は、確認無しで削除する為、最後に-forceをつけてます。確認メッセージを出す場合は、-forceを削除してください。

リソースグループを複数個一括して削除する_外部ファイルを読み込む .ps1

#Resource Group Delete

#RGを複数個纏めて削除します。設定値はCSVファイルを読み込みます。

#初期設定値
$ImportCSVPath = “CSVファイルのパス”

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

#Delete Command
foreach( $c in $csv ){

New-AzResourceGroup `
  -Name $c.resourceGroupName `
  -Location $c.location
}

先ほど指定した、パラメータのリソースグループが削除されます。

※リソースグループが削除されますので、中のアイテムが削除されても問題ないか、事前に十分確認のの上、実行して下さい。

 

ARMテンプレートを使って、Azure Logic Appのデプロイしてみた(箱のみ)

 

Azure Logic AppをARMテンプレートを利用してデプロイしてみました。
ARMテンプレートのデプロイはPower Shellを使用します。
ARMテンプレートで指定するParameterは、CSVファイルから読み込みます。

Logic Appのデプロイ自動化については、下記サイトに記載があります。今回は下記サイトを参考に一番基本的な部分だけを作るまでをやってみました。(箱だけを作ってます。)

https://docs.microsoft.com/ja-jp/azure/logic-apps/logic-apps-azure-resource-manager-templates-overview

作成状況を以下のようにしています。

    • Logic Appを2つ作成する
    • Logic Appのテンプレートを使う
    • Logic Appは基本設定のみ
    • パラメータの指定はCSVファイルを利用する
    • デプロイ先のリソースグループはデプロイ時に指定する

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

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

1 .Logic AppのARMテンプレート

Azure Portalを利用してGUIでLogic Appのデプロイを行う場合、以下の内容を指定します。今回は一番基本的な部分のみという事で、同じ内容を指定するようにしています。

    • Logic App名
    • リソースグループ名
    • ロケーション
    • Tag
    • Log Analyticsの使用可否、ワークスペース名(今回は無しにしています。)

LogicApp-template-Basic-01.json

{
    “$schema”: “https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#”,
    “contentVersion”: “1.0.0.0”,
    “parameters”: {
        “workflows_LogicApp_name”: {
            “type”: “String”,
            “metadata”: {}
        },
        “location”: {
            “type”: “String”,
            “defaultValue”: “japaneast”,
            “metadata”:{} 
        },
        “tag”: {
            “type”: “String”,
            “defaultValue”:”notag”,
            “metadata”:{} 
        }
    },
    “variables”: {},
    “resources”: [
        {
            “type”: “Microsoft.Logic/workflows”,
            “apiVersion”: “2017-07-01”,
            “name”: “[parameters(‘workflows_LogicApp_name’)]”,
            “location”: “[parameters(‘location’)]”,
            “tags”: {
                “division”: “[parameters(‘tag’)]”
            },
            “properties”: {
                “state”: “Enabled”,
                “definition”: {
                    “$schema”: “https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#”,
                    “contentVersion”: “1.0.0.0”,
                    “parameters”: {},
                    “triggers”: {},
                    “actions”: {},
                    “outputs”: {}
                },
                “parameters”: {}
            }
        }
    ]
}

.ARMテンプレートのパラメータ設定用のCSVファイルを作成する

Logic App を作成する為にCSVから読み込むパラメータは以下の3つになります。この3つを指定するCSVを作成します。

    • Logic App名
    • ロケーション
    • Tag

LogicApp-Basic.csv

LogicAppName,location,tag
LogicApp-Test01,japaneast,,
LogicApp-Test02,japaneast,TAG-Test,

3. Power ShellでARMテンプレートをデプロイする

デプロイ先のリソースグループ名、テンプレートファイルのパス、CSVファイルのパスを指定してデプロイを実施します。

TemplateDeploy_ImportCSV(LogicApp用)_01(公開用).ps1

#Logic App Template Deploy
#基本設定(RG名、LogicApp名、Location、Tagのみ指定)

param (
[String] [Parameter(Mandatory=$true)] $ResourceGroupName
)

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

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

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

New-AzResourceGroupDeployment -ResourceGroupName $ResourceGroupName `
-TemplateFile $TemplateFilePath `
-workflows_LogicApp_name $c.LogicAppName `
-location $c.location `
-tag $c.tag
}

作成が成功すると、以下の通りにLogic Appが作成されたログが表示されます。

Outputs :

eploymentName : LogicApp-template-Basic-01
ResourceGroupName : リソースグループ名
ProvisioningState : Succeeded
Timestamp : 作成時刻
Mode : Incremental
TemplateLink :
Parameters :
Name Type Value
========================= ========================= ==========
workflows_LogicApp_name String LogicApp-Test01
location String japaneast
tag String

DeploymentName : LogicApp-template-Basic-01
ResourceGroupName : リソースグループ名
ProvisioningState : Succeeded
Timestamp : 作成時刻
Mode : Incremental
TemplateLink :
Parameters :
Name Type Value
========================= ========================= ==========
workflows_LogicApp_name String LogicApp-Test02
location String japaneast
tag String TAG-Test

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

ARMテンプレートを使って、Network Security Groupのデプロイしてみた(特定のIPからRDPを許可)

 

Azure Network Security Group(NSG)のデプロイをARMテンプレート使ってやってみました。

今回は一番初期に使うパターンとして多い、RDP(ポート番号3389)を特定のIPから許可する設定で試してみました。

※間違って、RDPをInterNetにAnyで許可してしまう事を防げないかなぁという事でARMテンプレートを作成してみました。

1 .NSGのテンプレート

今回は、特定IPからのRDPを許可するセキュリティ規則を作成してます。下記サンプルを適当な名前を付けて、JSON形式(拡張子をJSON)にしてファイルを保存します。

サンプルでは以下の値をパラメータとして指定するようにしています。

    • NSG名
    • ロケーション(デフォルト値を東日本としています)
    • NSGのルール名(デフォルト値をRDP-Permitとしています)
    • RDPを許可するIP
{

    “$schema”: “https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#”,
    “contentVersion”: “1.0.0.0”,
    “parameters”: {
        “NSGName”: {
            “type”: “String”,
            “metadata”: {}
        },
        “location”: {
            “type”: “String”,
            “defaultValue”: “japaneast”,
            “metadata”:{} 
        },
        “NSGRuleName”: {
            “type”: “String”,
            “defaultValue”: “RDP-Permit”,
            “metadata”:{} 
        },
        “PermitIP”: {
           “type”: “String”,
           “metadata”:{} 
        }
    },
    “variables”: {},
    “resources”: [
        {
            “type”: “Microsoft.Network/networkSecurityGroups”,
            “apiVersion”: “2019-11-01”,
            “name”: “[parameters(‘NSGName’)]”,
            “location”: “[parameters(‘location’)]”,
            “properties”: {
                “securityRules”: [
                    {
                        “name”: “[parameters(‘NSGRuleName’)]”,
                        “properties”: {
                            “protocol”: “*”,
                            “sourcePortRange”: “*”,
                            “destinationPortRange”: “3389”,
                            “sourceAddressPrefix”: “[parameters(‘PermitIP’)]”,
                            “destinationAddressPrefix”: “VirtualNetwork”,
                            “access”: “Allow”,
                            “priority”: 100,
                            “direction”: “Inbound”,
                            “sourcePortRanges”: [],
                            “destinationPortRanges”: [],
                            “sourceAddressPrefixes”: [],
                            “destinationAddressPrefixes”: []
                        }
                    }
                ]
            }
        },
        {
            “type”: “Microsoft.Network/networkSecurityGroups/securityRules”,
            “apiVersion”: “2019-11-01”,
            “name”: “[concat(parameters(‘NSGName’), ‘/’, parameters(‘NSGRuleName’))]”,
            “dependsOn”: [
                “[resourceId(‘Microsoft.Network/networkSecurityGroups’, parameters(‘NSGName’))]”
            ],
            “properties”: {
                “protocol”: “*”,
                “sourcePortRange”: “*”,
                “destinationPortRange”: “3389”,
                “sourceAddressPrefix”: “[parameters(‘PermitIP’)]”,
                “destinationAddressPrefix”: “VirtualNetwork”,
                “access”: “Allow”,
                “priority”: 100,
                “direction”: “Inbound”,
                “sourcePortRanges”: [],
                “destinationPortRanges”: [],
                “sourceAddressPrefixes”: [],
                “destinationAddressPrefixes”: []
            }
        }
    ]
}

 

※デフォルトルールは、テンプレートには必要無いようです。

.ARMテンプレートをPower Shellでデプロイする

1.で作成したARMテンプレートをPower Shellでデプロイします。
今回のサンプルではリソースグループ名、ロケーション名、セキュリティ規則名はデプロイ用のPower Shellに直接記載しています。Power Shellでデプロイ時にNSGの名前、RDPを許可するIPを指定できるようにしています。

#NSG Template Deploy

param (
  [String] [Parameter(Mandatory=$true)]  $NSGName ,
  [String] [Parameter(Mandatory=$true)]  $Address
    )

$resourceGroupName = “リソースグループ名”
$location = “ロケーション名”
$NSGRuleName =“セキュリティ規則名”
$TemplateFilePath = “テンプレートのパス”

New-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName `
  -TemplateFile $TemplateFilePath `
  -NSGName $NSGName `
  -NSGRuleName $NSGRuleName `
  -PermitIP $Address `
  -location $location

NSGが出来た後に、SubnetやNetwork Interfaceとの関連付けを行ってください。この編のPower Shellは随時公開していきたいと思います。

今後は、サービスタグの指定、複数のセキュリティ規則を一括して作成するなど、環境に合わせて作成できるようにしていきたい所です。

Log Analytics ワークスペースを複数まとめてデプロイしてみた

 

Log AnalyticsのワークスペースのデプロイをARMテンプレートを利用して実施してみました。 テンプレートで指定するParameterをCSVファイルから読み込むようにしてみました。

今回は下記条件で実施してみました。

    • Log Analyticsワークスペースを3つ作成する
    • Log Analyticsワークスペースをテンプレートファイルを利用してデプロイする
    • パラメータはCSVファイルを利用する
    • パラメータはデプロイ時に指定する

※サンプルはGitHubにも公開しています。

1 .Log Analytics ワークスペースを作成するARMテンプレート

マイクロソフト様の下記サイトに記載の内容を参考(ほとんどそのままです)にしています。

https://docs.microsoft.com/ja-jp/azure/azure-monitor/learn/quick-create-workspace-posh#create-a-workspace

defaultValue値は環境に合わせて変更してください。(今回はSKUをPer2018で固定しています。)

{

“$schema”: “https://schema.management.azure.com/schemas/2014-04-01-preview/deploymentTemplate.json#”,
“contentVersion”: “1.0.0.0”,
 ”parameters”: {
  ”workspaceName”: {
   ”type”: “String”,
   ”metadata”: {}
 },
 ”location”: {
  ”type”: “String”,
   ”defaultValue”: “eastus2”,
    ”metadata”: {}
 },
 ”sku”: {
  ”type”: “String”,
   ”allowedValues”: [
    ”PerGB2018″
   ],
   ”defaultValue”: “PerGB2018”,
    ”metadata”: {}
   }
 },
“resources”: [
 {
 ”type”: “Microsoft.OperationalInsights/workspaces”,
  ”name”: “[parameters(‘workspaceName’)]”,
  ”apiVersion”: “2015-11-01-preview”,
  ”location”: “[parameters(‘location’)]”,
  ”properties”: {
  ”sku”: {
  ”Name”: “[parameters(‘sku’)]”
 },
 ”features”: {
 ”searchVersion”: 1
}}}]}

.ARMテンプレートのパラメータを指定するCSVファイルを作成する

Log Analyticsワークスペースで指定する、パラメータは以下の3つになります。

    • ワークスペース名 (変数名;workspaceName)
    • ロケーション (変数名;location)
    • SKU (変数名;sku)

テスト用のパラメータCSVファイルは下記通り作成しています。

workspaceName,location,sku

test-201-20200328,eastus2,PerGB2018
test-202-20200328,eastus2,PerGB2018
test-203-20200328,japaneast,PerGB2018

3. Power ShellでARMテンプレートをデプロイする

デプロイ先のリソースグループ名、ARMテンプレートファイルのパス、CSVファイルのパスを指定してデプロイを実施します。

#Log Analyitcs ワークスペースデプロイ用Power Shell

$resourceGroupName = “デプロイ先のリソースグループ名”
$TemplateFilePath = “テンプレートファイルのパス”
$ImportCSVPath = “CSVのファイルのパス”

# Import Parameter Csv
$csv = Import-Csv -path $ImportCSVPath

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

New-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName `
 -TemplateFile $TemplateFilePath `
 -workspaceName $c.workspaceName `
 -location $c.location `
 -sku $c.sku
}

作成が成功すると、以下の通りにLog Analyticsのワークスペースが作成されたログが表示されます。

Outputs :

DeploymentDebugLogLevel :

DeploymentName : LogAnalytics_WorkSpace
ResourceGroupName : リソースグループ名
ProvisioningState : Succeeded
Timestamp : 作成時刻
Mode : Incremental
TemplateLink :
Parameters :
Name        Type          Value
=============== ================= ==========
workspaceName    String          test-203-20200328
location       String         japaneast
sku         String                                  PerGB2018

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

ARMテンプレートを使ってAzure Monitorのアクショングループをデプロイしてみた

 

Azure MonitorのアクショングループをARMテンプレートを利用してデプロイしてみました。今回はメール送信のアクショングループを作成してみました。下記サイトのARMテンプレートを参考に作成しています。

https://docs.microsoft.com/ja-jp/azure/azure-monitor/platform/action-groups-create-resource-manager-template

ARMテンプレート内のvariables 関数で変数を指定するようにしてます。

今回作成した内容はGithubにも公開しています。

.アクショングループで設定する内容

Azure Monitorのアラートを選択します。アクションの管理が表示されるので選択し、表示されるアクショングループの追加をクリックします。そうすると、以下の画面が表示されます。

今回、指定する値は、以下の通りになります。

  • アクショングループ名
  • 短い名前
  • サブスクリプション(デプロイ時に指定します)
  • リソースグループ(デプロイ時に指定します)
  • 操作名
  • アクションの種類(今回は電子メールを想定しま。)
  • 電子メールアドレス(アクションの種類で電子メールを選択すると入力できます)

.アクショングループのARMテンプレートを作成する

電子メールを送信するアクショングループのテンプレートは下記のようになります。テンプレート内のemailReceiversが電子メールに関するアクションを定義する項目になります。

{
 ”$schema”: “https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#”,
 ”contentVersion”: “1.0.0.0”,
 ”variables”: {
   “actionGroupName”: “アクショングループ名”,
   “actionGroupShortName”: “短い名前”,
   “OperationName”: “操作名”,
   “emailAddress”: “送信先の電子メールアドレス”
    },

  },
  ”resources”: [
  {
   ”type”: “Microsoft.Insights/actionGroups”,
   ”apiVersion”: “2018-03-01”,
   ”name”: “[variables(‘actionGroupName’)]”,
   ”location”: “Global”,
   ”properties”: {
    ”groupShortName”: “[variables(‘actionGroupShortName’)]”,
    ”enabled”: true,
    ”emailReceivers”: [
     {
     ”name”: “[variables(‘OperationName’)]”,
     ”emailAddress”: “[variables(‘emailAddress’)]”
     }
    ]
   }
  }
 ],
 ”outputs”:{
  ”actionGroupId”:{
  ”type”:”string”,
  ”value”:”[resourceId(‘Microsoft.Insights/actionGroups’,variables(‘actionGroupName’))]”
  }
 }
}

.Power ShellでARMテンプレートをデプロイする

最後に、作成したARMテンプレートをPower Shellでデプロイします。デプロイ方法は下記を参考にしています。Power Shell実行時に、Action Groupを作成するリソースグループ名を指定します。

https://docs.microsoft.com/ja-jp/azure/azure-resource-manager/templates/deploy-powershell#deploy-local-template

#テンプレートをデプロイするPowerShell
$resourceGroupName = Read-Host -Prompt “Enter the Resource Group name”
$TemplateFilePath = “テンプレートファイルのパス(ex;”C:\tmp\ActionGroup_templete.json”)”

New-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName `
-TemplateFile $TemplateFilePath
 

最後に以下のPower Shellで実際にAction Groupができているか確認します。

$resourceGroupName = “リソースグループ名”
$actionGroupName = “アクショングループ名”

Get-AzActionGroup -ResourceGroupName $resourceGroupName -Name $actionGroupName

 

ARMテンプレートを使ってSQL Serverをデプロイしてみた(ディスクサイズを指定)

 

Azure環境にVirtual Machine(Windows SQL Server)をデプロイすると、デフォルトでデータディスクが1TBで作成されてしまいます。後で修正も可能なのですが、面倒なのでデプロイ時からディスクサイズを制限するようにARMテンプレートを作成してみました。

1 .Windows SQL Serverをデプロイする為のJsonファイルを作成する。

基本的な仮想マシンの設定で作っています。適時値を入れてください。

今回は簡易的なものなので、OSのUserとパスワードは平文で記載しています。大体の設定値をvariablesで定義するように構成しています。NICとOSディスク名は仮想マシンの値を変数として取得する形で作成しています。 

データディスクのサイズは、diskSizeGBの値で指定が可能です。(今回は128GBで設定しています。)

まず、以下のPowerShellで、Windows SQL ServerのVMイメージを確認します。

#Image List get

$location=“japaneast”

#pubName Get
#Get-AzVMImagePublisher -Location $location

$pubName=“MicrosoftSQLServer”

#offer Name Get
#Get-AzVMImageOffer -Location $location -Publisher $pubName

$offerName=“SQL2008R2SP3-WS2008R2SP1”
Get-AzVMImageSku -Location $location -Publisher $pubName -Offer $offerName

JSONテンプレートサンプルになります。(今回はSQL Server 2008を選択しています。)

{
“$schema”: “https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#”,
“contentVersion”: “1.0.0.0”,
“variables”: {
  “location”: “japaneast”,

  “vmName”: “VM名”,
  “vmSize”: “Standard_B2s”,

  “adminUsername”: “User Name”,
  “adminPassword”: “Password”,

  “publisher”: “MicrosoftSQLServer”,
  “offer”: “SQL2008R2SP3-WS2008R2SP1”,
  “sku”: “Standard”,

  “nicName”: “[concat(variables(‘vmName’),’_nic’)]”,
  “addressPrefix”: “XXX.XXX.XXX.XXX/XX”,
  “subnetName”: “Subnet Name”,
  “subnetPrefix”: “XXX.XXX.XXX.XXX/XX”,
  “virtualNetworkName”: “VNET Name”,
  “subnetRef”: “[resourceId(‘Microsoft.Network/virtualNetworks/subnets’, variables(‘virtualNetworkName’), variables(‘subnetName’))]”,

  “diskName”: “[concat(variables(‘vmName’),’_os_disk’)]”,
  “DatadiskName”: “[concat(variables(‘vmName’),’_Data_disk’)]”,
  “storageAccountType”: “Standard_LRS”,

  “storageAccountName”: “Storage Account Name”

},
 “resources”: [
 {
  “type”: “Microsoft.Network/virtualNetworks”,
  “apiVersion”: “2018-11-01”,
  “name”: “[variables(‘virtualNetworkName’)]”,
  “location”: “[variables(‘location’)]”,
  “properties”: {
  “addressSpace”: {
  “addressPrefixes”: [
  “[variables(‘addressPrefix’)]”
  ]
},
 “subnets”: [
 {
  ”name”: “[variables(‘subnetName’)]”,
  ”properties”: {
  ”addressPrefix”: “[variables(‘subnetPrefix’)]”
    }
   }
  ]
 }
},
{
 ”type”: “Microsoft.Network/networkInterfaces”,
 ”apiVersion”: “2018-11-01”,
 ”name”: “[variables(‘nicName’)]”,
 ”location”: “[variables(‘location’)]”,
 ”dependsOn”: [
 ”[resourceId(‘Microsoft.Network/virtualNetworks/’, variables(‘virtualNetworkName’))]”
],
“properties”: {
 ”ipConfigurations”: [
 {
 ”name”: “ipconfig1”,
 ”properties”: {
 ”privateIPAllocationMethod”: “Dynamic”,
 ”subnet”: {
 ”id”: “[variables(‘subnetRef’)]”
     }
    }
   }
  ]
 }
},
{
 ”type”: “Microsoft.Compute/virtualMachines”,
 ”apiVersion”: “2018-10-01”,
 ”name”: “[variables(‘vmName’)]”,
 ”location”: “[variables(‘location’)]”,
 ”dependsOn”: [
 ”[resourceId(‘Microsoft.Network/networkInterfaces/’, variables(‘nicName’))]”
 ],
 ”properties”: {
 ”hardwareProfile”: {
 ”vmSize”: “[variables(‘vmSize’)]”
 },
 ”osProfile”: {
 ”computerName”: “[variables(‘vmName’)]”,
 ”adminUsername”: “[variables(‘adminUsername’)]”,
 ”adminPassword”: “[variables(‘adminPassword’)]”
 },
 ”storageProfile”: {
 ”imageReference”: {
 ”publisher”: “[variables(‘publisher’)]”,
 ”offer”: “[variables(‘offer’)]”,
 ”sku”: “[variables(‘sku’)]”,
 ”version”: “latest”
 },
 ”osDisk”: {
 ”createOption”: “FromImage”,
 ”name”: “[variables(‘diskname’)]”,
 ”managedDisk”: {
 ”storageAccountType”: “[variables(‘storageAccountType’)]”
 }
  },
 ”dataDisks”: [
 {
 ”lun”: 0,
 ”name”: “[variables(‘datadiskname’)]”,

 ”createOption”: “Empty”,
 ”managedDisk”: {
  ”storageAccountType”: “[variables(‘storageAccountType’)]”
  },
  ”diskSizeGB”: 128

  }
 ]
},
 ”networkProfile”: {
 ”networkInterfaces”: [
 {
 ”id”: “[resourceId(‘Microsoft.Network/networkInterfaces’,variables(‘nicName’))]”
 }
 ]
},
 ”diagnosticsProfile”: {
 ”bootDiagnostics”: {
 ”enabled”: true,
 ”storageUri”: “[concat(‘https://’, variables(‘storageAccountName’), ‘.blob.core.windows.net’)]”
       }
     }
   }
  }
 ]

}

2.デプロイする

テンプレート機能にJSONテンプレートを登録します。以下の内容が表示されますので、名前と説明を入力しOKを表示します。

そうすると、テンプレート画面が表示されますので、デフォルト表示されている内容を削除し、1)で作成したテンプレートをペーストしOKボタンをクリックします。 保存が完了したテンプレートを選択すると以下の画面が表示されますので、リソースグループ名を登録、使用条件に同意し、購入ボタンをクリックします。

デプロイが完了したら、リソースに移動して確認します。無事完成しているかと思います。

3.残念ながら、登録されているテンプレートを直接呼び出す方法はないそうです。(2019年12月現在)

現時点では、Azure Portalからのデプロイしかできません。

PowerShell等からのデプロイは、JSONファイルをローカルやGitHubを指定してのデプロイになります。

テンプレート機能を使ってAzure Virtual Machineをデプロイする

 

Azureにはテンプレートとういメニューがあります。このテンプレートというメニューではARMテンプレートを保存する事が出来ます。この機能にAzure Virtual Machineのテンプレートを登録してデプロイを実行する検証を実施してみました。

1 .仮想マシンをデプロイする為のJsonファイルを作成する。

基本的な仮想マシンの設定で作っています。適時値を入れてください。
なお今回は簡易的なものなので、OSのUserとパスワードは平文で記載しています。
大体の設定値をvariablesで定義するように構成しています。NICとOSディスク名は仮想マシンの値を変数として取得する形で作成しています。
なお、WindowsのVirtual Machine作成時は、以下のコマンドで、利用したいSKUの値を取得し、テンプレートのSKUの値を指定してください。

$location =“japaneast”

Get-AzVMImageSku -Location $location -PublisherName “MicrosoftWindowsServer” -Offer “WindowsServer”

CentOS7.5の場合のJSONテンプレートサンプルになります。(VMNameや、addressPrefix等を正しい値にしないと、テンプレート保存時にエラーになります。)

{
“$schema”: “https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#”,
“contentVersion”: “1.0.0.0”,
“variables”: {
 “location”: “japaneast”,       

 

 ”vmName”: “VM Name”,
 ”vmSize”: “Standard_B1s”,  

 ”adminUsername”: “testuser”,
 ”adminPassword”: “testpassword”,  

 ”publisher”: “OpenLogic”,
 ”offer”: “CentOS”,
 ”sku”: “7.5”,

 ”nicName”: “[concat(variables(‘vmName’),’_nic’)]”,
 “virtualNetworkName”: “Vnet Name”,
 ”addressPrefix”: “XXX.XXX.XXX.XXX/XX”,
 ”subnetName”: “Subnet Name”,
 ”subnetPrefix”: “XXX.XXX.XXX.XXX/XX”,
 ”subnetRef”: “[resourceId(‘Microsoft.Network/virtualNetworks/subnets’, variables(‘virtualNetworkName’), variables(‘subnetName’))]”,

 ”diskName”: “[concat(variables(‘vmName’),’_os_disk’)]”,
 ”storageAccountType”: “Standard_LRS”,

 ”storageAccountName”: “storage Account Name”

 },
“resources”: [
 {
 ”type”: “Microsoft.Network/virtualNetworks”,
 ”apiVersion”: “2018-11-01”,
 ”name”: “[variables(‘virtualNetworkName’)]”,
 ”location”: “[variables(‘location’)]”,
 ”properties”: {
 ”addressSpace”: {
 ”addressPrefixes”: [
 ”[variables(‘addressPrefix’)]”
 ]
 },
“subnets”: [
 {
 ”name”: “[variables(‘subnetName’)]”,
 ”properties”: {
 ”addressPrefix”: “[variables(‘subnetPrefix’)]”
 }}]}},
{
 ”type”: “Microsoft.Network/networkInterfaces”,
 ”apiVersion”: “2018-11-01”,
 ”name”: “[variables(‘nicName’)]”,
 ”location”: “[variables(‘location’)]”,
 ”dependsOn”: [
 ”[resourceId(‘Microsoft.Network/virtualNetworks/’, variables(‘virtualNetworkName’))]”
],
 ”properties”: {
 ”ipConfigurations”: [
{
 ”name”: “ipconfig1”,
 ”properties”: {
 ”privateIPAllocationMethod”: “Dynamic”,
 ”subnet”: {
 ”id”: “[variables(‘subnetRef’)]”
}}}]}},
{
 ”type”: “Microsoft.Compute/virtualMachines”,
 ”apiVersion”: “2018-10-01”,
 ”name”: “[variables(‘vmName’)]”,
 ”location”: “[variables(‘location’)]”,
 ”dependsOn”: [
 ”[resourceId(‘Microsoft.Network/networkInterfaces/’, variables(‘nicName’))]”
],
 ”properties”: {
 ”hardwareProfile”: {
 ”vmSize”: “[variables(‘vmSize’)]”
},
 ”osProfile”: {
 ”computerName”: “[variables(‘vmName’)]”,
 ”adminUsername”: “[variables(‘adminUsername’)]”,
 ”adminPassword”: “[variables(‘adminPassword’)]”
},
 ”storageProfile”: {
 ”imageReference”: {
 ”publisher”: “[variables(‘publisher’)]”,
 ”offer”: “[variables(‘offer’)]”,
 ”sku”: “[variables(‘sku’)]”,
 ”version”: “latest”
},
 ”osDisk”: {
 ”createOption”: “FromImage”,
 ”name”: “[variables(‘diskname’)]”,
 ”managedDisk”: {
 ”storageAccountType”: “[variables(‘storageAccountType’)]”
}}

},
 ”networkProfile”: {
 ”networkInterfaces”: [
{
 ”id”: “[resourceId(‘Microsoft.Network/networkInterfaces’,variables(‘nicName’))]”
}]},
 ”diagnosticsProfile”: {
 ”bootDiagnostics”: {
 ”enabled”: true,
 ”storageUri”: “[concat(‘https://’, variables(‘storageAccountName’), ‘.blob.core.windows.net’)]”
}}}}] }

2.デプロイする

テンプレート機能にJSONテンプレートを登録します。以下の内容が表示されますので、名前と説明を入力しOKを表示します。

そうすると、テンプレート画面が表示されますので、デフォルト表示されている内容を削除し、1)で作成したテンプレートをペーストしOKボタンをクリックします。

保存が完了したテンプレートを選択すると以下の画面が表示されますので、リソースグループ名を登録、使用条件に同意し、購入ボタンをクリックします。

Virtual Machineがデプロイされますので、完了したら、リソースに移動して確認します。無事完成しているかと思います。