Lambda 関数が EventBridge ルールによってトリガーされなかったのはなぜですか。
最終更新日: 2022 年 2 月 15 日
AWS Command Line Interface (AWS CLI)、API、または AWS CloudFormation を使用して、Amazon EventBridge ルールを作成しました。しかし、ターゲットの AWS Lambda 関数が呼び出されません。AWS マネジメントコンソールで同じ EventBridge ルールを作成または更新すると、ルールは正しく機能します。これをトラブルシューティングするにはどうすればよいですか?
簡単な説明
EventBridge コンソールを使用して Lambda 関数をターゲットとして EventBridge ルールを作成すると、関数のリソースポリシーに適切な許可が自動的に追加されます。ただし、AWS CLI、SDK、または AWS CloudFormation を使用して同じルールを作成した場合は、リソースポリシーで許可をマニュアルで適用する必要があります。この許可により、Lambda 関数を呼び出すためのアクセス権限が Amazon EventBridge サービスに付与されます。
解決方法
注: AWS Command Line Interface (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 コンソールで該当するルールを開きます。
- [Select targets] (ターゲットの選択) で、[Retry policy and dead-letter queue] (ポリシーとデッドレターキューの再試行) を選択します。
- DLQ として使用する SQS キューを選択します