ROMANCE DAWN for the new world

Microsoft Azure を中心とした技術情報を書いています。

Azure Logic Apps を使って Azure Container Instances の Status を 監視する

gooner.hateblo.jp
前回の記事は負荷テストでしたが、可用性テストの目的で Azure Container Instances(ACI)を使って Cypress を実行した場合に、テストが失敗したことを通知する仕組みを作ってみました。

Cypress のテスト結果を判定する

Cypress が標準出力に書き出すテスト結果を判定する方法もありますが、今回は ACI のコンテナーの Status で判定することにしました。
しかし、現時点では ACI のコンテナーが異常終了したことを検知するトリガーが提供されていません。Event Grid とかでトリガーできるようになると嬉しいかも。
EventGrid notification when ACI container stops – Customer Feedback for ACE Community Tooling
Workaround として、Logic Apps で ACI の Status を定期監視して、Failed ならメール通知する仕組みを構築することにしました。
ACI の Status は、Azure Resource Manager API を呼び出して取得します。

事前準備

とりあえず、Azure Logic Apps と Azure Container Instances を作っておきましょう。

Managed Service Identity(MSI)を設定する

Azure Resource Manager API を呼び出すには、Azure AD 認証したトークンが必要です。Logic Apps の HTTP コネクター では、Azure AD 認証を設定することもできますが、シークレットの管理が手間なので、Managed Service Identity(MSI)を利用します。

Azure Logic Apps の MSI を有効化

先ほど作成した Logic Apps の Identity メニューから、 System assigned を ON にします。

f:id:TonyTonyKun:20201022104504p:plain

Azure Container Instances に MSI を割り当てる

監視する ACI の Access Control(IAM)メニューから、ロールを追加します。Role は Reader を選択し、先ほど MSI を有効化した Logic App を指定します。

f:id:TonyTonyKun:20201022104528p:plain

Azure Logic Apps のフローを作成する

全体フロー

f:id:TonyTonyKun:20201022104544p:plain

Recurrence

定期実行する間隔を指定します。

HTTP

Azure Resource Manager API の Method と URI を指定します。
Authentication type では、Managed IdentitySystem Assigned を選択します。

f:id:TonyTonyKun:20201022104609p:plain

なお、呼び出す API の URI は、Azure Resource Manager で確認できます。

https://management.azure.com/subscriptions/<サブスクリプションID>/resourceGroups/<リソースグループ名>/providers/Microsoft.ContainerInstance/containerGroups/<ACI名>?api-version=2018-10-01

Parse JSON

API のレスポンスで受け取る JSON を解析します。Content は、Body を指定します。
Schema は、Azure Resource Manager で表示される JSON を サンプルとして貼り付けて作成します。

f:id:TonyTonyKun:20201022104625p:plain

Condition

stateFailed の場合、メールを送信する設定を行います。

f:id:TonyTonyKun:20201022104639p:plain

まとめ

Azure Logic Apps を使って Azure Container Instances の Status を 監視する仕組みを作ってみました。
今まで Logic Apps をあまり触ったことなかったのですが、今回のようなユースケースでは便利ですね。Azure CLI のコネクタがあると、さらに捗りそうです。