LoginSignup
9
4

More than 5 years have passed since last update.

検証環境・本番環境など、環境毎に同様の構成でリソースグループを作成する必要があり、Azureポータルの「Automationスクリプト」メニューで得られるResource Managerテンプレート(以下、「テンプレート」と記載)を使って別環境を構築してみました。

本稿では、やってみて判ったハマりどころを踏まえ、上記要件に対するより良いアプローチを考察します。

前提

ARMの概念・用語をきちんと理解しないとテンプレート利用の理解が難しくなるため、正確に理解したい場合はまず公式サイトの説明を一読しましょう。

ちなみに、Azureポータル上では「Automationスクリプト」というメニューから選択中のリソースグループの構成をテンプレートとして出力できますが、テンプレートはAzure Automationの機能でなく、Resource Managerの機能です。「Azure Automation」でネット検索してもテンプレートの情報はヒットしないので、注意しましょう。

実施概要

  1. Azureポータルの環境Aの「Automationスクリプト」メニューから、環境Aの構成を表すテンプレートおよびパラメータファイルを取得
  2. Visual Studioで、取得したテンプレート・パラメータファイルを環境Bのものとしてアレンジ
    → リソース名や環境毎に異なる接続先URLなど
  3. Visual Studioで、環境Bのリソースグループを作成後、環境Bに変更したテンプレートをデプロイ
  4. エラーが色々出るので、修正して再デプロイ

何度か再デプロイを繰返すことで、環境のコピーは完了しました。

ハマりどころ

  • 「Automationスクリプト」の出力には、リソースの構成すべては出力されない
    • 例えば、App Serviceの「アプリ設定」は出力されない
      • 試しに、Azure Resource ExplorerでARMのREST APIがどのようなJSONを出力しているか確認したところ、それらしい項目として、properties.siteProperties.appSettings=nullがあった。しかしリファレンスを見ると、「アプリ設定」に対応する要素はproperties.siteConfig.appSettingsと記載されていて、properties.siteProperties.appSettingsという項目は定義が無い・・
      • properties.siteConfig.appSettingsを追記してデプロイすれば、期待通り「アプリ設定」は設定された
  • 「Automationスクリプト」の出力時に「◯◯のリソースを取得できませんでした。この種類のリソースはエクスポートされません。」というエラーメッセージが出るが、実際には出力されているものも多数。しかし、それを残してデプロイするとInternal Server Errorが発生したり、デプロイのレスポンスが長時間返ってこなかったりしたので、手作業で削除する必要がある
  • 元の環境で発行された値で、残したままデプロイすると、デプロイ時の指定が許可された値ではないとしてエラーになるものがある
    • SQLデータベースの「databaseId」や「creationId」など
  • 環境毎に値を変更すると考えられる設定値はパラメータファイルに切り出されて出力されているはずだが、アプリケーションゲートウェイの振り分け先URLなどパラメータに切り出されていない
    • 出力されたテンプレートファイルのうち、どの値を変更すべきか、すべて目視でチェックする必要がある
      • デフォルトで設定された項目もすべてテンプレートに記載されるため、チェックの労力はかなり大きい

考察

「Automationスクリプト」メニューの出力は、一言で言うと「一部欠落があるリソースグループのスナップショット」です。環境コピーに使うのは結構つらい作業でした。ある程度ミスが許される状況においては選択肢となりますが、正確さが求められる実運用では使えないとの所感です。

後で気付きましたが、公式ドキュメントの既存のリソースから Azure Resource Manager テンプレートをエクスポートするでも、色々課題がある旨、記載がありますね。Azureポータルの「Automationスクリプト」メニューでは「Azure Resource Manager テンプレートを使用して、1 つにまとめられた操作でリソースのデプロイを自動化します」などと表示されますが、色々できそうだと夢を膨らませてはいけないようです・・

当初、本稿の最初に記載した要件への対応として、以下の運用をできないだろうかと考えました。

  1. AzureポータルからリソースグループAの構成を設定
  2. リソースグループAの構成をエクスポート
  3. エクスポートしたファイルをリソースグループBの構成に変更
  4. リソースグループBをインポート

やってみた結果、上記運用はかなわないことがわかったので、地道に以下の運用をするしかないかな、というのが現時点の考えです。

  1. 環境毎に差異がある項目をパラメータに切り出したテンプレートを作成
    → かなり大変なはず。開発時は、まずはAzureポータルで構成してみる場合が多いと思うが、同じ構成を表すテンプレートを、リファレンスやAutomationスクリプトの出力を参考にしつつ、手作業でおこす必要がある
  2. リソースグループA向けのパラメータファイルを作成してデプロイすることで、リソースグループAを作成する
  3. リソースグループBを作成したい時は、リソースグループB向けのパラメータファイルを作成してデプロイして対応する

もっと良い方法などありましたら、コメントでご教示いただけると助かります (^_^

9
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
4