将参数传递给 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 日志中看到输出。
将参数传递给 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 日志中看到输出。