0

우리는 단순히 "hello world"를 로그 그룹에 기록하는 5 분마다 실행될 cron 작업을 만듭니다. 이것은 "hello world"를 울리는 작업으로 AWS Cloudformation으로 수행됩니다.EventPattern on AWS :: Event :: bash 스크립트 로거를 트리거하는 데 필요한 규칙

이것은

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과 함께 사용하기 위해 권장되고 권장되는 역할은 수동으로 TaskDefinitionThatExecutesLoggerScript 설정으로 작업을 테스트하고 Log Group에 기록하기 때문에 작동합니다.

이 결과는 question이지만 FailedInvocation 메트릭에 추가됩니다.

위의 설정으로 스크립트가 제대로 실행될 수 있도록 우리가 놓친 부분은 무엇입니까?

답변

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" ] 
     }] 
    }