クラウドサービスを提供する際には、セキュリティ面での配慮は欠かせません。しかし、関連するリソースが増加し複雑になると、管理が難しくなります。
Azure上でWebアプリを運用する際、検証用の環境に構成を適用した上で試験を行い、その後、本番環境に同じ構成を適用するような運用はよくあると思います。
しかし、管理する環境が複数ある場合、それぞれの環境に対して構成を適用する必要があります。この際に、設定の漏れなどによって意図しない構成の違いが紛れ込むことで、予期しないトラブルが発生する可能性があります。
例えば、CosmosDBのTTL(Time to Live)の構成が想定と異なる場合、時間が経過して初めて動作が期待通りでないことに気付くケースも考えられます。
以前はAzureの構成をすべてExcelにまとめて、管理しておりました。
しかし、対象となるリソースが増えると、環境へ適用したものの管理している資料へ反映が漏れるなどのヒューマンエラーが発生しやすくなったり、 クラウド基盤側の変更を資料へ即座に反映することも困難でした。
そこで環境ごとの構成を直接比較できれば、環境ごとの差異も気づけるのではないかと考えました。
そんな時に役立つのが「ARMテンプレート」です。環境毎のARMテンプレートを比較することで、構成の差分も容易に確認できます。ARMテンプレートを活用することで、管理の手間を大幅に減らし、より正確な構成の確認が可能になります。
構成の差異を確認する方法
ARMテンプレート(ARM: Azure Resource Manager)とは、Azureでリソースをデプロイ及び管理するためのインフラストラクチャコード(IaC)ツールとなります。
ARMテンプレートを使用することで、各リソースの構成の全貌を確認できるため、構成の差異を比較的容易に確認することが可能です。
リソースのARMテンプレートは下記コマンドやAzureポータル上などで取得することが可能です。
Export-AzResourceGroup -ResourceGroupName "YourResourceGroupName" -Resource "YourResource" -IncludeParameterDefaultValue -Path "path/to/template.json"
※リソースグループをテンプレートとしてキャプチャし、ファイルに保存するコマンドレット
取得したリソースのテンプレートを差分比較することで、構成の差異を確認できます。
※例:「Storage Account」の構成の差分を確認するなら「Storage Account」同士のテンプレートで比較する必要があります。
下記差分例からはpathとStatusCodesの構成が誤っていることが分かります。

注意点
Azure側で更新が入ることや、リソースに対してデプロイをするだけで構成が変わる場合もあります。 ですので差分の内容を確認し、それがどういった差分なのか判断していく必要があります。 以下に、実際に問題なしと判断できた差分をいくつか紹介いたします
Azure側のリソース更新
Azure側の新機能の追加や既存機能の変更、非推奨機能の削除などが要因でapiVersionとそれに伴う構成が更新されることがあります。
デプロイ結果
AppServiceなどはデプロイすると、開始時間や終了時間などのデプロイ結果がARMテンプレート内に記載されます。
スペック
リソースによってはスペックを指定するかと思いますが、負荷状況に合わせて自動で変化する構成にしている場合はスペックの差異が出ます。
まとめ
*ARMテンプレートを活用して、各リソースの構成をコード化し、*事前にすべての検証環境の構成差分を把握することで、安心して本番環境への適用を行うことができるでしょう。これにより、構成の差異による予期しないトラブルを未然に防ぎ、安定したサービス提供が可能となります。
ARMテンプレートを活用することで、構成の差分は確認しやすくなりましたが、差分内容を確認するのにどうしても作業者のコストがかかってしまいます。
差分の抽出の仕方を自動化したり、差分の中でも問題なしと出来る差分に関しては自動判定したりなどより簡単に、早く確認できるようにすることで、運用しやすくなっていくかと思います。
最後まで読んでいただきありがとうございました。
以上が環境の構成をコード化し、差分を比較するためにARMテンプレートを活用した事例となります。

