【问题标题】:AWS::Event::Rule FailedInvocation debug info?AWS::Event::Rule FailedInvocation 调试信息?
【发布时间】:2019-11-25 12:50:08
【问题描述】:

我有一个 AWS::Event::Rule 将 S3 put 事件路由到 ECS 任务。我可以看到规则是从指标触发的,但也可以在每个触发器上看到 FailedInvocation。我怀疑这是权限/策略问题,但找不到任何调试信息或日志。这些调试信息在某处可用吗?

我看到 Lambda 作为目标有一个类似的问题,它需要 Lambda 端的额外权限才能允许从事件触发,但找不到 ECS 的类似设置? AWS Cloudformation - Invocation of Lambda by Rule Event failed

这里是相关的 CloudFormation 代码,它显示了当前角色与 ECS 目标:

Resources:
  ECSTrigger:
    Type: AWS::Events::Rule
    Properties:
      ...
      Targets: # target of trigger: ECS
        - Arn:
            Fn::Sub: 'arn:aws:ecs:${AWS::Region}:${AWS::AccountId}:cluster/${ClusterName}'
          Id: 'EcsTriggerTarget'
          InputTransformer:
            InputPathsMap:
              s3_bucket: "$.detail.requestParameters.bucketName"
              s3_key: "$.detail.requestParameters.key"
            InputTemplate: '{"containerOverrides": [{"environment": [{"name": "S3_BUCKET", "value": <s3_bucket>}, {"name": "S3_KEY", "value": <s3_key>}]}]}'
          EcsParameters:
            LaunchType: FARGATE
            PlatformVersion: LATEST
            TaskCount: 1
            TaskDefinitionArn:
              Ref: Task
            NetworkConfiguration:
              AwsVpcConfiguration:
                AssignPublicIp: DISABLED
                SecurityGroups: ...
                Subnets: ...
          RoleArn:
            Fn::GetAtt: EcsTriggerRole.Arn

  EcsTriggerRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Action: 'sts:AssumeRole'
            Principal:
              Service: 'events.amazonaws.com'
      ManagedPolicyArns:
        - Fn::Sub: 'arn:${AWS::Partition}:iam::aws:policy/service-role/AmazonEC2ContainerServiceEventsRole'

【问题讨论】:

  • 你确定你的任务定义是正确的吗?此外,如果您认为这是 IAM 问题,请尝试将 AmazonEC2ContainerServiceEventsRole 替换为 AmazonEC2ContainerServiceFullAccess。
  • 它自己的任务正在按预期运行(生成日志)。我已尝试使用管理员访问权限,但似乎无法正常工作。
  • CloudTrail 应该显示该事件 - 您可能会或可能不会得到任何有用的东西。

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


【解决方案1】:

似乎问题是我在 InputTemplate 的“containerOverrides”中错过了一个“名称”,当我这样说时它可以工作:

            InputTemplate:
              Fn::Sub: >-
                { "containerOverrides": [ {
                  "name": "${ServiceContainerName}",
                  "environment": [
                    { "name":"S3_BUCKET", "value":<s3_bucket> },
                    { "name":"S3_KEY", "value":<s3_key> } ]
                } ] }

【讨论】:

  • 但是,我仍然无法找到 FailedInvocation 的任何调试信息... : (
【解决方案2】:

我今天与 AWS 的支持工程师讨论了这个问题。根据他们的说法,调试任何 FailedInvocation 问题必须在资源级别完成,不能在 EventBridge 级别进行调试。从我们的聊天中:

我刚刚从内部 cloudwatch 团队确认,cloudwatch 不提供任何失败调用的日志。除了调用失败的指标外,cloudwatch 端没有可用的日志记录。 如前所述,您需要依赖 lambda 日志或资源日志。

换句话说,如果您的规则调用 ECS(资源),则唯一可用的调试日志来自 ECS,而不是来自 EventBridge。我要求支持工程师代表我的团队提交功能请求,因此您也可以考虑通过 AWS Support 渠道提交。

【讨论】:

    【解决方案3】:

    我刚刚遇到了类似的情况。我已经配置了一个 EventBridge 规则来定期运行 ECS 任务,并且我观察到 ECS 任务没有被调用。

    然后我检查了 CloudTrail 中的RunTask 事件,我终于发现了一个明确的错误消息:

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

    【讨论】:

    • 您在哪个事件名称下找到了这个?
    • @trademark "RunTask"
    • 这帮我解决了这个问题。由于在日志中的任何地方都找不到错误的 ARN,我能够看到 BadRequestException。谢谢!
    猜你喜欢
    • 2018-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    • 1970-01-01
    • 2020-12-06
    • 1970-01-01
    相关资源
    最近更新 更多