我的 Amazon EventBridge 规则无法调用我的 Amazon Elastic Container Service (Amazon ECS) 任务。
简短描述
当您使用 EventBridge 规则调用 Amazon ECS 任务时,EventBridge 会调用 RunTask API 来运行任务。
EventBridge 规则可能由于以下原因而无法调用您的 ECS 任务:
- EventBridge 规则配置不正确。
- EventBridge 规则的目标配置不正确。
- AWS Identity and Management (IAM) 角色没有运行任务的权限。
解决方法
**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI。
检查 EventBridge 规则配置
检查 EventBridge 规则是否处于 ENABLED(已启用)状态。如果它处于 DISABLED(已禁用)状态,请重新激活该规则并执行测试以确定该规则是否可以创建任务。
要检查规则的状态,您可以使用 EventBridge 控制台或 AWS CLI。
EventBridge 控制台
完成以下步骤:
- 打开 EventBridge 控制台。
- 在导航窗格中,选择 Rules(规则)。
- 在 Select Event bus(选择事件总线)下,选择与规则关联的事件总线。
- 选择规则以查看其状态。
AWS CLI
运行以下 describe-rule 命令:
aws events describe-rule --name "DailyLambdaFunction" --region "us-east-1"
**注意:**请将 us-east-1 替换为您的 AWS 区域。
在命令的输出中,检查 State 参数以确定规则的状态。如果规则处于 DISABLED(已禁用)状态,请检查 AWS CloudTrail 日志以确定该规则被停用的原因。
确保事件模式正确且与来自事件源的事件相匹配。要验证事件模式,请使用 EventBridge 沙盒。
检查 EventBridge 规则的目标配置
请执行以下操作:
- 检查 EventBridge 规则目标的 ECS Cluster、TaskDefinition 和 Network configuration 参数,以确保它们正确无误。
- 验证 EventBridge IAM 角色是否具有运行任务所需的权限。
使用以下 Amazon CloudWatch 指标来帮助您进行故障排除:
- 检查 TriggeredRules 指标。CloudWatch 仅在事件触发规则时显示该指标。
- 使用 Invocations 指标来检查 EventBridge 调用规则然后尝试运行 ECS 任务的次数。
- 使用 FailedInvocations 指标来确定调用失败的次数。如果该值为较高的值,则您的目标配置可能不正确。
**注意:**Sum(总和)统计数据可能是检查 FailedInvocations 指标的最有用的统计数据。
确定 RunTask API 调用失败的原因
完成以下步骤:
- 打开 CloudTrail 控制台。
- 在导航窗格中,选择事件历史记录。
- 在 Lookup attributes(查找属性)下拉列表中,选择 Event name(事件名称)。
- 在文本框中,输入 RunTask 以筛选出与 RunTask API 相关的事件。
- 根据预期的 ECS 任务运行时筛选时间范围。
**注意:**时间范围的默认值为 30 分钟、1 小时、3 小时和 12 小时。要指定自定义时间范围,请选择 Absolute range(绝对范围)。
- 选择事件,然后在 Event record(事件记录)部分中查看 JSON 事件记录。在 errorCode 和 errorMessage 下查找失败原因。
使用 EventBridge DLQ
EventBridge 规则支持死信队列 (DLQ)。DLQ 使用 Amazon Simple Queue Service (Amazon SQS) 将调用失败事件存储在您指定的标准队列中。当事件规则未调用其目标时,EventBridge 会将包含调用详细信息和目标响应的 JSON 有效载荷传送到 DLQ。您可以在 DLQ 中分析失败的事件传送以解决问题。
相关信息
如何解决与 Amazon EventBridge 规则有关的问题?
How can I use a dead-letter queue to troubleshoot FailedInvocations for EventBridge rules?(如何使用死信队列对 EventBridge 规则的调用失败问题进行故障排除?)