検索
連載

【Azure】既存リソースをARMテンプレートに変換してインフラをコード化する(Azureポータル編)Tech TIPS

Azureには、既存のリソースから「ARM(Azure Resource Manager)テンプレート」というファイルをエクスポートできる。これを利用すると、Azureポータルなどから生成したリソースをコードから再デプロイしやすくなる。エクスポートの手順と注意点を説明する。

PC用表示 関連情報
Share
Tweet
LINE
Hatena
「Tech TIPS」のインデックス

連載目次

AzureリソースからARMテンプレートをエクスポート

対象:Azureポータル、ARMテンプレート、Bicep


 Azureのリソースは、Azureポータルだけではなく、ARM(Azure Resource Manager)テンプレートと呼ばれるプログラムコードからも生成できる。これを利用すれば、IaC(Infrastructure as Code)などと呼ばれるインフラのコード化が実現しやすくなる。

 ただ、既に構築済みのリソースをコード化するにはどうすれがよいのだろうか? 対象リソースがAzureポータルで作成された場合、ソースコードはないことになる。また、さまざまな事情からソースコードが失われることもあるだろう。

 そのような場合に、既存リソースをARMテンプレートに変換する(ARMテンプレートをエクスポートする)機能を利用するとよい。本Tech TIPSでは、このエクスポートの手順と注意点を説明する。ARMテンプレートについて、ある程度知っていることを前提としている点はご了承いただきたい。

■執筆時のツールのバージョン


Azureの既存リソースからARMテンプレートをエクスポートするには

 Azureの既存リソースからARMテンプレートをエクスポートするには、以下の画面のようにAzureポータルを操作する。

Azureの既存リソースからARMテンプレートをエクスポートする(1/2)
Azureの既存リソースからARMテンプレートをエクスポートする(1/2)
Azureの既存リソースからARMテンプレートをエクスポートする(2/2)
Azureの既存リソースからARMテンプレートをエクスポートする(2/2)

 対象リソースのページにも、左メニューに[オートメーション]−[テンプレートのエクスポート]が存在している。しかし、上記画面のようにリソースグループからエクスポートした方がいい(理由は後述)。

 ダウンロードされたZIPファイルを展開すると、パラメーターファイル(parameter.json)とテンプレートファイル(template.json)が取り出せるはずだ。どちらもJSON系式である。

エクスポートされたパラメーターファイル(JSON)の例
エクスポートされたパラメーターファイル(JSON)の例

エクスポートされたテンプレートファイル(JSON)の例
エクスポートされたテンプレートファイル(JSON)の例

【Azure CLI】JSON形式のARMテンプレートをBicep系式に変換するには

 JSON系式でARMテンプレートを管理しているなら、上記手順でダウンロードしたJSONファイルを編集すればよい。

 しかし、Bicep系式で管理している場合は、以下のAzure CLIのコマンドラインで、[template.json]をBicep系式に変換してから編集することになる。

az bicep decompile -f template.json



【Azure CLI】JSON形式のARMテンプレートをBicep系式に変換する
【Azure CLI】JSON形式のARMテンプレートをBicep系式に変換する

 ただし、上記画面の警告メッセージのように、完全にJSONからBicepに変換できるわけではない。そのままデプロイしようとしてもエラーが生じることがよくあるので、修正は必須と想定しておいた方がよい。

変換/生成されたBicep系式のテンプレートファイルの例
変換/生成されたBicep系式のテンプレートファイルの例

【注意】一部のリソースのテンプレートがエクスポートされないことがある

 まず、リソースグループではなく、対象リソースのページ左メニューにある[オートメーション]−[テンプレートのエクスポート]からエクスポートすると、一部のリソースがテンプレートに含まれないことがある。

 例えばメトリックアラートのようなアラートルールは、この手順だとテンプレートに含まれない。

対象リソースのページからエクスポートすると、一部のリソースが含まれないことがある(1/2)
対象リソースのページからエクスポートすると、一部のリソースが含まれないことがある(1/2)
対象リソースのページからエクスポートすると、一部のリソースが含まれないことがある(2/2)
対象リソースのページからエクスポートすると、一部のリソースが含まれないことがある(2/2)

 上記画面の手順だと、アラートルールごとにエクスポートする必要があり、結構面倒くさい。リソースグループからエクスポートするように気を付けよう。

 また、一連のデプロイに必要な対象リソースが複数あり、それらが複数のリソースグループにまたがっていることもあるだろう(筆者の場合はApp ServiceとApp Serviceプラン、Log Analyticsの組み合わせが挙げられる)。もちろんそれぞれのリソースグループをエクスポートしないと、デプロイに必要なテンプレートは揃わない。

 上記手順では、なぜかエクスポートされないリソースもある。例えばApp ServiceとLog Analytics、ストレージをひも付ける「診断設定」は、エクスポートできたことがない(この問題を解決したら本記事を更新してお知らせしたい)。この場合は、Microsoft Learnのリファレンスからテンプレートを構築せざるを得ない。

「Tech TIPS」のインデックス

Tech TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.

ページトップに戻る