【问题标题】:AWS Step Function ContainerOverrides clearing out already defined environment variablesAWS Step Function ContainerOverrides 清除已定义的环境变量
【发布时间】:2021-02-07 23:43:18
【问题描述】:

我正在使用 AWS Step Function 来调用 Fargate 容器。 ECS 任务定义定义了几个环境变量,一些具有固定值,一些来自 Systems Manager Parameter Store。状态机使用ContainerOverrides 添加了一个额外的环境变量。

不幸的是,这似乎是替换而不是添加到任务定义中指定的环境变量。

如果我没有在步骤定义中定义任何环境变量,那么任务定义中的环境变量会在运行时存在。如果我在步骤定义中定义了一个变量,那么只有来自步骤定义的变量在运行时存在。

如何让 Fargate/ECS/Step Functions 合并环境变量而不是全部替换?

状态机

{
  "Comment": "Sample State Machine",
  "StartAt": "Prerequisites",
  "States": {
    "Prerequisites": {
      "Type": "Task",
      "Resource": "arn:aws:states:::ecs:runTask.sync",
      "Parameters": {
        "Cluster": "arn:aws:ecs:us-west-2:1232123123:cluster/step-function-executor",
        "TaskDefinition": "step-function-generic-script-executor",
        "LaunchType":"FARGATE",
        "NetworkConfiguration": {
          "AwsvpcConfiguration" : {
            "AssignPublicIp" : "DISABLED",
            "SecurityGroups" : [
              "sg-123",
              "sg-456"
            ],
            "Subnets" : [
              "subnet-123" ,
              "subnet-456"
            ]
          }
        },
        "Overrides": {
          "ContainerOverrides": [
            {
              "Name": "step-function-generic-script-container",
              "Environment": [ 
                {
                  "Name": "STEP_SCRIPT_NAME",
                  "Value": "db-daily-backup-01-prereq"
                }
              ]
            }
          ]
        }
      },
      "End": true
    }
  }
}

任务定义

【问题讨论】:

    标签: amazon-web-services amazon-ecs aws-step-functions


    【解决方案1】:

    这是 ContainerOverrides 的工作方式,与它应该的工作方式相反。你有两个选择来解决这个问题:

    1. 创建一个启动状态机的 Lambda 函数。

      • 当您想要调用状态机时调用 Lambda 函数。
      • 该 Lambda 函数将调用 describe_task_definition ECS SDK 函数以获取任务定义的完整详细信息,并在为步骤函数调用 start_execution 函数时,将 Parameters 的所有内容与新/更新的环境一起传递变量。
      • Lambda 函数可以按需调度或运行。
    2. 列出状态机中的所有环境变量。

      • 就像您提到新变量一样,您也可以提及所有以前的变量。 (它有冗余的缺点)
      • 您可以对所有变量使用 SSM 参数存储,然后在状态机任务定义中也提及所有路径。

    第一个选项需要一些自定义实现,但可以让您免于手动配置。

    【讨论】:

    • 谢谢。我也计划#2,这对于所有的重复都很糟糕。最后,我将所有环境变量移到了 docker 映像本身。无法再从 AWS 更新它们,但也不必复制定义。
    猜你喜欢
    • 1970-01-01
    • 2012-12-13
    • 2012-12-13
    • 1970-01-01
    • 2017-08-18
    • 1970-01-01
    • 2021-11-12
    • 1970-01-01
    • 2022-08-26
    相关资源
    最近更新 更多