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

Pass arguments to Python running in Docker container on AWS Fargate

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

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

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

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

Command 参数映射到 docker 运行 中的 COMMAND 参数。

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

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

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

在 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 命令 运行 任务。使用覆盖参数,您将能够 运行 具有不同值的相同任务。

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 日志中看到输出。