AWS :: Event :: Rule FailedInvocation调试信息吗?

时间:2019-07-16 18:05:54

标签: amazon-web-services amazon-cloudformation amazon-cloudwatch amazon-ecs

我有一个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()
        {
            ....
        }
    }
}

3 个答案:

答案 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 镜像。