Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to run AWS ECS Task overriding environment variables

To override environment variables via CLI we may use --overrides (structure) according to AWS ECS Commandline Reference.

How to pass name value pairs (structure or JSON) in command line?

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

I'm looking for a way to override above environment variables using AWS ECS CLI. Something like:

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

Documentation is not clear. I googled but couldn't help.

like image 488
sith Avatar asked Dec 29 '16 04:12

sith


1 Answers

You have to provide a JSON document as documented under the --overrides option.

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

You have to specify the name of the container to get the environment override, and specify a list of environment key-value pairs.

You can specify the JSON document in-line with your argument or pass a file path argument to the task. I will show both ways.

Passing JSON in-line

Your command would look like this (fill in the value 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 (...) 

That does look rather ugly though, and would be annoying to edit. It also only works on Unix-y systems and would require quote escaping in Windows.

So alternatively, you can pass a file path to the AWS CLI and have it load your override JSON from a file.

Passing a file path argument

Create a file, let's call it overrides.json, and put the same JSON into it:

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

Then, assuming your file is in the current directory:

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

If your file is elsewhere in the filesystem and you're on a Linux/Unix-y system:

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

If your file is elsewhere in the filesystem and you're doing this in Windows:

aws ecs run-task --overrides file://DRIVE_LETTER:\path\to\overrides.json --task-definition (..) 
like image 103
逆さま Avatar answered Sep 22 '22 07:09

逆さま