SSM Automationが失敗したら通知するCloudWatch Eventを設定してみた

こんにちは、臼田です。

皆さん、自動化してますか?(挨拶

EC2の起動停止やパッチ当てなど、まあ何でも出来ると言ってもいいSystems Managerは非常に協力なサービスです。

その中でもSSM Automationは複数の処理を束ねて自動化できるいいサービスです。

自動化して運用が安定化していると、実行結果は毎回取りに行きたくないので失敗したときだけ通知が欲しくなりますよね?

今回はそれをやってみたいと思います。なお、Automationについて書きますが、メンテナンスウインドウやその他のサービスでも同じような設定が可能です。

CloudWatch Eventから設定する

マネジメントコンソールのCloudWatchから「イベント -> ルール」を開いて「ルールの作成」を押します。

左カラムのイベントソースではまず通知のトリガーを設定します。

  • サービス名をEC2 Simple Systems Manager(SSM)を選びます(旧名ですが問題ありません)
  • イベントタイプをAutomationにします(場合によってはMaintenance Windowでもいいと思います)
  • detail typeはSpecificにしてEC2 automation Execution Status-change Notificationのみ選びます(Stepの方は処理内容一個一個に対して通知が来るのであまり必要ないです)
  • 特定のステータスとして、今回は失敗した場合にしたいのでFailed, TimeOut, Cancelledを選択します(最初は全てでもいいかと思います)

右のカラムではターゲットを指定します。SNSからメールを飛ばすなどすればいいと思います。私はSlack通知用のSNSをターゲットとしました。

右下の「設定の詳細」を押して次のページに行きます。

適当に名前や説明を入れて「ルールの作成」で完了です。

通知の内容

SSM AutomationのCloudWatch Event通知の内容はこちらにサンプルがあります。

{
  "version": "0",
  "id": "d290ece9-1088-4383-9df6-cd5b4ac42b99",
  "detail-type": "EC2 Automation Execution Status-change Notification",
  "source": "aws.ssm",
  "account": "123456789012",
  "time": "2016-11-29T19:43:35Z",
  "region": "us-east-1",
  "resources": ["arn:aws:ssm:us-east-1:123456789012:automation-execution/333ba70b-2333-48db-b17e-a5e69c6f4d1c", 
    "arn:aws:ssm:us-east-1:123456789012:automation-definition/runcommand1:1"],
  "detail": {
    "ExecutionId": "333ba70b-2333-48db-b17e-a5e69c6f4d1c",
    "Definition": "runcommand1",
    "DefinitionVersion": 1.0,
    "Status": "Success",
    "StartTime": "Nov 29, 2016 7:43:20 PM",
    "EndTime": "Nov 29, 2016 7:43:26 PM",
    "Time": 5753.0,
    "ExecutedBy": "arn:aws:iam::123456789012:user/userName"
  }
}

ステータスの状態は15行目、実行したドキュメント名は13行目にあります。加工してこのあたりを抜き出すと見やすくなるでしょう。私の環境ではSlackで下記のように通知されます。

まとめ

SSM Automationが失敗したときに通知を受け取る設定を紹介しました。

タスクの状態を確認することは仕事じゃなくて面倒な作業です。どんどんやめましょう。

SSM Automationで運用を自動化して、確認も自動化して、どんどん楽をしていきたいですね。