【问题标题】:Start TaskDefinition from AWS::Events::Rule with parameter使用参数从 AWS::Events::Rule 启动 TaskDefinition
【发布时间】:2021-12-18 19:26:29
【问题描述】:

我们有一个 FARGATE 类型的 TaskDefinition,它在 ECS 中启动一个 Docker 容器,该容器正在执行一个 Kotlin 应用程序。当应用程序终止时,容器和相关任务被杀死。

这个TaskDefinitionScheduledTask 启动,它以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 字符串,但我不知道应该如何在任务定义中使用它一边。

谢谢!

【问题讨论】:

标签: amazon-web-services docker scheduled-tasks amazon-ecs aws-fargate


【解决方案1】:

这就是我解决问题的方法:

Input: !Sub '{ "containerOverrides": [{"name": "container-name", "environment": [{"name":"VARIABLE", "value": "override value"}]}]}'

这是覆盖容器内传递的环境变量的值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-28
    • 1970-01-01
    相关资源
    最近更新 更多