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

问题描述:

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

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

[ 
    { "name" : "NAME", "value" : "123" }, 
    { "name" : "DATE", "value" : "1234-12-12" }, 
    { "name" : "SCRIPT", "value" : "123456" } 
] 

我正在寻找一种方法来使用AWS ECS CLI覆盖上述环境变量。 类似于:

aws ecs run-task --overrides <<just environment vars here>> --task-definition ... 

文档不清楚。我google搜索,但没有帮助。

您必须提供一个JSON文档,如--overrides option所述。

{ 
    "containerOverrides": [ 
    { 
     "name": "string", 
     "command": ["string", ...], 
     "environment": [ 
     { 
      "name": "string", 
      "value": "string" 
     } 
     ... 
     ] 
    } 
    ... 
    ], 
    "taskRoleArn": "string" 
} 

您必须指定容器来获取环境覆盖的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 (...) 

虽然看起来相当丑陋,并且会让人讨厌编辑。它也只适用于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" 
     }] 
    }] 
} 

然后,假设你的文件是在当前目录

aws ecs run-task --overrides file://overrides.json --task-definition (..) 

如果你的文件其他地方的文件系统,你是一个的Linux/Unix-y坐标系上:

aws ecs run-task --overrides file:///path/to/overrides.json --task-definition (..) 

如果你的文件其他地方的文件系统和你在做此Windows

aws ecs run-task --overrides file://DRIVE_LETTER:\path\to\overrides.json --task-definition (..)