こんにちは。青木です。
Azure のリソース作成の自動化といえば Azure Resource Manager Template (ARM Template) や Terraform があるかと思いますが、今回は Azure Blueprints を使用した Azure のリソース作成の方法を紹介します。
注意:当記事に記載している Azure Portal の画面名や画面項目名は 2021 年 9 月時点の情報です。
Azure Blueprints は ARM Template を使用した Azure リソースの作成を自動化できます。
ARM Template 自体は 1 つのリソースグループに対してリソース作成を行いますが、Azure Blueprints では、「リソースグループの作成、ARM Template でのリソース作成」のセットを複数定義できるため、複数のリソースグループを使用する Azure アーキテクチャーの Azure リソースの構築を自動化できます。
Azure Blueprints を使用した環境構築の利点として、システム開発時に環境構築にかかる時間が、手作業による Azure リソース作成や、ARM Template のみを使用した Azure リソース作成に比べて短くなります。
特に複数の環境構築時は、Azure Blueprintsのパラメーターを変更してデプロイする作業のみで環境が構築できるため、効率的に環境構築が行えます。
注意:Azure Blueprints は 2021 年 9 月時点ではプレビュー版として提供されています。
Azure Blueprints での操作は次のような流れになります。
ブループリント定義には以下の「成果物」を定義することができます。
(公式ドキュメントには「アーティファクト」と記載されていますが、Azure Portal では「成果物」と表記されているため当記事では「成果物」と記載しています)
Azure Blueprints では以下の機能をサポートしています。
(代表的な機能を記載しています)
成果物(ARM Template 等)でパラメーターが定義されている場合、ブループリント定義から成果物に対してパラメーターとしてリソース作成に必要な情報を渡すことができます。
次の2種類のパラメーターがあります。
ブループリントの発行時、ブループリントのバージョンを指定します。
ブループリントの割り当て時に発行済みのバージョンを指定して割り当てを行います。
ブループリントを使用して作成したリソースグループ、リソースにロックを適用できます。
実際に Azure Blueprints を使用してAzure のリソースを作成してみます。
次の図のような構成のリソースを作成します。
この構成で Azure のリソースを作成するための Azure Blueprints 定義は以下になります。
ブループリントを作成していきます。
Azure Portal の「ブループリント」画面の「ブループリントの定義」より「ブループリントの作成」をクリックします。
ブループリントの作成画面が表示されるので、「空白のブループリントで始める」をクリックします。
ブループリントの作成画面の基本タブが表示されるので各項目を入力し、「次へ:成果物」をクリックします。
定義の場所では、「…」をクリックし表示される定義の場所画面より、リソース作成先のサブスクリプションを選択し、「選択」ボタンをクリックします。
ブループリントの作成画面の「成果物」タブでは、ブループリントで作成するリソースの定義を行います。
まず、リソースグループを作成する定義を追加します。
「成果物の追加」をクリックし、表示された画面の「成果物の種類」より「リソースグループ」を選択し、「追加」をクリックします。
この画面でリソースグループ名、場所を指定することも可能ですが、ブループリントの割り当て時にこれらの項目を入力する定義とします。(動的パラメーターとして定義します)
次に、リソースグループに ARM Template でストレージアカウントを作成する定義を追加します。
リソースグループの下の「成果物の追加」をクリックし、成果物の追加画面で各項目を入力し、「追加」をクリックします。
「Parameter」は、リソースグループ同様動的なパラメーターとするため、ここではデフォルトのままとします。
Template には、ストレージアカウントを作成するための ARM Template の JSON を入力します。
{ "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "storageAccountName": { "type": "string" }, "storageAccountType": { "type": "string", "defaultValue": "Standard_LRS", "allowedValues": [ "Standard_LRS", "Standard_GRS", "Standard_ZRS", "Premium_LRS" ], "metadata": { "description": "Storage Account type" } }, "location": { "type": "string", "defaultValue": "[resourceGroup().location]", "metadata": { "description": "Location for all resources." } } }, "variables": { }, "resources": [{ "type": "Microsoft.Storage/storageAccounts", "name": "[parameters('storageAccountName')]", "location": "[parameters('location')]", "apiVersion": "2018-07-01", "sku": { "name": "[parameters('storageAccountType')]" }, "kind": "StorageV2", "properties": {} }], "outputs": { "storageAccountName": { "type": "string", "value": "[parameters('storageAccountName')]" } } }
次に、リソースグループへのロールの割り当ての定義を追加します。
ここでは、共同作成者権限を割り当てる定義を追加しています。
ここまでの作業で、リソースグループの作成、リソースグループへのロールの割り当て、リソースグループにストレージアカウントを作成する定義ができました。
続いて、別のリソースグループの作成と、作成したリソースグループに Web Apps を作成する定義を行います。
操作の流れは先ほど作成したストレージアカウントの作成と同じです。
リソースグループを作成する定義を追加します。
リソースグループに ARM Template で Web Appsを作成する定義を追加します。
Template には、Web Apps を作成するための ARM Template の JSON を入力します。
{ "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "webSiteName": { "type": "string" }, "hostingPlanName": { "type": "string", "minLength": 1 }, "skuName": { "type": "string", "defaultValue": "F1", "allowedValues": [ "F1", "D1", "B1", "B2", "B3", "S1", "S2", "S3", "P1", "P2", "P3", "P4" ], "metadata": { "description": "Describes plan's pricing tier and capacity. Check details at https://azure.microsoft.com/en-us/pricing/details/app-service/" } }, "skuCapacity": { "type": "int", "defaultValue": 1, "minValue": 1, "metadata": { "description": "Describes plan's instance count" } }, "SampleAppSettingValue": { "type": "string" } }, "variables": { }, "resources": [ { "apiVersion": "2015-08-01", "name": "[parameters('hostingPlanName')]", "type": "Microsoft.Web/serverfarms", "location": "[resourceGroup().location]", "tags": { "displayName": "HostingPlan" }, "sku": { "name": "[parameters('skuName')]", "capacity": "[parameters('skuCapacity')]" }, "properties": { "name": "[parameters('hostingPlanName')]" } }, { "apiVersion": "2015-08-01", "name": "[parameters('webSiteName')]", "type": "Microsoft.Web/sites", "location": "[resourceGroup().location]", "tags": { "[concat('hidden-related:', resourceGroup().id, '/providers/Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]": "Resource", "displayName": "Website" }, "dependsOn": [ "[resourceId('Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]" ], "properties": { "name": "[parameters('webSiteName')]", "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('hostingPlanName'))]", "siteConfig": { "appSettings": [ { "name": "SampleKey1", "value": "[parameters('SampleAppSettingValue')]" } ] } } }, { "apiVersion": "2014-04-01", "name": "[concat(parameters('hostingPlanName'), '-', resourceGroup().name)]", "type": "Microsoft.Insights/autoscalesettings", "location": "[resourceGroup().location]", "tags": { "[concat('hidden-link:', resourceGroup().id, '/providers/Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]": "Resource", "displayName": "AutoScaleSettings" }, "dependsOn": [ "[resourceId('Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]" ], "properties": { "profiles": [ { "name": "Default", "capacity": { "minimum": 1, "maximum": 2, "default": 1 }, "rules": [ { "metricTrigger": { "metricName": "CpuPercentage", "metricResourceUri": "[concat(resourceGroup().id, '/providers/Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]", "timeGrain": "PT1M", "statistic": "Average", "timeWindow": "PT10M", "timeAggregation": "Average", "operator": "GreaterThan", "threshold": 80.0 }, "scaleAction": { "direction": "Increase", "type": "ChangeCount", "value": 1, "cooldown": "PT10M" } }, { "metricTrigger": { "metricName": "CpuPercentage", "metricResourceUri": "[concat(resourceGroup().id, '/providers/Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]", "timeGrain": "PT1M", "statistic": "Average", "timeWindow": "PT1H", "timeAggregation": "Average", "operator": "LessThan", "threshold": 60.0 }, "scaleAction": { "direction": "Decrease", "type": "ChangeCount", "value": 1, "cooldown": "PT1H" } } ] } ], "enabled": false, "name": "[concat(parameters('hostingPlanName'), '-', resourceGroup().name)]", "targetResourceUri": "[concat(resourceGroup().id, '/providers/Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]" } }, { "apiVersion": "2014-04-01", "name": "[parameters('webSiteName')]", "type": "Microsoft.Insights/components", "location": "East US", "dependsOn": [ "[resourceId('Microsoft.Web/sites/', parameters('webSiteName'))]" ], "tags": { "[concat('hidden-link:', resourceGroup().id, '/providers/Microsoft.Web/sites/', parameters('webSiteName'))]": "Resource", "displayName": "AppInsightsComponent" }, "properties": { "applicationId": "[parameters('webSiteName')]" } } ] }
リソースグループへのロールの割り当ての定義を追加します。
ここまでの作業でブループリント定義が完成しました。下書き保存します。
下書き保存状態のブループリントを発行することで、ブループリントの割り当てができるようになります。
ブループリントの定義画面より、先ほど作成したブループリントをクリックします。
ブループリントの画面で「ブループリントを発行する」をクリックします。
ブループリントを発行する画面で、バージョンを入力後、「公開」をクリックすることでブループリントを発行します。
バージョンには任意のバージョン番号を指定します。
Azure Portal 上で「ブループリント定義が正常に発行されました」が通知されれば発行は完了です。
ブループリントの割り当てを行うことで、ブループリント定義より Azure のリソースが作成されます。
先ほど発行したブループリントの画面で「ブループリントの割り当て」をクリックします。
ブループリントの割り当て画面で各項目を入力し「割り当て」をクリックすると割り当て作業が開始されます。
「アーティファクト パラメーター」では、リソースグループ名、リソース名等リソース作成に必要な情報を入力します。これらは割り当て時に指定する動的パラメーターとなります。
パラメーターには次の値を指定しました。(一部のみ抜粋して記載)
リソースグループ1
項目名 | 設定値 |
---|---|
リソースグループ:名前 | rg-blueprint-storage1 |
[ユーザー名またはアプリケーション名]([ユーザー名またはアプリケーション名]:共同作成者名) | テスト一郎 |
storageAccountName (ストレージアカウント) | stblueprint1 |
リソースグループ2
項目名 | 設定値 |
---|---|
リソースグループ:名前 | rg-blueprint-web |
[ユーザー名またはアプリケーション名]([ユーザー名またはアプリケーション名]:共同作成者名) | テスト一郎 |
webSiteName(Web Apps) | app-blueprint1 |
SampleAppSettingValue(Web Apps)※1 | Value1 |
※1 アプリケーション設定の設定値です(キーは ARM Template で定義)
Azure Portal 上で「ブループリント割り当てが正常に完了しました」が通知されれば割り当て成功です。
通知にも記載されていますが、デプロイ作業が開始されているため、デプロイが完了するまで待ちます。
割り当てられたブループリント画面で、デプロイの状況が確認できます。デプロイが完了すると、プロビジョニング状態が「成功」と表示されます。
デプロイが完了したので、作成されたリソースを確認していきます。
リソースグループ1、ストレージアカウントがブループリント割り当て時のパラメーターの内容で作成されていることがわかります。
リソースグループ2、Web Apps も同様に作成されています。
リソースグループへのロールの割り当ても正常に行えています。
先ほど発行したブループリント定義を使用し、別環境として Azure リソースを作成する場合は以下の操作となります。
(ブループリントの割り当ての操作は先ほど実施した操作とほぼ同じです)
割り当て名は重複できないので先ほど異なる値を入力します。
別環境として Azure リソースを作成するので、パラメーター値も先ほどと異なる値を入力します。
操作は以上です。
Azure Blueprints を使用した Azure のリソース作成を試してみました。
Azure を使用したシステム開発時に環境構築の一連の作業を Azure Blueprints に定義できるため、環境構築にかかる時間が大幅に軽減されることを実感できました。
今回紹介した内容は Azure Portal からの操作となりますが、Azure PowerShell や REST API での Azure Blueprints の操作や、ブループリント定義のコード化等面白そうな機能がそろっていますので、今後はよりディープに Azure Blueprints を学んでいこうと思います。