こんにちは、GoodpatchのProttチームでインフラを担当しています @urapico です。
今回は、メール経由で通知がくるものをどのように、Slack に集約するのかというお話です。主にAWSのお話でもあります。
サーバー監視系のソフトウェアの場合、結果をメールで通知してくるものが、いくつかあります。
例)
ただ、Prottチームでは、様々なディスカッション、CIの結果、コードレビューのメンション、DeployなどをSlack上で行っています。
なので、上記のようなソフトウェアの結果もSlackに集約できることがよりベターです。
AWS SES
まず、ソフトウェアのメールの受け先として、AWS SESを利用します。
SESは、メール送信のプラットフォームとして、非常に有名で活用している人も多いと思いますが、実は、メールを受信することも可能です。
しかも、受信可能な最大容量は、30Mと十分な容量です。
この設定を利用すれば、SESで受信したタイミングで、AWS SNSやLambdaのfunctionなどを呼び出すということが可能です。
Serverless Framework / AWS Lambda
次に、SESで受信した内容をどのようにSlackに通知する処理を動かすのかという点ですが、そのためだけにサーバーを構築するのも億劫ですし、ここは、今流行りのServerlessの力を借りたいと思います。今回は、AWS Lambdaを利用します。
Lambda を活用する場合、素の状態だと、以下の項目の管理が非常に厳しいです。
- コードの管理
- Lambda自身の権限管理
- テストコード、CI
- Deploy
- etc.
そこで、最近巷では、Lambdaを有効に活用ができるように、いくつかFrameworkが出てきています。
今回活用したのは、Serverless Framework です。 (名前からしてすごい。。。)
私は、以前に素の状態で、Lambdaを使って、画像圧縮処理などを実装した経験がありましたが、その時に感じたのは、
バージョン管理や、CIなど通常のDeploy作業などと異なり、かなり属人的で、人の手がかかる所が多く、
このまま利用し続けるのは、難しいというものでした。
ただ、このServerless Frameworkを使ったところ、その不安感を拭い去ってくれるのでした。
バージョン管理や、Deployや環境ごとに、変数の値を変更したりなど、非常に簡単にこのFramework上で扱えました。
Slackへの通知
Slackへの通知で1点気をつけないといけないことは、Slackの1ポストの容量が決まっている点です。
監視系のツールがポストしてくる量は、それを上回ることが多いため、今回は、Slackに通知すると同時に、
S3のバケットにもuploadするようにしています。
このS3に対する権限管理も Serverless Frameworkが担ってくれます。
非常にシームレスに、Serverless のアプリケーションが構築でき、非常に満足です。
その他にも活躍
Serverless Frameworkの活躍する場は、上記以外にも、色々とあると思います。
具体的には、AWS Cloudwatch logs などで集約したログを監視して、該当のログがあった場合に、それを加工して、Slackのチャンネルに投稿することも可能です。
最後に / 宿題
今回、Slackに集約することができるようになりました。
ただ、このままではサーバーの数が増えると、Slackに通知される内容が多くなり、見るのも一苦労になってしまいます。
今後の宿題として、通知の量を何かしらのコントロールして、継続的に利用できるようにしていきたいと考えています。