Logic Appsを使ったARMテンプレートのエクスポート(ストレージアカウントに保管)

2021-03-28ARM Template,Azure,Logic Apps,Storage

Azure Logic Apps(ロジックアプリ)を使ったARMテンプレートのエクスポート方法のご紹介です。
ワークフローをスケジュール実行する事で、定期的にARMテンプレートをエクスポートしています。
エクスポートしたARMテンプレートはストレージアカウントのBLOBコンテナーに保管しています。

Azureリソース設定のバックアップとして定期的にARMテンプレートのエクスポートをしたかったので調べてみました。
Logic Appsの"Azure Resource Manager"コネクタに"リソース グループ テンプレートをエクスポート"というアクションがありました。

今回はARMテンプレートのエクスポートから、BLOBコンテナーへの保管までのLogic Appsワークフローを紹介します。
ARMテンプレート自体はJSON形式なのですが、1行でミニファイ(minify)された状態で出力されます。
JavaScript使ったARMテンプレートの整形方法も紹介しています。

※本記事内ではロジックアプリ(Azure Logic Apps)をLogic Appsとして表記しています。

スポンサーリンク

Logic Appsのリソース作成、マネージドID設定

Logic Appsのリソース作成

logic-arm-export-01というリソース名で作成しています。

Logic Appsのリソース作成手順についてはこちらに記載しています。
今回は従量課金(消費)(マルチテナント)のプランで作成しています。
トリガーやアクションの概要についてもこちらで紹介しています。

システム割り当てマネージドIDの有効化とロール割り当て

Logic Appsでシステム割り当てマネージドIDの設定を行います。
マネージドIDを利用して、Logic Appsのワークフローからリソースを操作する為の権限を付与します。
有効化とロールの割り当てを追加します。

    • 追加したロール
      • リソースグループに閲覧者
      • ストレージアカウントにストレージBlob共同作成者
システム割り当てマネージドIDの設定

左側のリソースメニューで"ID"を選択します。
リソースIDを有効化して、ロールの割り当てを追加します。

  • スコープ:ロールの割り当ての適用範囲
  • リソースグループ:ロールを割り当てるリソースグループ
  • リソース:ロールを割り当てるリソースグループ
  • 役割:割り当てるロール

 

マネージドIDの有効化(Azure Logic Appsのシステム割り当て済みマネージドIDの設定)
リソースグループに閲覧者の権限を割り当て(Azure Logic Appsのシステム割り当て済みマネージドIDの設定)
ストレージアカウントにストレージBLOBデータ共同作成者の権限を割り当て(Azure Logic Appsのシステム割り当て済みマネージドIDの設定)

ストレージアカウントのネットワーク設定

ストレージアカウントでネットワークアクセスの制限をしている場合は、アクセス許可設定が必要になる事があります。
手順についてはこちらで紹介しています。

—広告—

ARMテンプレートをエクスポートしてBLOBコンテナーに保管するワークワークフロー

ロジックアプリデザイナーを使ってARMテンプレートをエクスポートするワークフローを作成します。
ワークフローはスケジュール実行するようにしています。
エクスポートしたARMテンプレートはBLOBコンテナー名に保管します。
ファイル(BLOB)名には日付を付与しています。

“Azure Resource Manager"コネクタとは

Logic Apps上でAzureのリソースを管理するために用意されているコネクタです。
Logic Apps内でAzureリソースの作成、更新、削除、取得、開始、停止と言った様々な操作ができます。

Azure Resource Manager

“Azure Resource Manager"コネクタを利用したリソース操作方法についてはこちらにまとめています。
仮想マシンの起動停止を例に設定方法を紹介しています。

“リソース グループ テンプレートをエクスポート"アクションとは

リソース グループからARMテンプレートをエクスポートします。

Export a resource group template

イメージとしては、Azure PortalにもあるテンプレートのエクスポートをLogic Appsのワークフローで出来るようにした感じです。

ワークフローをスケジュール実行(トリガーを作成)

ワークフローをスケジュール実行する場合、Scheduleコネクタが利用できます。
“Schedule"コネクタの"Recurence"トリガーを利用して、毎日9時30分(日本時間)にワークフローが開始されるようにします。

ワークフローの実行スケジュール設定
“ロジックアプリデザイナー"を選択します。
“トリガーの追加"を選択します。
“Schedule"を選択します。
“Recurence"を選択します。

※ランタイムでアプリ内を選択すると早く見つける事ができます。

ScheduleコネクタでRecurrenceトリガーを選択(Azure Logic Appsのワークフロー設定画面)

実行スケジュールの設定です。
“Interval"と"Frequency"の設定を1日とします。
“Time Zone"、"At These Hours"、"At These Minutes"の設定を組み合わせて日本時間9時30分にスケジュールします。

Recurrenceのトリガーでスケジュール設定(Azure Logic Appsのワークフロー設定画面)

現在日時の取得

実行された日時をワークフロー内で取得します。
現在日時の取得には"Date Time"コネクタの"Current Time"アクションを利用します。

