web-dev-qa-db-fra.com

Comment exécuter AWS ECS Task en remplaçant les variables d'environnement

Pour remplacer les variables d'environnement via CLI, nous pouvons utiliser --overrides (structure) selon AWS ECS Commandline Reference .

Comment passer des paires nom/valeur (structure ou JSON) en ligne de commande?

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

Je cherche un moyen de remplacer les variables d'environnement ci-dessus à l'aide d'AWS ECS CLI. Quelque chose comme:

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

La documentation n'est pas claire. J'ai googlé mais je n'ai pas pu m'empêcher.

19
sith

Vous devez fournir un document JSON comme indiqué sous --overrides option .

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

Vous devez spécifier le name du conteneur pour obtenir le remplacement de l'environnement et spécifier une liste de paires de valeurs-clés environment.

Vous pouvez spécifier le document JSON en ligne avec votre argument ou transmettre un argument de chemin de fichier à la tâche. Je vais montrer les deux sens.

Passer JSON en ligne

Votre commande ressemblerait à ceci (remplissez la valeur 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 (...)

Cela semble plutôt moche et serait ennuyeux à modifier. Il ne fonctionne également que sur les systèmes Unix-y et nécessiterait l'échappement des guillemets dans Windows.

Ainsi, vous pouvez également transmettre un chemin de fichier à l'AWS CLI et lui faire charger votre remplacement JSON à partir d'un fichier.

Passer un argument de chemin de fichier

Créez un fichier, appelons-le overrides.json, et y mettre le même JSON:

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

Ensuite, en supposant que votre fichier se trouve dans le répertoire courant :

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

Si votre fichier se trouve ailleurs dans le système de fichiers et que vous êtes sur un système Linux/Unix-y :

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

Si votre fichier se trouve ailleurs dans le système de fichiers et que vous le faites dans Windows :

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