LoginSignup
27

More than 5 years have passed since last update.

AWS Lambda使ってCloudWatchのAlertをSlackに飛ばしてみた

Last updated at Posted at 2015-03-27

追記(2015/06/18)

この記事はLambdaのトリガーにSNSを使えなかった時の記事です。
現在は可能ですので他の記事を参考にしてください。

Github

やりたかったこと

  • CloudWatchのアラートをSlackに飛ばしたかったので作った

やりたくなかったこと

  • 既存のやり方だとCloudWatch → 中継サーバ → Slackだった
    • 中継サーバの管理面倒くさい
    • そのためだけにサーバ立てるのも勿体無い

簡単なロジック説明

  • LambdaでCron的なことをするために、自分自身でLambdaのトリガーを発生させる
  • CloudWatchのalertを監視する
  • アラートあったらSlackに通知
  • 何度も飛ぶとうるさいのでファイルロック的なことをS3上でやる

ポイント

  • Lambdaは60秒以上の処理はタイムアウトになるので60秒以内で処理は終わらせる
  • 日本はまだLambda対応してないのでS3も海外に置く必要がある
  • 全部のアラート監視してしまうとAutoScalingとかも反応してしまうのでSNSのActionでフィルタリングした
    • これでCloudWatchのNotificationに指定したSNSのものしか飛ばない
  • プレビューなので動かなくなっても自己責任で!

設定項目

config.js
module.exports = {
  bucket              : '', // S3バケット
  s3_region           : '', // S3のリージョン
  cloudwatch_region   : '', // cloudwatchのリージョン
  sns_arn             : '', // Slack通知用のsns

  alert_key_prefix    : '', // alert用ファイルの置き場所
  alert_trigger_file  : '', // Lambdaループ用のファイル

  trigger_write_delay : 30000, // Cronっぽいことのループ間隔、目安時間なので状況によって +5秒前後する 

  slack_url           : '', // Incoming WebHooksのURL
  slack_username      : '', // Slackの通知ユーザー名
  slack_icon_url      : ''  // SlackのアイコンURL
}

作ってみて思ったこと

node.js書いたことないので結構辛かった。
callback地獄になってpromise使ってみたけど結局汚くなってしまった。
あとエラー処理結構適当なので途中で止まっちゃうかも?(再帰処理してるけどテストしてない)

Github

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27