将参数传递给在AWS Fargate上的Docker容器中运行的Python

时间:2019-08-22 16:53:05

标签: python amazon-web-services docker aws-fargate

可以像这样将参数传递给运行Python脚本的Docker容器

docker run my_script:0.1 --arg1 val --arg2 val ...

我似乎无法弄清楚在AWS Fargate上运行容器时如何传递这些参数(也许不起作用?)

2 个答案:

答案 0 :(得分:1)

您可以在ECS任务定义中使用container definitions parameters来传递运行时参数。

Command 参数映射到docker run中的COMMAND参数。

"command": [
  "--arg1",
  "val",
  "--arg2",
  "val"
],

也可以将参数作为环境变量传递。

"environment": [
  {
    "name": "LOG_LEVEL",
    "value": "debug"
  }
],

答案 1 :(得分:1)

在ecs中,您将容器作为任务运行。因此,您将首先注册包含容器定义的任务,然后可以运行将参数作为环境变量传递的任务。

这是示例任务定义:

myscript-task.json :(示例任务定义)

{
    "containerDefinitions": [
        {
            "name": "myscript",
            "image": "12345123456.dkr.ecr.us-west-2.amazonaws.com/myscript:0.1",
            "logConfiguration": { 
                "logDriver": "awslogs",
                "options": { 
                   "awslogs-group" : "/ecs/fargate",
                   "awslogs-region": "us-west-2",
                   "awslogs-stream-prefix": "myscript"
                }
             }
        }

    ],
    "family": "myscript",
    "networkMode": "awsvpc",
    "executionRoleArn": "arn:aws:iam::12345123456:role/ecsTaskExecutionRole",
    "cpu": "256",
    "memory": "512",
    "requiresCompatibilities": [ 
       "FARGATE" 
    ]
}

您将在控制台中或使用register-task-definition命令注册任务:

aws ecs register-task-definition --cli-input-json file://myscript-task.json

您现在可以使用ecs run-task命令运行任务。使用overrides参数,您将能够以不同的值运行同一任务。

aws ecs run-task --cluster testCluster --launch-type FARGATE --task-definition myscript:1 --network-configuration 'awsvpcConfiguration={subnets=[subnet-0abcdec237054abc],assignPublicIp=ENABLED}' --overrides file://overrides.json

Overrides.json示例:

{
    "containerOverrides": [{
        "name": "myscript",
        "environment": [{
            "name": "VAR1",
            "value": "valueOfVar1"
        }]
    }]
}

现在,您可以在python脚本中访问变量。

Python脚本(样本)打印传递的环境变量。

import os
print(os.environ['VAR1'])

配置了日志驱动程序后,您将能够在cloudwatch日志中查看输出。