
LocalStack を使って AWS Lambda 関数の Errors メトリクスをモニタリングして Amazon CloudWatch Alarm と Amazon SNS でアラートするアーキテクチャを試してみた❗️LocalStack(無料版)ですべて試せる〜 \( 'ω')/

Webhook.site
今回は Amazon SNS からアラートを受け取るお手軽な環境として Webhook.site を使う.検証用途などに使える一時的な Webhook URL を発行できて,Amazon SNS の HTTPS エンドポイントとしてサブスクライブできる👌ウェブサイトにアクセスして Your unique URL に表示されている URL をコピーしておく.
デプロイ
まずは AWS SAM (AWS CloudFormation) で LocalStack 上に検証環境をデプロイする.
AWSTemplateFormatVersion: 2010-09-09 Transform: AWS::Serverless-2016-10-31 Parameters: WEBHOOK: Type: String AllowedPattern: https://webhook.site/.* Resources: Function: Type: AWS::Serverless::Function Properties: FunctionName: sandbox CodeUri: ./src Handler: app.lambda_handler Runtime: python3.12 Architectures: - x86_64 Alarm: Type: AWS::CloudWatch::Alarm Properties: AlarmName: function-errors MetricName: Errors Namespace: AWS/Lambda ComparisonOperator: GreaterThanOrEqualToThreshold EvaluationPeriods: 1 Period: 60 Statistic: Sum Threshold: 1 AlarmActions: - !Ref Topic Dimensions: - Name: FunctionName Value: !Ref Function Topic: Type: AWS::SNS::Topic Properties: DisplayName: alerts Subscription: - Protocol: https Endpoint: !Ref WEBHOOK
そして samlocal コマンドを使ってデプロイする.なお,デプロイ時の WEBHOOK パラメータには取得した Webhook.site の URL を設定しておく.
$ samlocal build $ samlocal deploy --parameter-overrides WEBHOOK=https://webhook.site/64e8d8c6-3fa2-4d68-a2a2-a87409553fff
すると Webhook.site に SubscriptionConfirmation の通知が届くので,SubscribeURL にアクセスしてサブスクライブを承認しておく❗️これで準備 OK〜

AWS Lambda 関数を実行する
今回はサンプルとして必ずエラーになる AWS Lambda 関数 (Python) をデプロイした💡
def lambda_handler(event, context): raise Exception('Always an error!')
さっそく awslocal コマンドを使って AWS Lambda 関数を実行する.
$ awslocal lambda invoke --function-name sandbox outputs.json { "StatusCode": 200, "FunctionError": "Unhandled", "ExecutedVersion": "$LATEST" }
すると Webhook.site にアラートが届いた👌

LocalStack Resource Browser
LocalStack Resource Browser で Amazon CloudWatch の Alarms を開くと,期待通りに AWS Lambda 関数 sandbox の Errors メトリクスが 1 になっていた❗️

お掃除
念のため Webhook.site の More メニューで Delete URL を実行しておくと安心かなと思う👌