【问题标题】:EventPattern on AWS::Event::Rule needed to trigger bash script loggerAWS::Event::Rule 上的 EventPattern 需要触发 bash 脚本记录器
【发布时间】:2018-05-04 21:37:21
【问题描述】:

我们正在创建一个每 5 分钟运行一次的 cron 作业,它只是将“hello world”记录到我们的日志组中。这是通过 AWS Cloudformation 完成的,其任务只是回显“hello world”。

这是预定规则

ScheduledRule: 
Type: "AWS::Events::Rule"
Properties: 
  Description: "ScheduledRule"
  ScheduleExpression: "rate(5 minutes)"
  State: "ENABLED"
  Targets: 
    - 
      RoleArn:
        Fn::GetAtt: [ RoleNeeded, Arn ]
      Id: Cluster-Test-Cron-job
      Arn: 
        Ref: ArnOfOurClusterTheScriptShouldExecute
      EcsParameters: 
        TaskDefinitionArn: 
          Ref: TaskDefinitionThatExecutesLoggerScript
        TaskCount: 1

Cloudwatch 指标显示任务已被触发,但也表明FailedInvocation。似乎我们在这里遗漏了一些东西,ScheduleExpression 是否足以让脚本每 5 分钟执行一次?我们检查了所需的角色,它已经是与策略AmazonEC2ContainerServiceEventsRoleArnOfOurClusterTheScriptShouldExecuteTaskDefinitionThatExecutesLoggerScript 一起使用的建议和推荐角色,因为我们测试了手动使用TaskDefinitionThatExecutesLoggerScript 设置运行任务并将其记录到我们的日志组。

我找到了这个question,但这也增加了 FailedInvocation 指标。

为了让脚本能够正确执行,我们在上述设置中遗漏了什么?

【问题讨论】:

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


    【解决方案1】:

    假设我们需要一个事件模式,我们在寻找错误的方向。但问题在于角色。

    有错误的角色设置

    RoleWeNeed:
        Type: AWS::IAM::Role
    Properties:
      Path: /
      AssumeRolePolicyDocument: |
        {
            "Statement": [{
                "Effect": "Allow",
                "Principal": { "Service": [ "ecs.amazonaws.com" ]},
                "Action": [ "sts:AssumeRole" ]
            }]
        }
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceRole
        - arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceEventsRole
    

    我们尝试在通过 cloudformation 创建计划规则后手动更改它,并注意到我们使用上述设置创建的角色虽然具有正确的策略,但在角色的下拉选项中不可用。

    下面允许的策略适当地提供了策略,但这并没有发生,因为首先,使用我们的事件规则是不可见的。

    arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceEventsRole
    

    错误的设置

    AssumeRolePolicyDocument: |
        {
            "Statement": [{
                "Effect": "Allow",
                "Principal": { "Service": [ "ecs.amazonaws.com" ]},
                "Action": [ "sts:AssumeRole" ]
            }]
        }
    

    基于文档的 ecs.amazonaws.com 不会使该角色可用于预定规则所属的 Events

    在 IAM 角色中,使用角色信任策略中的 Principal 元素来指定谁可以担任该角色。

    正确的设置

    通过 events.amazonaws.com

    允许该角色可供活动访问
    AssumeRolePolicyDocument: |
        {
            "Statement": [{
                "Effect": "Allow",
                "Principal": { "Service": [ "events.amazonaws.com" ]},
                "Action": [ "sts:AssumeRole" ]
            }]
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-25
      • 1970-01-01
      • 2020-08-31
      • 2018-11-12
      • 1970-01-01
      • 1970-01-01
      • 2011-11-02
      • 1970-01-01
      相关资源
      最近更新 更多