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

mjk*_*use 5 python amazon-web-services docker aws-fargate

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

docker run my_script:0.1 --arg1 val --arg2 val ...
Run Code Online (Sandbox Code Playgroud)

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

Shr*_*ree 9

在 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" 
    ]
}
Run Code Online (Sandbox Code Playgroud)

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

aws ecs register-task-definition --cli-input-json file://myscript-task.json
Run Code Online (Sandbox Code Playgroud)

您现在可以使用 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
Run Code Online (Sandbox Code Playgroud)

Overrides.json 示例:

{
    "containerOverrides": [{
        "name": "myscript",
        "environment": [{
            "name": "VAR1",
            "value": "valueOfVar1"
        }]
    }]
}
Run Code Online (Sandbox Code Playgroud)

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

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

import os
print(os.environ['VAR1'])
Run Code Online (Sandbox Code Playgroud)

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


Vik*_*yol 8

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

命令参数映射到 docker run 中的 COMMAND 参数。

"command": [
  "--arg1",
  "val",
  "--arg2",
  "val"
],
Run Code Online (Sandbox Code Playgroud)

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

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

Run Code Online (Sandbox Code Playgroud)