AWS Lambda 関数の Errors メトリクスなどを Amazon CloudWatch Alarm でモニタリングして,エラー発生時に Amazon SNS と AWS Chatbot を組み合わせて Slack に通知すると Show error logs
ボタンと Show logs
ボタンが表示される✅ そして AWS Chatbot に権限を与えておくと,Amazon CloudWatch Logs から関連したログを Slack 上で取得できる.エラー発生時に迅速にエラー詳細を把握できるのは便利だと思う👌
Amazon CloudWatch Logs ロググループに注意する
便利な Show error logs
ボタンと Show logs
ボタンは AWS Lambda 関数のデフォルトの Amazon CloudWatch Logs ロググループ /aws/lambda/xxx
を前提に作られている点は注意しておくと良いと思う.ドキュメントには直接明記されていなかった(見つけられなかった)けど,挙動からそう判断した.
具体的には,2023年11月にリリースされた AWS Lambda 関数の「高度なログ制御機能」を活用して,任意の Amazon CloudWatch Logs ロググループに集約している AWS Lambda 関数でボタンを押すと I can't get the logs for the CloudWatch Alarm sandbox-errors-alarm for you because I cannot find the log group /aws/lambda/sandbox for sandbox.
というエラーが出て使えなかった(sandbox-errors-alarm
は Amazon CloudWatch Alarm 名 / sandbox
は AWS Lambda 関数名).
@aws
コマンドを使う
ボタンを押すよりも面倒ではあるけど,ワークアラウンドとして Slack 上で直接 @aws logs filter-log-events
コマンドを実行すれば,簡易的に AWS Lambda 関数のエラー詳細を把握できる.AWS Chatbot から You can also run the query directly using the following command
としてコマンド例を出してくれていたため,参考にしながら作ってみた.
ポイントを箇条書きで載せておく📝
--log-group-name
に Amazon CloudWatch Logs ロググループを指定する--log-stream-name-prefix
に Amazon CloudWatch Logs ログストリームを指定する--start-time
と--end-time
に Unix Timestamp (Milliseconds) を指定する
@aws logs filter-log-events --region ap-northeast-1 --log-group-name aggregated-function-logs --log-stream-name-prefix 2024/04/12/sandbox[$LATEST] --start-time 1712883000000 --end-time 1712883300000
その他のオプションも活用する場合は CLI ドキュメントを参考で👌
そして @aws
コマンドを使って AWS Chatbot 経由でログを取得できた.
まとめ
AWS Lambda 関数で任意の Amazon CloudWatch Logs ロググループに集約してる場合は Slack 上で AWS Chatbot の Show error logs
ボタンと Show logs
ボタンが使えず,今回は @aws
コマンドを使ってワークアラウンドを試してみた.とは言え,正直エラー発生時に @aws
コマンドを作るのは面倒ではあるため,本格的に実現するなら「カスタム Lambda アクション (Custom Lambda Action)」を実装する必要がありそう.あと @aws
コマンドの引数が多くなければ「カスタム CLI アクション (Custom CLI Action)」を使う案もありそう.