如何运行AWS ECS Task覆盖环境变量

sit*_*ith 18 containers amazon-web-services amazon-ecs docker aws-cli

要通过CLI覆盖环境变量,我们可以--overrides (structure)根据AWS ECS Commandline Reference使用.

如何在命令行中传递名称值对(结构或JSON)?

[
  { "name" : "NAME", "value" : "123" },
  { "name" : "DATE", "value" : "1234-12-12" },
  { "name" : "SCRIPT", "value" : "123456" }
]
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种使用AWS ECS CLI覆盖上述环境变量的方法.就像是:

aws ecs run-task --overrides <<just environment vars here>> --task-definition ...
Run Code Online (Sandbox Code Playgroud)

文件不清楚.我用Google搜索但无法帮助.

wkl*_*wkl 24

您必须提供该--overrides选项下记录的JSON文档.

{
  "containerOverrides": [
    {
      "name": "string",
      "command": ["string", ...],
      "environment": [
        {
          "name": "string",
          "value": "string"
        }
        ...
      ]
    }
    ...
  ],
  "taskRoleArn": "string"
}
Run Code Online (Sandbox Code Playgroud)

您必须指定name容器以获取环境覆盖,并指定environment键值对列表.

您可以在参数中指定JSON文档,也可以将文件路径参数传递给任务.我将展示两种方式.

在线传递JSON

您的命令看起来像这样(填写值CONTAINER_NAME_FROM_TASK).

aws ecs run-task --overrides '{ "containerOverrides": [ { "name": "CONTAINER_NAME_FROM_TASK", "environment": [ { "name": "NAME", "value": "123" }, { "name": "DATE", "value": "1234-12-12" }, { "name": "SCRIPT", "value": "123456" } ] } ] }' --task-definition (...)
Run Code Online (Sandbox Code Playgroud)

虽然这确实看起来很丑陋,但编辑也很烦人.它也只适用于Unix-y系统,并且需要在Windows中引用转义.

因此,您也可以将文件路径传递给AWS CLI,并让它从文件加载覆盖JSON.

传递文件路径参数

创建一个文件,让我们调用它overrides.json,并将相同的JSON放入其中:

{
    "containerOverrides": [{
        "name": "CONTAINER_NAME_FROM_TASK",
        "environment": [{
            "name": "NAME",
            "value": "123"
        }, {
            "name": "DATE",
            "value": "1234-12-12"
        }, {
            "name": "SCRIPT",
            "value": "123456"
        }]
    }]
}
Run Code Online (Sandbox Code Playgroud)

然后,假设您的文件位于当前目录中:

aws ecs run-task --overrides file://overrides.json --task-definition (..)
Run Code Online (Sandbox Code Playgroud)

如果您的文件位于文件系统的其他位置,并且您使用的是Linux/Unix-y系统:

aws ecs run-task --overrides file:///path/to/overrides.json --task-definition (..)
Run Code Online (Sandbox Code Playgroud)

如果您的文件位于文件系统的其他位置,并且您在Windows中执行此操作:

aws ecs run-task --overrides file://DRIVE_LETTER:\path\to\overrides.json --task-definition (..)
Run Code Online (Sandbox Code Playgroud)

  • @Ievgen不,因为这不是Terraform行为,所以是AWS CLI。如果要使用Terraform等效项,则在创建ECS任务定义时,将某些内容指定为[`container_definitions`](https://www.terraform.io/docs/providers/aws/r/ecs_task_definition.html#container_definitions)的一部分。 (2认同)