日時の取得
“Date Time"コネクタの"Current Time"アクションを選択します。
設定は必要ありません。
取得される日時はUTCです。
Date TimeコネクタでCurrent Timeを選択(Azure Logic Appsのワークフロー設定画面)

タイムゾーンと表示形式の変更

“Convert time zone"のアクションを使ってタイムゾーンを日本時間に変換します。
ファイル名に利用するためTime Unitの設定で年月日(20240811)に表示形式を変換します。

タイムゾーンとフォーマットの変更

“Date Time"コネクタの"Convert time zone"アクションを選択します。
“Source Time Zone"にはUTC、"Destination Time Zone"には日本時間を選択します。
Time Unitには"yyyyMMdd"と設定します。

Date TimeコネクタでConvert time zoneを選択(Azure Logic Appsのワークフロー設定画面)
Convert Time Zoneのアクション設定(Azure Logic Appsのワークフロー設定画面)

Logic Apps ワークフローの日時に関するアクションや関数についてはこちらで紹介しています。

ARMテンプレートをエクスポート

“Azure Resource Manager"コネクタにある"リソース グループ テンプレートをエクスポート"アクションを使います。
リソースIDを指定する事で、リソース単位のARMテンプレートも取得できます。

ARMテンプレートをエクスポート

“Azure Resource Manager"コネクタで、"リソース グループ テンプレートをエクスポート"アクションを選択します。

Azure Resource Managerコネクタでリソースグループテンプレートをエクスポートを選択(Azure Logic Appsのワークフロー設定画面)

“Azure Resource Manager"コネクタは接続の作成が必要です。
システム割り当てマネージドIDを選択します。

※リソース操作するための認証を行います。

Azure Resource Managerコネクタの接続作成(Azure Logic Appsのワークフロー設定画面)

サブスクリプション、リソースグループを選択します。
詳細パラメーターでエクスポート対象のリソースやエクスポートの内容を選択します。
resources Itemでエクスポート対象のリソース(リソースID)を指定します。
OptionsではエクスポートするARMテンプレートに含める内容を選択します。

※resources Itemで指定するリソースIDを"*"(アスターリスク)とする事でリソースグループのARMテンプレートをエクスポートできます。

 

 

リソースグループテンプレートをエクスポートのアクション設定(Azure Logic Appsのワークフロー設定画面)
リソースグループテンプレートをエクスポートのアクションの詳細パラメーター(Azure Logic Appsのワークフロー設定画面)
詳細パラメーターのresources Item設定(Azure Logic Appsのワークフロー設定画面)
詳細パラメーターのOptionsの選択画面(Azure Logic Appsのワークフロー設定画面)

エクスポートしたARMテンプレートをBLOBコンテナーに保管

エクスポートしたARMテンプレートをストレージアカウントのBLOBコンテナーに保管します。
ファイル(BLOB)名は、"arm-export-01-日付"としています。

BLOBコンテナーに保管
“Azure Blob Storage"コネクタで"BLOBを作成する(V2)"を選択します。 Azure Blob StorageコネクタでBLOBを作成する(V2)を選択(Azure Logic Appsのワークフロー設定画面)

“Azure Blob Storage"コネクタは接続の作成が必要です。
Logic AppsのマネージドIDを選択します。

※BLOBコンテナーでファイル(BLOB)操作するための認証を行います。

Azure Blob Storageコネクタの接続作成(Azure Logic Appsのワークフロー設定画面)

保管するストレージアカウントやBLOBコンテナーを指定します。
保管するファイル(BLOB)名を指定します。
ファイル(BLOB)名には、Convert Timeの出力値を付与しています。
BLOBコンテンツには"リソース グループ テンプレートをエクスポート"アクションのtemplateを指定します。

※body関数を利用しています。

BLOBを作成する(V2)アクションの設定(Azure Logic Appsのワークフロー設定画面)
出力するファイルの内容(Azure Logic Appsのワークフロー設定画面)
body('リソース_グループ_テンプレートをエクスポート’)['template’]

Logic AppsでのBLOBコンテナー操作方法についてはこちらで紹介しています。

完成したワークフロー

完成したワークフローです。

完成したワークフロー
“リソース グループ テンプレートをエクスポート"アクションで出力した内容を"BLOBを作成する(V2)"アクションで保管しています。 ARMテンプレートをエクスポートするAzure Logic Appsのワークフロー例

ワークフローを実行

ワークフローを実行して、実行履歴を確認します。
エクスポートしたARMテンプレートがBLOBコンテナーに保管されている事が確認できます。

ワークフローの実行履歴
ワークフローの実行履歴から、正常終了が確認できます。
BLOBコンテナーにファイル(BLOB)が作成されている事が確認できます。
ダウンロードすると、エクスポートしたARMテンプレートを確認できます。
ARMテンプレートをエクスポートするAzure Logic Appsのワークフロー実行履歴(成功例)
エクスポートされたARMテンプレートのファイル(ストレージブラウザーで表示)
エクスポートされたARMテンプレートファイル

