「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
- Azureでは、主にARM テンプレートを利用して、
インフラ~OS レイヤまでのインフラ構築の「自動化(IaC)」を行う
詳細 †
機能 †
入力 †
Resource Manager はテンプレートを解析し、
その構文を適切なリソース プロバイダの REST API 操作に変換する。
出力 †
既存のリソース グループのテンプレートの取得
- リソース グループの現在の状態をエクスポート
- 特定のデプロイに使用されたテンプレートを表示
構造 †
テンプレートとパラメタ・ファイルから構成される
テンプレート †
作成するリソース群を指定する(template.json)。
パラメタ・ファイル †
- 可変要素をパラメタ化する(parameters.json)。
- テンプレート実行時に外部から値を与える。
編集と実行 †
編集 †
VS Code に ARM Tools プラグインを入れ編集。
実行 †
ポータルから保存・実行すると便利。
※ ローカルで実行するには、PowerShellライブラリのインストールなど環境構築が必要になる。
作り方 †
Automation †
- スクラッチで記載するのは難しいので、
Automationオプション、Automationスクリプトを使用する。
- リソース作成時にテンプレートを引き抜く。
ポータルからのリソース作成時に、Automationオプションを確認
- リソース作成後にテンプレートを引き抜く。
リソース・グループまたはリソースから、Automationスクリプトを出力
- 以下のトレード・オフがあるので、
2つの方法を併用して作成する。
| リソース作成時にテンプレートを引き抜く。 | リソース作成後にテンプレートを引き抜く。 |
GOOD | 綺麗な JSON が入手できる | 合体(依存関係アリ、構成変更後)のJSONを入手できる。 |
BAD | ・一部の新しいリソースでサポートされていない。 ・全てがパラメタライズされた状態の JSON。 ・単体(依存関係ナシ、構成変更前)のJSONしか入手できない。 | ・リソースによっては、JSON化出来ないモノがある。 ・半端にパラメタライズされた状態の JSON。 ・余分な値や、重複した出力がされることがある。 |
サンプル †
ハブネットワークの ARMテンプレート作成
手順 †
仮想ネットワークの作成 †
リソース作成時のテンプレート引き抜き機能を使用する。
- 作成前に、Automation オプションを選択し、
ARM テンプレートとパラメタ・ファイルを引き抜く。
- テンプレート内のパラメタ値を、具体値に書き換えていく。
- template.jsonのresourcesセクションの"[parameters('XXXX')]"を、
parameters.jsonのparametersセクションの具体値に変える。
- 具体値に変えた、template.jsonのparametersセクションのパラメタを削除する。
- 動的に解決させた方がよいパラメタはGUIからの動的化を行う。
- リソース・グループ名(name)、リソースを作成する場所(location)
- "[parameters('XXXX')]"だった所を"[resourceGroup().XXXX]"に変更する。
(これでテンプレートを実行する際に与えられるパラメタを使用するらしい)
- 引き抜き後、実際にリソースを作成する。
- 作成したテンプレートを Azure ポータルから登録し、展開をテスト
- 記述にバグがある場合には配置が失敗する → 配置が成功するまで、trial and error。
サブネットの作成 †
既存リソースからのテンプレート引き抜き機能を使用する(作成時は引き抜き不可)。
- 作成後に、Automation スクリプトを選択すると、
当該リソースが含まれるリソース・グループ全体を
ARM テンプレートとパラメタ・ファイルを引き抜く。
- 引き抜かれたテンプレートの特徴。
- リソース・グループ全体が引き抜かれる。
- 既定値や、現在の状態など、余分なパラメタ値が引き抜かれる。
- サブ・リソースが独立したリソースとして展開される。
- このため、全体的に冗長になる。
- また、依存関係が展開先に変更される。
- 綺麗なテンプレートに直していく際のコツ
- コチラのテンプレートをベースに、Automation スクリプトを参考にして、
- 展開されたリソース(サブネット)を(仮想ネットワークの)サブ・リソース的に追記する。
- ココでは、サービス・エンドポイントの定義が追加されているのでコレを追記する。
- 既定値や、現在の状態など、GUIから設定していない余分な値は、移行しないようにする。
ルート・テーブル(UDR)の作成 †
同様に、既存リソースからのテンプレート引き抜き機能を使用する。
(リソース依存関係の指定がポイント)。
- Automation オプションを確認する。
(依存関係ナシ、構成変更前)
- Automation スクリプトを生成する。
(依存関係アリ、構成変更後)
- Automation スクリプトを確認する。
- ルート・テーブルが生成され、定義は、サブネット側に入る。
- ルート・テーブルのサブ・リソースのルートが重複して出力される。
- ベースのテンプレートに新規リソースとサブ・リソースの定義だけを取り込む。
- ルート・テーブルとルートの作成の定義
- サブネットに追加されたルート・テーブル割当の定義
- 最後に、コチラと同様に既定値と可変値を修正する。
- 依存関係を分析して、依存関係を設定し直す。
- 「サブネット → ルート・テーブル」の依存関係を、
- 「仮想ネットワーク → ルート・テーブル」の依存関係に修正。
再び、リソース作成時のテンプレート引き抜き機能を使用する。
(テンプレートに含めるリソースの範囲がポイント)
- 作成前に、Automation オプションを選択し、
ARM テンプレートとパラメタ・ファイルを引き抜く。
- テンプレート内のパラメタ値を、具体値に書き換えていく。
- 動的に解決させた方がよいパラメタはGUIからの動的化を行う。
- リソース作成後のテンプレート引き抜き機能を使用した後に、
リソース作成時のテンプレート引き抜き機能を使用する場合、
- (既にある前提になっているので)依存関係の追加が必要になることがある。
- この際、resourceIdを使用して、IDの動的解決が必要になることがある。
既存リソースからのテンプレート引き抜き機能に対応していない場合の扱い方
グローバル一意リソースの取り扱い
変数(variables)の使い方
仮想マシンの作成 †
評価式の修正のコツ
ポイント †
- 仮想ネットワーク作成時、
テンプレート引き抜き機能を使用して、テンプレートを新規作成。
- 以降、既存リソースからのテンプレート引き抜き機能を使用する。
- リソース作成後に引き抜く場合、
- 展開されたリソースをサブ・リソース的に追記する。
- 依存関係を分析して、依存関係を設定し直す。
- dependsOnのIDの書き方には、2種類あり、
文字列のみでの簡便な記述ができるようになっているが、指定が曖昧になりやすい。
- "Microsoft.Network/virtualNetworks/azrefarc-hub-vnet/subnets/mgmt"
- "[resourceId(resourceGroup().name, 'Microsoft.Network/virtualNetworks/subnets', 'azrefarc-hub-vnet', 'mgmt')]"
- リソース・グループ名を変えることによって、
- 並行展開が可能で素早く作業をすすめることが出来る。
- だだし、課金がされるので、並行してリソース・グループの開放を行う。
参考 †
Microsoft Azure †
Microsoft Docs †
Qiita †
- Azure Resource Manager テンプレートを
nakama †
FgCF > ゼロトラスト型マルチクラウド IT 環境 > Azure による仮想データセンタ構築手法
- > 共通技術 > ネットワーク基盤の構成方法 > ARM テンプレートの利用方法
※ 体系はコチラ、pwdはコチラ
Tags: :インフラストラクチャ, :クラウド, :Azure, :IaC