在我的 CI 上,我已经通过 bash 脚本在 AWS ECS 环境中配置了部署
**deploy.sh**
[...]
aws ecs register-task-definition --cli-input-json file://./deploy/skeleton.json
TASK_DEFINITION_ARN=$(aws ecs --output text list-task-definitions --family-prefix "${PROJECT_NAME}" --sort DESC --query "taskDefinitionArns[0]")
aws ecs update-service \
--cluster "${PROJECT_NAME}" \
--service "${PROJECT_NAME}" \
--task-definition "${TASK_DEFINITION_ARN}" \
--force-new-deployment \
--deployment-configuration "maximumPercent=200,minimumHealthyPercent=100" \
--desired-count ${DESIRED_COUNT}
[...]
和
**skeleton.json**
{
"family": "backend",
"executionRoleArn": "arn:aws:iam::000000000000:role/XXXX",
"taskRoleArn": "arn:aws:iam::0000000:role/XXXX",
"networkMode": "awsvpc",
"containerDefinitions":
[{
"name": "csharp",
"essential": true,
"environment":[{
"name" : "CONNECTIONSTRINGS__Redis",
"value" : "XXXX"
},
{
"name" : "CONNECTIONSTRINGS__Database",
"value" : "XXX"
},
{
"name" : "ASPNETCORE_ENVIRONMENT",
"value" : "XXX"
}],
"image": "00000000.dkr.ecr.eu-west-1.amazonaws.com/prj/backend:643105ef",
"portMappings": [
{
"containerPort": 80,
"protocol": "tcp"
}
],
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group": "/ecs/backend/",
"awslogs-region": "eu-west-1",
"awslogs-stream-prefix": "csharp"
}
}
}],
"requiresCompatibilities": [
"FARGATE"
],
"cpu": "256",
"memory": "512"
}
当我尝试使用更新服务进行部署时,cli 的回答是:
An error occurred (InvalidParameterException) when calling the UpdateService operation: The container backend does not exist in the task definition.
但如果我在 json 中更改容器名称 csharp 至 后端 ,部署工作。
这是一个错误吗?
谢谢
最佳答案
我正在回答这个老问题,为 Google 员工指出一些注意事项。
似乎有两个与此错误消息相关的问题。
第一个是错误本身被误导,因为它背后的原因 is not related to the task definition directly 实际上这是负载均衡器(LB)提示容器名称,它试图在任务定义中找到。
作为问题本身,在创建 LB 时,containerName
作为 Prop 传递,在大多数情况下,它是第一个任务定义修订版中的容器名称之一。通过创建新的任务修订来更改创建 LB 时使用的容器名称,可能会导致 this error 。
在这种情况下,重新创建服务和/或任务定义可能会解决问题。
关于amazon-web-services - 任务定义中不存在容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62104862/