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:1Period:60Statistic: Sum Threshold:1AlarmActions:- !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-overridesWEBHOOK=https://webhook.site/64e8d8c6-3fa2-4d68-a2a2-a87409553fff
すると Webhook.site に SubscriptionConfirmationの通知が届くので,SubscribeURLにアクセスしてサブスクライブを承認しておく❗️これで準備 OK〜

AWS Lambda 関数を実行する
今回はサンプルとして必ずエラーになる AWS Lambda 関数 (Python) をデプロイした💡
deflambda_handler(event, context): raiseException('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を実行しておくと安心かなと思う👌