Amazon EventBridge ルールで Amazon Simple Queue Service (Amazon SQS) キューに通知を送信する設定を行いました。しかし、SQS キューはイベント通知を受信しませんでした。
解決策
EventBridge のルールメトリクスで呼び出しが失敗していないか確認する
Amazon CloudWatch コンソールで、TriggeredRules、Invocations、および FailedInvocations EventBridge メトリクスを確認してください。
TriggeredRules のデータがない場合、EventBridge ルールは実行されませんでした。この問題を解決するには、ソース設定でイベントを送信するように設定されていることを確認してください。また、ソース設定がルールのイベントパターンと一致していることを確認してください。詳細については、「EventBridge ルールに関する問題をトラブルシューティングする方法を教えてください」を参照してください。
Invocations と FailedInvocations の両方のデータが表示されている場合、呼び出しは失敗しています。これは通常、AWS Identity and Access Management (IAM) アクセス許可がないために発生します。この問題をトラブルシューティングするには、次のセクションに進んでください。
注: キューが通知を受信するかどうかを確認するには、NumberOfMessageSent メトリクスを確認します。
EventBridge にメッセージをキューに送信するために必要なアクセス許可があることを確認する
キューのリソースベースのポリシーでは、EventBridge がキューにメッセージを送信することを許可する必要があります。Service として events.amazonaws.com、Action として sqs:SendMessage を入力していることを確認してください。
実行ロールに必要なアクセス許可があることを確認する
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI のエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
実行ロールを使用する場合は、そのロールにキューを呼び出すアクセス許可があることを確認してください。EventBridge コンソールを使用してロールを作成した場合、コンソールはルールにアタッチされた IAM ロールに必要なアクセス許可を自動的に追加します。AWS CLI、AWS SDK、または AWS CloudFormation を使用してルールを作成した場合は、ロールのアクセス許可を手動で追加する必要があります。
実行ロールのアクセス許可を確認するには、次の手順を実行します。
- EventBridge コンソールを開きます。
- [ルール] をクリックし、EventBridge ルールを選択します。
- [ターゲット] タブをクリックし、ルールの IAM ロールを選択します。
- [アクセス許可] で、ポリシーと信頼関係を確認します。
ロールにキューの呼び出しを許可するポリシーの例:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sqs:SendMessage"
],
"Resource": [
"arn:aws:sqs:region:account-id:queue-name"
]
}
]
}
ロールにキューを呼び出すことを許可する信頼関係の例:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "TrustEventBridgeService",
"Effect": "Allow",
"Principal": {
"Service": "events.amazonaws.com"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"aws:SourceAccount": "account-id",
"aws:SourceArn": "arn:aws:events:region:account-id:rule/bus-name/rule-name"
}
}
}
]
}
注: arn:aws:sqs:region:account-id:queue-name をキューの Amazon リソースネーム (ARN) に、account-id を AWS アカウント ID に、arn:aws:events:region:account-id:rule/bus-name/rule-name をルール ARN に置き換えてください。
GetRole API を使用して IAM ポリシーを確認することもできます。または、次の AWS CLI コマンド get-role を実行します。
aws iam get-role \
--role-name Test-SQS-Role
注: Test-SQS-Role を実際のロール名に置き換えてください。
IAM ロールにアクセス許可がない場合は、ロールの信頼ポリシーまたはアクセス許可ポリシーを更新してください。
暗号化されたキューに必要な AWS KMS アクセス許可があることを確認する
キューが暗号化されている場合は、カスタマーマネージド AWS Key Management Service (AWS KMS) キーを作成する必要があります。次に、カスタムキーを使用してサーバー側の暗号化 (SSE) を設定します。