Lambda 関数が EventBridge ルールによってトリガーされなかったのはなぜですか?
最終更新日: 2022 年 8 月 10 日
AWS コマンドラインインターフェイス (AWS CLI)、API、または AWS CloudFormation を使用して、Amazon EventBridge ルールを作成しました。しかし、ターゲットの AWS Lambda 関数が呼び出されません。AWS マネジメントコンソールで同じ EventBridge ルールを作成または更新すると、ルールは正しく機能します。これをトラブルシューティングするにはどうすればよいですか?
簡単な説明
Lambda 関数をターゲットとして EventBridge ルールを作成するときは、次の点に注意してください。
- EventBridge コンソールを使用してルールを作成すると、適切な許可が関数のリソースポリシーに自動的に追加されます。
- AWS CLI、SDK、または AWS CloudFormation を使用して同じルールを作成する場合は、リソースポリシーの許可を手動で適用する必要があります。
この許可により、Lambda 関数を呼び出すためのアクセス権が Amazon EventBridge サービスに付与されます。
解決方法
注: AWS CLI コマンドの実行時にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください。
EventBridge ルールの CloudWatch メトリクスを確認する
- CloudWatch コンソールを開きます。
- 左側のナビゲーションペインの [Metrics] で、[All Metrics] を選択します。
- [AWS/Events] 名前空間を選択します。
- 確認しているルールの Invocations メトリクスと FailedInvocations メトリクスを選択します。
Invocation データポイントは、ターゲットがルールによって呼び出されたことを示します。FailedInvocations データポイントが存在する場合、ターゲットの呼び出しに問題があります。FailedInvocations は永続的な障害を表し、誤った許可またはターゲットの設定ミスが原因となっている場合があります。
Lambda 関数のリソースポリシーで適切な許可を確認する
- AWS Lambda コンソールを開きます。
- ターゲット関数を選択します。
- [Configuration] (構成) タブを選択し、[Permissions] (許可) を選択します。
- [Resource-based policy] (リソースベースのポリシー) のセクションで、ポリシードキュメントを確認します。
EventBridge が Lambda 関数を呼び出すことを許可するリソースポリシーの例を次に示します。
{
"Effect": "Allow",
"Action": "lambda:InvokeFunction",
"Resource": "arn:aws:lambda:region:account-id:function:function-name",
"Principal": {
"Service": "events.amazonaws.com"
},
"Condition": {
"ArnLike": {
"AWS:SourceArn": "arn:aws:events:region:account-id:rule/rule-name"
}
},
"Sid": "InvokeLambdaFunction"
}
注: デプロイする前に、ARN を適切なリージョン、アカウント ID、およびリソース名に置き換えてください。
また、GetPolicy API を使用して Lambda 関数のリソースポリシーを取得することもできます。
既存のリソースポリシーに必要な許可が含まれていない場合は、前述のステップを参考にしてポリシーを更新します。AWS CLI で AddPermission コマンドを使用してポリシーを更新することもできます。AddPermission コマンドの例を次に示します。
aws lambda add-permission \
--function-name MyFunction \
--statement-id MyId \
--action 'lambda:InvokeFunction' \
--principal events.amazonaws.com \
--source-arn arn:aws:events:us-east-1:123456789012:rule/MyRule
Amazon SQS デッドレターキューをターゲットに追加します
EventBridge は Amazon Simple Queue Service (Amazon SQS) DLQ を使用して、ターゲットに配信できなかったイベントを保存します。SQS DLQ は、FailedInvocations を報告するターゲットに添付できます。イベントを DLQ から取得して分析し、問題に関するさらに詳細なコンテキストを取得できます。修復が完了すると、それまでに失敗したイベントをターゲットに再送信して処理できます。
- EventBridge コンソールで関連するルールを開きます。
- [Targets] (ターゲット) で [Edit] (編集) を選択し、[Additional settings] (追加設定) セクションを展開します。
- [Dead-letter queue] (デッドレターキュー) で、[Select an Amazon SQS queue in the current AWS account to use as the dead-letter queue] (デッドレターキューとして使用する現在の AWS アカウントの Amazon SQS キューを選択) を選択します。
- DLQ として使用する SQS キューを選択します。
- DLQ が割り当てられたら、[Edit Rule] (ルールを編集) セクションの残りのステップを完了して変更を保存します。