amazon-web-services - 任务定义中不存在容器

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

在我的 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/

相关文章:

amazon-web-services - AWS 控制台 session 超时

Ansible 任务因 when 条件而失败

amazon-web-services - 如何从 secret 管理器中获取私钥?

amazon-web-services - terraform aws_secretsmanager_secret_version 设置 base64encode(file ("./src/secret.json")) 作为值

amazon-web-services - 使用命令行工具将 Swagger API 导入 AWS API Gateway

python - 在生产环境中运行 Python Pyramid 服务器,无需 Apache

amazon-web-services - 如何对 ECS Fargate 上的容器进行故障排除?

apache - 将 Elastic Beanstalk URL 重定向到域名

amazon-web-services - 如何停止 Amazon EC2 计费?

amazon-web-services - AWS CLI S3 : copying file locally using the terminal : fatal error: An error occurred (404) when calling the HeadObject operation