AWS :: Event :: Rule上的EventPattern需要触发bash脚本记录器

时间:2017-11-21 12:10:46

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

我们正在创建一个每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分钟执行一次吗?我们检查了所需的角色,并且已经建议和建议的角色与策略AmazonEC2ContainerServiceEventsRole一起使用,ArnOfOurClusterTheScriptShouldExecuteTaskDefinitionThatExecutesLoggerScript也起作用,因为我们测试了使用{{1}运行任务手动设置并将其记录到我们的日志组。

我发现了这个question,但这也增加了FailedInvocation指标。

我们错过了上面的设置让我们允许脚本正确执行?

1 个答案:

答案 0 :(得分:0)

假设我们需要一个事件模式,我们看错了方向。但是这个角色就是问题所在。

有错误的角色设置

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 不会使该角色可用于计划规则所属的事件

  

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

正确的设置

允许该角色可以通过 events.amazonaws.com

进行活动访问
AssumeRolePolicyDocument: |
    {
        "Statement": [{
            "Effect": "Allow",
            "Principal": { "Service": [ "events.amazonaws.com" ]},
            "Action": [ "sts:AssumeRole" ]
        }]
    }