bauer's diary

凡人の凡人による凡人のための備忘録

AWS LambdaでサーバーレスにEC2メンテナンスをslackに通知する 〜その1〜

はじめに

直近の業務で下記案件に対応する機会がありました。

EC2メンテナンスイベントが、英語のメールで通知されるだけじゃ見落としがちなのでslackに通知したい

色々な方法が考えられますが、せっかくなので興味があったAWS Lambdaを使ってみました。

手順が多かったので、数回に分けて書いていきます。

Lambdaとは?

f:id:kitakitabauer:20161211105038p:plain
AWSのサービスの一つで、サーバーのプロビジョニングや管理なしでコードを実行することができるサービスです。
aws.typepad.com
サーバーレスというのはあくまで我々サービス利用側で、仕組み的には、必要に応じてコンピュートリソース(EC2インスタンス)を起動し管理されていますが、それを意識する必要はありません。

EC2メンテナンスイベントってなに?

docs.aws.amazon.com

AWS は、インスタンスの基盤となるホストコンピュータをメンテナンスする必要があるとき、インスタンスのメンテナンスを予定します。

とあるように、EC2では、まれにインスタンスの再起動が行われます。
これは前述したメールやマネジメントコンソールのEC2のトップページに通知されますが、
見落としがちなのと、普段からコンソールにログインするとは限らないので、今回slackに通知する運びとなりました。

要件

今回の要件をまとめると、下記2点になります。

  • EC2のメンテナンス通知は、AWSから英語メールが届くものの見落としがち
  • EC2ではオーバースペックなこともあり、Lambdaでサーバレスに通知してみたい

尚、今回はAWS内部でEventが走り、slackからOutgoingで呼び出しもないため、API Gatewayの準備は不要です。

具体的にはこの流れです。

  1. 1日1回のスケジュールイベントでLambda Functionを叩く
  2. メンテナンスイベントから対象のEC2インスタンスイベントを抜きだす
  3. slackに通知する

登場人物

  1. Lambdaを実行するIAMにアタッチするポリシー
  2. スケジュール実行に必要なCloudWatch Events設定
  3. SlackのIncoming Webhooks設定/Webhook URL取得
  4. Lambda Functionの作成・実装


今回はここまでです。

次回以降、これら登場人物の詳細を説明していきます。
次回の記事はこちら。
kitakitabauer.hatenablog.com