[英]How to Create AWS Task Definition JSON from Existing task definition?
我有一個現有的任務定義“my-task-definition”,我可以使用“aws ecs describe-task-definition --task-definition my-task-definition”獲取數據(我把它的 output 放入 my_file .json')。 但我的理解是來自“aws ecs describe-task-definition --task-definition my-task-definition”的 output 不是“aws ecs register-task-definition --cli-input-json file:/ /<path_to_json_file>/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"
]
}
}
您收到錯誤是因為aws ecs describe-task-definition
命令中的 output 包含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 Issue 正在跟蹤此問題。 https://github.com/aws/aws-cli/issues/3064
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.