使用参数从 AWS::Events::Rule 开始 TaskDefinition
Start TaskDefinition from AWS::Events::Rule with parameter
我们有一个 TaskDefinition
类型的 FARGATE,它在执行 Kotlin 应用程序的 ECS 中启动一个 Docker 容器。当应用程序终止容器时,相关任务将被终止。
此 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
考虑到任务定义会完全重复,唯一的区别是环境变量,难道没有办法在规则中定义一个参数,然后将其传递给任务定义吗?
我可以看到有一个 Input
属性 可以在规则的 Target
部分指定,这似乎是一个有效的 json 字符串,但我想不通了解在任务定义方面应该如何使用它。
谢谢!
我是这样解决问题的:
Input: !Sub '{ "containerOverrides": [{"name": "container-name", "environment": [{"name":"VARIABLE", "value": "override value"}]}]}'
这将覆盖容器内传递的环境变量的值。
我们有一个 TaskDefinition
类型的 FARGATE,它在执行 Kotlin 应用程序的 ECS 中启动一个 Docker 容器。当应用程序终止容器时,相关任务将被终止。
此 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
考虑到任务定义会完全重复,唯一的区别是环境变量,难道没有办法在规则中定义一个参数,然后将其传递给任务定义吗?
我可以看到有一个 Input
属性 可以在规则的 Target
部分指定,这似乎是一个有效的 json 字符串,但我想不通了解在任务定义方面应该如何使用它。
谢谢!
我是这样解决问题的:
Input: !Sub '{ "containerOverrides": [{"name": "container-name", "environment": [{"name":"VARIABLE", "value": "override value"}]}]}'
这将覆盖容器内传递的环境变量的值。