みなさんこんにちは。 技術研究課の山田です。
前回の記事では PgerDuty の基本的な機能と使い方をご紹介しました。 今回は弊社が提供しているサービス、Cloud Automator と PagerDuty を組み合わせた便利な使い方をご紹介します。
Cloud Automator は AWSの運用を自動化するためのサービスで、AWSの運用に欠かせないバックアップ、インスタンスの起動 / 停止など、様々なオペレーションを自動化します。 また、当然ですがユーザが登録したジョブは必ず実行されるような非常に信頼性の高い作りになっています。
しかし、ユーザが登録するジョブの内容によってはジョブが異常終了する場合もあります。 例えば、「インスタンスA と インスタンスB を Start するジョブ」を Cloud Automator へ登録していて、あるタイミングで インスタンスB が必要無くなったため インスタンスB だけ を削除したとします。
この状態で上記ジョブを実行すると、インスタンスBが削除されているにも関わらずインスタンスBの Start 処理が実行されるためジョブは異常終了となります。
Cloud Automator を利用することで、手動による運用の手間を減らして人為的ミスのない運用が可能になります。 が、ジョブの登録作業などの「人の手で作業する箇所」はどうしてもミスが発生してしまいます。
今回は、「Cloud Automator で異常終了したジョブを PagerDuty のエスカレーションポリシーに従って複数ユーザにアサインされて通知が届く」というフローで、異常終了に早く気づく、見逃さない仕組みを作ってみましょう。
さらに、PagerDuty ではインシデント発生時に webhook のイベントを発火させる事も可能なので Slack にも同時に通知してみます。
PagerDuty のサービスを作成する
まずは前回の記事と同じく、PagerDuty のサービスを作成します。 上部メニューバーの Configuration -> Services をクリックし、Add New Service をクリックします。
各項目を入力していきます。
Name : Service へ設定する名前を入力
Notification Urgency : このサービスから発生するインシデントの緊急度を選択します。 今回は High で設定します。
Integration Type : どういう形で通知の受け口を用意するのかという設定です。 今回は Amazon CloudWatch を選択します。
Escalation Policy : 前回の記事で作成したポリシーを選択します。
すべての項目を入力後、Add service をクリックして Service を登録します。
Amazon SQS でキューを作成する
Cloud Automator のジョブが失敗した際にメッセージを送信するためのキューを作成します。 AWSのサービスメニューより、SQS を選択します。
Create New Queue をクリック、キューの名前を入力して Create Queue をクリックします。 今回は ca-fail-job というキューを作成しました。
Cloud Automator でジョブを作成する
Cloud Automator でジョブを作成します。 ジョブ作成ウィザードのステップ6で、 失敗時に実行結果をSQSメッセージで送る にチェック。 キュー名は、先程作成したキューを選択します。
Zapier で レシピを作成する
Zapier で Cloud Automator と PagerDuty を連携させるためのレシピを作成します。
Zapierは色々なWebサービス間の処理を連携してくれるサービスです。 サービスの詳細については下記URLをご参照ください。
Zappier - https://zapier.com/how-it-works/
1. トリガー と アクション の設定を行います
指定したキューに新しいメッセージが入っていた際に、PagerDuty 側でトリガーを発生させたいので トリガーアプリケーションには Amazon SQS を選択し、トリガーに New Message を選択します。 そして、アクションアプリケーションには PagerDuty を選択し、アクションに AddTrigger Event を選択します。
2. Zapier から SQS へ接続するための設定を行います
Connect a differnt Amazon SQS Account をクリックします。
アクセスキーとシークレットアクセスキーを入力し、Continue をクリックします。
3. Zapier から PagerDuty へ接続するための設定を行います
Connect a different PagerDuty Account をクリックします。
Account Name と API Key を入力します。 (API Key は、PagerDuty 管理画面の Configuration -> API Access から発行可能です)
4. トリガーアプリケーション(SQS)の設定を行います
「Cloud Automator からメッセージが入ってくるキュー」を指定するので、先ほど作成したキューを入力します。
5. アクションアプリケーション(PagerDuty)の設定を行います
PagerDuty で「どの Service のインシデントを発生させるのか」を指定するので、Service には先ほどの手順で作成したものを選択します。
最後に、レシピの名前を入力して保存します。
PagerDuty から Slack へ通知を飛ばす
PagerDuty ではインシデント発生のタイミングで、リアルタイムに外部のサービスに通知するための webhook の機能が備わっています。 webhook を利用して、Cloud Automator でジョブが失敗した場合に Slack にも通知が飛ぶようにしてみましょう。
まずは、Slack で設定を行います。 下記記事の通り webhook URL を取得します。
Slack Integration Guide https://www.pagerduty.com/docs/guides/slack-integration-guide/
続いて、PagerDuty の設定を行います。 Configuration -> Services をクリック、今回作成した Service を選択します。
Add a webhook をクリック、Endpoint URL へ 先ほど取得した URL を入力して Save をクリックします。 これで、設定はすべて完了です。
確認する
Cloud Automator でジョブが異常終了した際に、PagerDuty へ通知が為されるか確認します。 今回は「削除済みのインスタンスを指定時刻に起動させる」という、必ず異常終了するジョブを確認のために作成しました。
指定時刻になり、Cloud Automator でジョブが異常終了すると、
PagerDuty で インシデントが発生し、適切なメンバーへ通知/アサインされることを確認しました。
Slack にも通知が届くこと確認しました。 インシデントが解決したタイミングでも、 Slack に完了通知が届いています。
まとめ
Cloud Automator と PagerDuty の便利な使い方をご紹介しました。 これで、「ジョブが異常終了しているのに誰も気づかない」が無くなるはずです。