我有一个AWS :: Event :: Rule,可将S3放置事件路由到ECS任务。我可以看到该规则是从度量标准触发的,但也可以在每个触发器上看到FailedInvocation。我怀疑这是权限/策略问题,但找不到任何调试信息或日志。这些调试信息在某处可用吗?
我看到Lambda作为目标存在类似的问题,它需要Lambda方面具有额外的权限才能允许事件触发,但无法为ECS找到类似的设置? AWS Cloudformation - Invocation of Lambda by Rule Event failed
以下是相关的CloudFormation代码,该代码显示了ECS目标的当前角色:
namespace TodoApi.Controllers
{
[Route("[controller]")]
[ApiController]
public class TodoController : ControllerBase
{
//GET <base_prefix>/Todo;
[HttpGet]
public async Task<ActionResult<IEnumerable<TodoItem>>>GetTodoItems()
{
....
}
}
}
答案 0 :(得分:3)
我今天与AWS的支持工程师进行了交谈。根据他们的说法,任何FailedInvocation问题的调试都必须在资源级别完成,而不能在EventBridge级别进行调试。通过我们的聊天:
我刚刚从内部cloudwatch团队确认,cloudwatch不提供失败调用的任何日志。除了失败的调用指标之外,cloudwatch端没有可用的日志记录。 如前所述,您需要依赖lambda日志或资源日志。
换句话说,如果您的规则调用ECS(资源),则唯一可用的调试日志来自ECS,而不是来自EventBridge。我要求支持工程师代表我的团队提交功能请求,因此您也可以考虑通过AWS支持渠道进行此操作。
答案 1 :(得分:0)
问题似乎是我在InputTemplate的“ containerOverrides”中错过了一个“名称”,当我这样放置时它可以工作:
InputTemplate:
Fn::Sub: >-
{ "containerOverrides": [ {
"name": "${ServiceContainerName}",
"environment": [
{ "name":"S3_BUCKET", "value":<s3_bucket> },
{ "name":"S3_KEY", "value":<s3_key> } ]
} ] }
答案 2 :(得分:0)
我刚刚遇到了类似的情况。我已经配置了一个 EventBridge 规则来定期运行 ECS 任务,并且我观察到没有调用 ECS 任务。
然后我检查了 CloudTrail,在那里我终于找到了一个明确的错误信息:
User: arn:aws:sts::xxxx:assumed-role/Amazon_EventBridge_Invoke_ECS/xxx is not authorized to perform: ecs:RunTask on resource: arn:aws:ecs:us-east-1:xxxx:task-definition/ECS_task
表示与规则关联的角色没有足够的权限来拉取 docker 镜像。