以前 AWS EC2 メンテ通知のイベントチェックスクリプトを作成しました。
合わせて、対象インスタンスを停止・起動する様にしました。
AWS [Retirement Notification] 対応
概要とある日、AWS よりこんなメール通知が来ました。 要約するとホストしている基盤のハードウェアで回復不可能な障害が検知されたので指定期限までに対応しないとインスタンスが停止する、とのこと。 今回こちらの対応をまとめました。 12345678910111213141516171…
これを AWS Lamda で Slack 通知させる様にし
毎朝メンテの必要なイベントがわかる様にしました。
事前準備
1 2
| macOS%$ pip install lambda-uploader awscli macOS%$ aws configure --profile <profile>
|
プロジェクト clone
1 2 3 4 5 6 7 8
| macOS%$ git clone https://github.com/kenzo0107/AWSEC2Events2Slack macOS%$ tree AWSEC2Events2Slack . ├── README.md ├── event.json ├── lambda.json ├── lambda_function.py └── requirements.txt
|
各種環境に合わせて情報編集
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| { "name": "AWSEvent2Slack", "description": "Notificate AWS events to Slack", "region": "ap-northeast-1", "handler": "lambda_function.lambda_handler", "role": "arn:aws:iam::xxxxxxxxxxxx:role/lambda-check-events-to-slack", "timeout": 60, "memory": 128, "variables": { "SLACK_INCOMING_WEBHOOK":"https://hooks.slack.com/services/XXXXXXXXX/XXXXXXXXX/XXXXXXXXXXXXXXXXXXXXXXXX", "SLACK_CHANNEL":"#channel", "SLACK_USERNAME":"AWSEvent2Slack", "SLACK_ICON_URL":"http://i.imgur.com/6RCTdfi.png" } }
|
Item |
Explain |
role |
EC2リソースをdescribeする権限を所持したポリシーをアタッチ |
variables |
通知先Slack情報 |
AWS Lambda へソースアップロード
1 2 3 4 5
| macOS%$ lambda-uploader --profile <profile>
λ Building Package λ Uploading Package λ Fin
|
AWSコンソールより Lambda 確認
登録されていることがわかります。
テスト実行
イベントを取得しSlackに通知させる様にすることができました。
トリガー設定
CloudWatch スケジュール式で cron 設定し 毎朝届ける様に指定しました。
総評
lambda-uploader でのアップロードにより
ローカルで開発→テスト→デプロイ
とバージョン管理が明確になって良いです。
但し、一点気になる点はアップロード後、ソースがコンソール上で見えません。
具体的には
Lambda 関数 「AWSEvent2Slack」のデプロイパッケージが大きすぎて、インラインコード編集を有効にできません。ただし、関数を今すぐ呼び出すことはできます。
とコンソール上に表示されます。
前まで zip にまとめてアップロードするシェルを書いていたけど
その時はソースは見ることができました。
ローカルで挙動確認しておりコンソール上では見えなくても今のところ支障なしです。
以上
参考になれば何よりです。