作成した Amazon EventBridge ルールが AWS Lambda 関数を呼び出せないため、その原因をトラブルシューティングしたいです。
解決策
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
EventBridge ルールの Amazon CloudWatch メトリクスを確認する
次の手順を実行します。
- CloudWatch コンソールを開きます。
- ナビゲーションペインの [メトリクス] で [すべてのメトリクス] を選択します。
- AWS/Events 名前空間を選択します。
- ルールの TriggeredRules、Invocations、FailedInvocations メトリクスを選択します。必要に応じて、これらのメトリクスを SUM 統計情報を使用して確認します。
注: メトリクスに FailedInvocations データポイントが含まれている場合、ルールがターゲットを呼び出せなかった可能性があります。詳細については、「EventBridge のメトリクス」を参照してください。
Lambda 関数のリソースポリシーに適切なアクセス許可があるかどうかを確認する
EventBridge コンソールを使用してルールを作成すると、コンソールは適切なアクセス許可を関数のリソースベースのポリシーに自動的に追加します。AWS CLI、AWS SDK、または AWS CloudFormation を使用してルールを作成する際は、リソースベースのポリシーでアクセス許可を手動で適用する必要があります。このアクセス許可は、EventBridge サービスに Lambda 関数を呼び出すためのアクセス許可を付与します。
ターゲット Lambda 関数に関連付けられているアクセス許可を確認する
次の手順を実行します。
- Lambda コンソールを開きます。
- ターゲットの Lambda 関数を選択します。
- [設定] タブを選択し、[アクセス許可] を選択します。
- [リソースベースのポリシー] セクションでポリシードキュメントを確認します。
**注:**または、適切な入力を指定して GetPolicy API または AWS CLI コマンド get-policy を使用し、Lambda 関数のリソースポリシーを取得します。
次のリソースポリシーの例では、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"
}
注: Resource を Lambda 関数の ARN に、SourceArn をルールの ARN に置き換えます。
リソースポリシーを更新する
次の手順を実行します。
- Lambda コンソールを開きます。
- ターゲットの Lambda 関数を選択します。
- [設定] タブを選択し、[権限] を選択します。
- [リソースベースのポリシー] セクションで [アクセス許可を追加] を選択します。
- [AWS Service - EventBridge] を選択します。
- ポリシーステートメントのオプションの識別子として、Statement ID を指定します。
- Principal には、events.amazonaws.com を使用します。
- [ソース の ARN] を EventBridge ルールの ARN に指定します。
- [アクション] では、ドロップダウンリストから [Lambda: 関数の呼び出し] を選択します。
- [保存] を選択します。
AddPermission API を使用してもポリシーを更新できます。または、次の例のような AWS CLI コマンド add-permission を実行します。
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 のターゲットに DLQ を追加します。
EventBridgeは、Amazon Simple Queue Service (Amazon SQS ) にデッドレターキュー (DLQ) を使用して、ターゲットに配信できなかったイベントを保存します。FailedInvocations を報告しているターゲットに SQS DLQ をアタッチします。DLQ からイベントを取得すると、問題の詳細を把握できます。失敗したイベントは、ターゲットに再度送信して処理できます。
次の手順を実行します。
- EventBridge コンソールで関連するルールを開きます。
- [ターゲット] から [編集] を選択し、[その他の設定] セクションを展開します。
- [デッドレターキュー] で、[現在の AWS アカウントの Amazon SQS キューを選択してデッドレターキューとして使用する] を選択します。
- DLQ として使用する SQS キューを選択します。
- DLQ を割り当てた後、変更をレビューして保存します。
関連情報
ルールを実行しても、Lambda 関数が呼び出されません
AWS Lambda のアクセス許可
EventBridge でデッドレターキューを使用して未配信イベントを処理する
Amazon EventBridge の障害復旧機能が向上しました