SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

ARM テンプレートを使用して SQL Server IaaS Agent 拡張機能をインストールする

leave a comment

SQL Server IaaS Agent 拡張機能をインストールするためのコマンドレットとして、「Set-AzureRmVMSqlServerExtension」がありますが、IaaS Agent については、ARM テンプレートを使用してインストールすることもできます。

以前、ARM の仮想マシンに SQL Server IaaS Agent を導入してみる という投稿を書いたのですが、この際はコマンドレットを使用していましたので、今回は ARM テンプレートを使用して、「New-AzureRmResourceGroupDeployment」から登録してみたいと思います。

New-AzureRmResourceGroupDeployment では、JSON のテンプレートとパラメーターを渡すことで、デプロイができますので、最初にテンプレートを用意します。

今回は既に作成されている仮想マシンに対して IaaS Agent 拡張機能をインストールするため以下のようなテンプレートを用意します。

{
    "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "virtualMachineName": {
            "type": "String"
        },
        "location": {
            "type": "String"
        },
        "StorageAccountName": {
            "type": "String"
        },
        "sqlAutopatchingDayOfWeek": {
            "type": "String"
        },
        "sqlAutopatchingStartHour": {
            "type": "String"
        },
        "sqlAutopatchingWindowDuration": {
            "type": "String"
        },
        "sqlAutobackupRetentionPeriod": {
            "type": "String"
        },
        "sqlAutobackupEncryptionPassword": {
            "type": "SecureString"
        },
        "sqlAkvCredentialName": {
            "type": "String"
        },
        "sqlAkvUrl": {
            "type": "String"
        },
        "sqlAkvPrincipalName": {
            "type": "String"
        },
        "sqlAkvPrincipalSecret": {
            "type": "SecureString"
        }
    },
    "variables": {},
    "resources": [
        {
            "type": "Microsoft.Compute/virtualMachines/extensions",
            "name": "[concat(parameters('virtualMachineName'), '/SqlIaasExtension')]",
            "apiVersion": "2015-06-15",
            "location": "[parameters('location')]",
            "properties": {
                "type": "SqlIaaSAgent",
                "publisher": "Microsoft.SqlServer.Management",
                "typeHandlerVersion": "1.2",
                "autoUpgradeMinorVersion": "true",
                "settings": {
                    "AutoTelemetrySettings": {
                        "Region": "[parameters('location')]"
                    },
                    "AutoPatchingSettings": {
                        "PatchCategory": "WindowsMandatoryUpdates",
                        "Enable": true,
                        "DayOfWeek": "[parameters('sqlAutopatchingDayOfWeek')]",
                        "MaintenanceWindowStartingHour": "[parameters('sqlAutopatchingStartHour')]",
                        "MaintenanceWindowDuration": "[parameters('sqlAutopatchingWindowDuration')]"
                    },
                    "AutoBackupSettings": {
                        "Enable": true,
                        "RetentionPeriod": "[parameters('sqlAutobackupRetentionPeriod')]",
                        "EnableEncryption": true
                    },
                    "KeyVaultCredentialSettings": {
                        "Enable": true,
                        "CredentialName": "[parameters('sqlAkvCredentialName')]"
                    }
                },
                "protectedSettings": {
                    "StorageUrl": "[reference(resourceId('Microsoft.Storage/storageAccounts', parameters('StorageAccountName')), '2015-06-15').primaryEndpoints['blob']]",
                    "StorageAccessKey": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('StorageAccountName')), '2015-06-15').key1]",
                    "Password": "[parameters('sqlAutobackupEncryptionPassword')]",
                    "PrivateKeyVaultCredentialSettings": {
                        "AzureKeyVaultUrl": "[parameters('sqlAkvUrl')]",
                        "ServicePrincipalName": "[parameters('sqlAkvPrincipalName')]",
                        "ServicePrincipalSecret": "[parameters('sqlAkvPrincipalSecret')]"
                    }
                }
            }
        }
    ],
    "outputs": {}
}

 

IaaS Agent 拡張機能としては、以下の機能があるためそれぞれに必要となるパラメーターを指定できるようにしています。

  • 自動修正
  • 自動バックアップ
  • Azure Key Vault の統合

上記のテンプレートに対して、パラメーターを指定する方法としては、

  • パラメーターファイル
  • ハッシュテーブルの変数

を使用する方法があります。

パラメーターファイルについては以下のようなファイルを使用します。

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "virtualMachineName": {
            "value": "<仮想マシン名>"
        },
        "location": {
            "value": "japanwest"
        },
        "StorageAccountName": {
            "value": "<ストレージアカウント名>"
        },
        "sqlAutopatchingDayOfWeek": {
            "value": "Sunday"
        },
        "sqlAutopatchingStartHour": {
            "value": "2"
        },
        "sqlAutopatchingWindowDuration": {
            "value": "60"
        },
        "sqlAutobackupRetentionPeriod": {
            "value": "30"
        },
        "sqlAutobackupEncryptionPassword": {
            "value": "<暗号化パスワードのパスワード>"
        },
        "sqlAkvCredentialName": {
            "value": "<sql Server に登録する資格情報名>"
        },
        "sqlAkvUrl": {
            "value": "https://<key Vault URL>.vault.azure.net"
        },
        "sqlAkvPrincipalName": {
            "value": "<aad のアプリケーションのクライアント ID>"
        },
        "sqlAkvPrincipalSecret": {
            "value": "<aad のアプリケーションのキー>"
        }
    }
}

これらのファイルを以下のコマンドを使用してデプロイします。

New-AzureRmResourceGroupDeployment -ResourceGroupName <リソースグループ名> -TemplateFile .\template.json -TemplateParameterFile .\parameter.json

 

ハッシュテーブルの変数を使用する場合は、以下のようなコマンドを実行します。

$parameter = @{
virtualMachineName = "<仮想マシン名>"
location = "japanwest"
StorageAccountName = "<ストレージアカウント名>"
sqlAutopatchingDayOfWeek = "Sunday"
sqlAutopatchingStartHour = "2"
sqlAutopatchingWindowDuration = "60"
sqlAutobackupRetentionPeriod = "30"
sqlAutobackupEncryptionPassword = "<暗号化パスワードのパスワード>"
sqlAkvCredentialName = "<sql Server に登録する資格情報名>"
sqlAkvUrl = "https://<key Vault URL>.vault.azure.net"
sqlAkvPrincipalName = "<aad のアプリケーションのクライアント ID>"
sqlAkvPrincipalSecret ="<aad のアプリケーションのキー>"
}
New-AzureRmResourceGroupDeployment -ResourceGroupName $resourcegroup.ResourceGroupName -TemplateFile .\template.json -TemplateParameterObject $parameter

 

このテンプレートについてはポータルから SQL Server をデプロイした際に使用されているものですので、SQL Server のイメージをポータルから展開する場合にもしようすることができるかと。

Share

Written by Masayuki.Ozawa

5月 1st, 2016 at 2:25 pm

Leave a Reply