【问题标题】:How to Create AWS Task Definition JSON from Existing task definition?如何从现有任务定义创建 AWS 任务定义 JSON?
【发布时间】:2023-03-26 16:33:01
【问题描述】:

我有一个现有的任务定义“my-task-definition”,我可以获取使用“aws ecs describe-task-definition --task-definition my-task-definition”的数据(我将输出到 my_file.json')。但我的理解是'aws ecs describe-task-definition --task-definition my-task-definition'的输出不是'aws ecs register-task-definition --cli-input-json文件的有效输入:/ //my_file.json'。我必须向该文件添加哪些额外的数据(或从中删除)。该文件(更改了arns)如下:

{
    "taskDefinition": {
        "taskDefinitionArn": "arn:aws:ecs:us-west-1:112233445566:task-definition/my-task-definition:64",
        "containerDefinitions": [
            {
                "name": "my-container",
                "image": "123456789023.dkr.ecr.us-west-1.amazonaws.com/monolith-repo:latest",
                "cpu": 0,
                "memory": 1600,
                "portMappings": [
                    {
                        "containerPort": 8080,
                        "hostPort": 0,
                        "protocol": "tcp"
                    }
                ],
                "essential": true,
                "environment": [
                    {
                        "name": "SERVER_FLAVOR",
                        "value": "JOB"
                    }
                ],
                "mountPoints": [],
                "volumesFrom": [],
                "linuxParameters": {
                    "initProcessEnabled": true
                },
                "logConfiguration": {
                    "logDriver": "awslogs",
                    "options": {
                        "awslogs-group": "/ecs/my-task-definition",
                        "awslogs-region": "us-west-1",
                        "awslogs-stream-prefix": "ecs"
                    }
                }
            }
        ],
        "family": "my-task-definition",
        "taskRoleArn": "arn:aws:iam::111222333444:role/my_role",
        "networkMode": "bridge",
        "revision": 64,
        "volumes": [],
        "status": "ACTIVE",
        "requiresAttributes": [
            {
                "name": "com.amazonaws.ecs.capability.logging-driver.awslogs"
            },
            {
                "name": "com.amazonaws.ecs.capability.ecr-auth"
            },
            {
                "name": "com.amazonaws.ecs.capability.docker-remote-api.1.19"
            },
            {
                "name": "com.amazonaws.ecs.capability.task-iam-role"
            },
            {
                "name": "com.amazonaws.ecs.capability.docker-remote-api.1.25"
            }
        ],
        "placementConstraints": [],
        "compatibilities": [
            "EXTERNAL",
            "EC2"
        ],
        "requiresCompatibilities": [
            "EC2"
        ]
    }
}

【问题讨论】:

标签: amazon-web-services amazon-ecs aws-cli


【解决方案1】:

您收到错误消息,因为aws ecs describe-task-definition 命令的输出包含aws ecs register-task-definition 命令无法识别的附加字段。

没有内置解决方案可以使用 AWS CLI 轻松更新正在运行的任务定义。但是,可以使用jq 之类的工具编写解决方案脚本。

一个可能的解决方案是这样的:

TASK_DEFINITION=$(aws ecs describe-task-definition --task-definition "$TASK_FAMILY" --region "us-east-1")
NEW_TASK_DEFINTIION=$(echo $TASK_DEFINITION | jq --arg IMAGE "$NEW_IMAGE" '.taskDefinition | .containerDefinitions[0].image = $IMAGE | del(.taskDefinitionArn) | del(.revision) | del(.status) | del(.requiresAttributes) | del(.compatibilities)')
aws ecs register-task-definition --region "us-east-1" --cli-input-json "$NEW_TASK_DEFINITION"

这些命令会更新现有任务定义中的 docker 映像并删除额外的字段,以便您可以注册新的任务定义。

有一个开放的 Github 问题正在跟踪此问题。 https://github.com/aws/aws-cli/issues/3064

【讨论】:

    猜你喜欢
    • 2017-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-17
    • 2019-12-15
    • 2017-06-04
    • 2019-03-28
    相关资源
    最近更新 更多