CloudFormation에서 ECS 작업 일정에 다른 여러 실행 시간을 지정하고 싶습니다.

하고 싶은 일



CloudFormation에서 ECS의 작업 일정 정의를하고 싶습니다.
시간과 분 모두 다른 여러 실행 시간을 지정하고 싶습니다.
예를 들어 매일 7:45와 13:50에 실행되도록 지정하고 싶습니다.

하나의 cron 표현이라면 잘 맞지 않습니다.


cron(45 07 * * ? *)이것만으로는 7:45 만이 될 것입니다.cron(45,50 07,13 * * ? *)이것은 7:45, 7:50, 13:45, 13:50에 실행됩니다.

crontab이면 두 줄로 나누어 쓰고 있지만
CloudFormation에서는 어떻게 쓰나요? ? ?
혹시 좋은 감기에 한 줄로 쓸 수 있나? ? ?
라고 고민했기 때문에 메모해 둡니다.

※이것의 ScheduleExpression의 지정의 이야기입니다
htps : // / cs. 아 ws. 아마존. 이 m / 그럼 _ jp / 아 WSC ぉ う ふぉ r 마치 온 / ㅁ st / 우세 r 굉장히 / 아 ws - 그렇게 r 엥 ゔ ぇ ts ぇ. HTML

우선 결론



원 라이너로 노력하면 좋지 않았다.
무리하지 않고 cfn의 TaskSchedule 부분의 정의를 7:45 실행 회분과 13:50 실행 회분의 각각 씁니다.

쓰기



cfn에서 ecs 작업의 정의는
어떤 ecs 작업을 정의하는 AWS::ECS::TaskDefinition그리고 그것을 언제 실행할지를 정의하는 AWS::Events::Rule 의 정의가 있습니다.
여기에서는 후자의 정의만 발췌합니다.

sample.yml

Resources:

# 抜粋

  TaskScheduleHoge:
    Type: AWS::Events::Rule
    Properties:
      Name: task_schedule_hoge
      State: ENABLED
      ScheduleExpression: cron(45 07 * * ? *)
      Targets:
        - Id: task_schedule_hoge
          Arn: !GetAtt Cluster.Arn
          RoleArn: !Sub arn:aws:iam::${AWS::AccountId}:role/ecsEventsRole
          EcsParameters:
            TaskDefinitionArn: !Ref taskDefinition
            TaskCount: 1
            LaunchType: FARGATE
            PlatformVersion: LATEST
            NetworkConfiguration:
              AwsVpcConfiguration:
                AssignPublicIp: DISABLED
                SecurityGroups: !Ref ServiceSecurityGroup
                Subnets: !Ref Subnets

  TaskScheduleHuga:
    Type: AWS::Events::Rule
    Properties:
      Name: task_schedule_huga
      State: ENABLED
      ScheduleExpression: cron(50 13 * * ? *)
      Targets:
        - Id: task_schedule_huga
          Arn: !GetAtt Cluster.Arn
          RoleArn: !Sub arn:aws:iam::${AWS::AccountId}:role/ecsEventsRole
          EcsParameters:
            TaskDefinitionArn: !Ref taskDefinition
            TaskCount: 1
            LaunchType: FARGATE
            PlatformVersion: LATEST
            NetworkConfiguration:
              AwsVpcConfiguration:
                AssignPublicIp: DISABLED
                SecurityGroups: !Ref ServiceSecurityGroup
                Subnets: !Ref Subnets

실행하는 것은 같은 내용의 ECS 태스크이므로 Target 부분에 쓰는 내용이 반복되는 것이 신경이 쓰이지만, cfn을 실행한 결과, 스케줄이 각각 등록되어 있는 것을 확인했습니다.





YAML의 해시의 병합 등 활용하면 중복해서 쓰고 있는 곳도 좀 더 깔끔할까라고 생각했는데, 해본 곳
An error occurred (ValidationError) when calling the CreateChangeSet operation: Template error: YAML aliases are not allowed in CloudFormation templates
라고 하는 에러가 나왔으므로 역시 코츠코츠 쓸 수밖에 없는 것일까라고 생각합니다.

참고



  • ECS (Fargate) 배치를 CloudFormation으로 작성 👉 이번 발췌한 ECS 정의의 전체적인 이야기는 이쪽
  • 공식 문서 AWS::Events::Rule 정보
  • 좋은 웹페이지 즐겨찾기