【发布时间】:2021-12-18 19:26:29
【问题描述】:
我们有一个 FARGATE 类型的 TaskDefinition,它在 ECS 中启动一个 Docker 容器,该容器正在执行一个 Kotlin 应用程序。当应用程序终止时,容器和相关任务被杀死。
这个TaskDefinition 由ScheduledTask 启动,它以TaskDefinition 为目标:
TaskSchedule:
Type: AWS::Events::Rule
Properties:
Description: "My amazing rule"
ScheduleExpression: "cron(0 12 1 2 ? *)"
State: "ENABLED"
Targets:
- Arn:
'Fn::ImportValue': !Sub "${ApplicationName}-cluster"
Id: !Sub "${ApplicationName}-${EnvironmentName}-task-id"
RoleArn: !GetAtt TaskSchedulerRole.Arn
EcsParameters:
LaunchType: "FARGATE"
TaskCount: 1
TaskDefinitionArn: !Ref TaskDefinition
现在,我们需要两个不同的 ScheduledTask,它们将使用不同的参数启动应用程序。 该参数必须用作环境变量。
这样做的简单方法是有两个任务定义,每个都有自己的环境变量,例如:
Environment:
- Name: VARIABLE
Value: "value"
还有两个独立的AWS::Events::Rule 规则,每个都调用其任务定义:
Rule 1 -> TaskDefinition1 (with variable 1) -> start application with VARIABLE_1
Rule 2 -> TaskDefinition2 (with variable 2) -> start application with VARIABLE_2
考虑到任务定义将完全重复,唯一的区别是环境变量,难道没有办法在规则中定义一个参数,然后传递给任务定义吗?
我可以看到可以在规则的 Target 部分中指定 Input 属性,这似乎是一个有效的 json 字符串,但我不知道应该如何在任务定义中使用它一边。
谢谢!
【问题讨论】:
-
@DanielScott 我不认为这能回答我的问题,我会说它可能是这个stackoverflow.com/questions/41373167/… 的副本。我想我找到了解决方案,我会在接下来的几个小时内发布。
标签: amazon-web-services docker scheduled-tasks amazon-ecs aws-fargate