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 にします。
Azure Container Instances に MSI を割り当てる
監視する ACI の Access Control(IAM)メニューから、ロールを追加します。Role は Reader
を選択し、先ほど MSI を有効化した Logic App を指定します。
Azure Logic Apps のフローを作成する
全体フロー
Recurrence
定期実行する間隔を指定します。
HTTP
Azure Resource Manager API の Method と URI を指定します。
Authentication type では、Managed Identity
の System Assigned
を選択します。
なお、呼び出す 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 を サンプルとして貼り付けて作成します。
Condition
state
が Failed
の場合、メールを送信する設定を行います。
まとめ
Azure Logic Apps を使って Azure Container Instances の Status を 監視する仕組みを作ってみました。
今まで Logic Apps をあまり触ったことなかったのですが、今回のようなユースケースでは便利ですね。Azure CLI のコネクタがあると、さらに捗りそうです。