—広告—

エクスポートしたARMテンプレートを整形する

統合アカウントの作成

ARMテンプレートの整形には"Inline Code"コネクタの"Execute JavaScript Code"を利用します。
この場合、前提条件として統合アカウントが必要になります。

統合アカウント
Inline Codeの前提条件

なお、統合アカウントは別途課金が発生します。
無料レベルもありますが、運用環境での利用は推奨されていません。

Logic Apps の価格

今回は検証目的で利用していますが、ARMテンプレートのエクスポート自体は統合アカウントなくても出来ます。
整形の処理自体はAzure Functions等でも出来ますので、利用環境や目的に応じて選択するようにします。

統合アカウント作成

統合アカウントを作成します。
統合アカウント名、リージョン、価格レベルを選択します。

リージョンはLogic Appsのリソースと同じリージョンを指定します。
価格レベルは無料を選択します。
ログ分析の有効化や統合サービス環境との関連付けは無効化します。

 

統合アカウントの作成
統合アカウントの作成画面例(基本タブ)
統合アカウントの作成確認画面

Logic Appsのリソースと統合アカウントを関連付け

Logic Appsで統合アカウントを利用するためには、関連付けが必要になります。

ワークフロー設定

左側のメニューでワークフロー設定を選択します。

統合アカウントという設定があります。
作成した統合アカウントを選択、保存します。

ロジックアプリと統合アカウントの関連付け

JavaScriptを使ったJSON形式のファイルを整形

“Inline Code"コネクタの"Execute JavaScript Code"アクションを利用してARMテンプレートを整形します。
JavaScriptコードを利用して"リソース グループ テンプレートをエクスポート"アクションの出力内容を整形します。

JSONファイルを修正

“Inline Code"コネクタの"Execute JavaScript Code"を選択します。
Code欄にJava Scriptのコードを入力します。

※data01に"リソース グループ テンプレートをエクスポート"で出力した値(Template)を設定しています。
※JSON.stringifyを使ってJSON形式に変換しています。
※改行方法は適時修正します。

Inline CodeコネクタでExecute JavaScript Codeを選択(Azure Logic Appsのワークフロー設定画面)
Execute JavaScript Codeアクションの設定画面(Azure Logic Appsのワークフロー設定画面)
Execute JavaScript Codeで動的コンテンツを選択(Azure Logic Appsのワークフロー設定画面)
var data01 = workflowContext.actions.リソース_グループ_テンプレートをエクスポート.outputs.body.template;
var data02 = JSON.stringify(data01, null, ' ');
return data02;

整形したARMテンプレートをBLOBコンテナーに保管

整形したARMテンプレートをストレージアカウントのBLOBコンテナーに保管します。
ファイル(BLOB)名は、"arm-export-02-日付.json"としています。

ファイルを保管

“Azure Blob Storage"コネクタで"BLOBを作成する(V2)"を選択します。

保管するストレージアカウントやBLOBコンテナーを指定します。
保管するファイル(BLOB)名を指定します。
ファイル(BLOB)名には、Convert Timeの出力値を付与しています。
BLOBコンテンツには"Execute JavaScript Code"アクションの結果を指定します。

※body関数を利用しています。

Azure Blob StorageコネクタでBLOBを作成する(V2)を選択(Azure Logic Appsのワークフロー設定画面)
BLOBを作成する(V2)アクションの設定(Azure Logic Appsのワークフロー設定画面)
Blobコンテンツの出力内容(Azure Logic Appsのワークフロー設定画面)

完成したワークフロー

完成したワークフローです。

完成したワークフロー
先ほどのワークフローにアクションを追加しています。 ARMテンプレートをエクスポートするAzure Logic Appsのワークフロー例(Java Scriptで体裁を整える)

ワークフローを実行

ークフローを実行して、実行履歴を確認します。
“Inline Code"コネクタの"Execute JavaScript Code"アクションを利用してARMテンプレートを整形します。
エクスポートしたARMテンプレートが、整形された形でBLOBコンテナーに保管されている事が確認できます。

ワークフローの実行履歴
ワークフローの実行履歴から、正常終了が確認できます。
BLOBコンテナーにファイル(BLOB)が作成されている事が確認できます。
エクスポートしたARMテンプレートが整形されている事を確認できます。
ARMテンプレートをエクスポートするAzure Logic Appsのワークフロー実行履歴
エクスポートされたARMテンプレートのファイル(ストレージブラウザーで表示)
エクスポートされたARMテンプレートファイル(修正済み)

—広告—

最後に

Logic Appsを使ったARMテンプレートのエクスポート方法について確認してみました。
Logic Appのワークフローを使う事で、簡単にARMテンプレートのエクスポートからBLOBコンテナーに保管まで自動化できました。
スケジュール実行できるのでとても便利かと思いました。

引き続き色々試してみたいと思います。

PowerShellを使ったARMテンプレートエクスポート方法についてはこちらで紹介しています。

スポンサーリンク