Azureには、既存のリソースから「ARM(Azure Resource Manager)テンプレート」というファイルをエクスポートできる。これを利用すると、Azureポータルなどから生成したリソースをコードから再デプロイしやすくなる。エクスポートの手順と注意点を説明する。
対象:Azureポータル、ARMテンプレート、Bicep
Azureのリソースは、Azureポータルだけではなく、ARM(Azure Resource Manager)テンプレートと呼ばれるプログラムコードからも生成できる。これを利用すれば、IaC(Infrastructure as Code)などと呼ばれるインフラのコード化が実現しやすくなる。
ただ、既に構築済みのリソースをコード化するにはどうすれがよいのだろうか? 対象リソースがAzureポータルで作成された場合、ソースコードはないことになる。また、さまざまな事情からソースコードが失われることもあるだろう。
そのような場合に、既存リソースをARMテンプレートに変換する(ARMテンプレートをエクスポートする)機能を利用するとよい。本Tech TIPSでは、このエクスポートの手順と注意点を説明する。ARMテンプレートについて、ある程度知っていることを前提としている点はご了承いただきたい。
Azureの既存リソースからARMテンプレートをエクスポートするには、以下の画面のようにAzureポータルを操作する。
対象リソースのページにも、左メニューに[オートメーション]−[テンプレートのエクスポート]が存在している。しかし、上記画面のようにリソースグループからエクスポートした方がいい(理由は後述)。
ダウンロードされたZIPファイルを展開すると、パラメーターファイル(parameter.json)とテンプレートファイル(template.json)が取り出せるはずだ。どちらもJSON系式である。
JSON系式でARMテンプレートを管理しているなら、上記手順でダウンロードしたJSONファイルを編集すればよい。
しかし、Bicep系式で管理している場合は、以下のAzure CLIのコマンドラインで、[template.json]をBicep系式に変換してから編集することになる。
az bicep decompile -f template.json
ただし、上記画面の警告メッセージのように、完全にJSONからBicepに変換できるわけではない。そのままデプロイしようとしてもエラーが生じることがよくあるので、修正は必須と想定しておいた方がよい。
まず、リソースグループではなく、対象リソースのページ左メニューにある[オートメーション]−[テンプレートのエクスポート]からエクスポートすると、一部のリソースがテンプレートに含まれないことがある。
例えばメトリックアラートのようなアラートルールは、この手順だとテンプレートに含まれない。
上記画面の手順だと、アラートルールごとにエクスポートする必要があり、結構面倒くさい。リソースグループからエクスポートするように気を付けよう。
また、一連のデプロイに必要な対象リソースが複数あり、それらが複数のリソースグループにまたがっていることもあるだろう(筆者の場合はApp ServiceとApp Serviceプラン、Log Analyticsの組み合わせが挙げられる)。もちろんそれぞれのリソースグループをエクスポートしないと、デプロイに必要なテンプレートは揃わない。
上記手順では、なぜかエクスポートされないリソースもある。例えばApp ServiceとLog Analytics、ストレージをひも付ける「診断設定」は、エクスポートできたことがない(この問題を解決したら本記事を更新してお知らせしたい)。この場合は、Microsoft Learnのリファレンスからテンプレートを構築せざるを得ない。
■関連リンク
Copyright© Digital Advantage Corp. All Rights Reserved.