🐈

AWS Lambda トラブル解決に向けた原因切り分け方法#1

2023/08/18に公開

はじめに

AWS料金を毎日Slackへ通知するアプリケーションを作成
Lambdaで発生したエラーの解決に向けた原因切り分け方法を記録に残す

以下UDEMY教材を使用し、Serverlessアプリ開発を学習中
https://www.udemy.com/course/aws-lambda-serverless-framework/

エラーログ

  "errorType": "Error",
  "errorMessage": "A request error occurred: connect ECONNREFUSED 127.0.0.1:80",
  "trace": [
    "Error: A request error occurred: connect ECONNREFUSED 127.0.0.1:80",
    "    at requestErrorWithOriginal (webpack:///./node_modules/@slack/webhook/dist/errors.js?:26:33)",
    "    at IncomingWebhook.send (webpack:///./node_modules/@slack/webhook/dist/IncomingWebhook.js?:58:61)",
    "    at processTicksAndRejections (node:internal/process/task_queues:96:5)",
    "    at async Runtime.handler (webpack:///./src/costNotifier.js?:9:3)"
  ]
}

解決に向けた原因切り分け

エラーログからわかること

ECONNREFUSEDエラー
アプリケーションが127.0.0.1 (localhost) の80ポートに接続しようとして、接続が拒否されたことが分かる。通常、ローカルホストへ通信することはないため、Lambdaが正しく送信先を認識できているか確認がすべき。

"errorMessage": "A request error occurred: connect ECONNREFUSED 127.0.0.1:80"

解決に向けたステップ

  1. Slack webhookのURLが正しくAWS SSMから取得され、使用されていることを確認
    Lambda関数の環境変数を確認し、Slack webhookのURLが取得できているか確認

$[ssm:udemy-aws-lamdba_SLACK_Webhook]という値は、実際のSlackのWebhook URLに置き換えるべき変数がそのまま表示されている。この変数が正しく解決されず、デフォルトの127.0.0.1が使われてしまっている可能性が考えられる。

原因

構文エラー

正しい構文

${ssm:udemy-aws-lamdba_SLACK_Webhook}

誤った構文

$[ssm:udemy-aws-lamdba_SLACK_Webhook]

Discussion