CloudFormation에서 ECS 작업 일정에 다른 여러 실행 시간을 지정하고 싶습니다.
6500 단어 CloudFormationFargateECSAWS
하고 싶은 일
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
라고 하는 에러가 나왔으므로 역시 코츠코츠 쓸 수밖에 없는 것일까라고 생각합니다.
참고
원 라이너로 노력하면 좋지 않았다.
무리하지 않고 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
라고 하는 에러가 나왔으므로 역시 코츠코츠 쓸 수밖에 없는 것일까라고 생각합니다.
참고
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
YAML의 해시의 병합 등 활용하면 중복해서 쓰고 있는 곳도 좀 더 깔끔할까라고 생각했는데, 해본 곳
An error occurred (ValidationError) when calling the CreateChangeSet operation: Template error: YAML aliases are not allowed in CloudFormation templates
라고 하는 에러가 나왔으므로 역시 코츠코츠 쓸 수밖에 없는 것일까라고 생각합니다.
참고
ECS (Fargate) 배치를 CloudFormation으로 작성 👉 이번 발췌한 ECS 정의의 전체적인 이야기는 이쪽
Reference
이 문제에 관하여(CloudFormation에서 ECS 작업 일정에 다른 여러 실행 시간을 지정하고 싶습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sara_ohtani_mt2/items/bff699b8a9d3e4ed1ddc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)