在 AWS ECS 中设置服务时出现问题

Problem with setting a service in AWS ECS

我试图在集群上设置 ECS 服务 运行 容器映像,但无法使设置正常工作。

我基本上遵循了 https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-blue-green.html 上的指南,除了我试图在 EC2 实例上托管容器。

我想知道问题是否与网络模式有关(使用“awsvpc”)。

预期

它应该在使用 ALB link

访问时在 index.html 上显示一些内容

观察

当我尝试使用负载平衡器 link 访问时,它给出了 HTTP 503,health-check 也显示不健康

似乎 ECS 保留了“re-creating”容器? (原谅我对ECS还不是很熟悉)

试图直接访问容器实例但也无法访问

我查看了容器实例上的ECS代理日志(/var/logs/ecs-agent.log),镜像应该已经拉取成功了

任务应该已经开始了

ECS 服务事件

它似乎一直在注册和注销目标

安全组已设置为接受 HTTP 流量

设置

Tomcat 容器上的服务器在端口 80 上启动

ECS 任务定义创建

{
"family": "TestTaskDefinition",
"networkMode": "awsvpc",
"containerDefinitions": [
    {
        "name": "TestContainer",
        "image": "<Image URI>",
        "portMappings": [
            {
                "containerPort": 80,
                "hostPort": 80,
                "protocol": "tcp"
            }
        ],
        "essential": true
    }
],
"requiresCompatibilities": [
    "EC2"
],
"cpu": "256",
"memory": "512",
"executionRoleArn": "<ECS execution role ARN>"
}

创建ECS服务

{
"cluster": "TestCluster",
"serviceName": "TestService",
"taskDefinition": "TestTaskDefinition",
"loadBalancers": [
    {
        "targetGroupArn": "<target group ARN>",
        "containerName": "TestContainer",
        "containerPort": 80
    }
],
"launchType": "EC2",
"schedulingStrategy": "REPLICA",
"deploymentController": {
    "type": "CODE_DEPLOY"
},
"networkConfiguration": {
   "awsvpcConfiguration": {
      "assignPublicIp": "DISABLED",
      "securityGroups": [ "sg-0f9b629686ca3bd08" ],
      "subnets": [ "subnet-05f47b367df4f50d4", "subnet-0fd76fc8e47ea3be7" ]
   }
},
"desiredCount": 1
}

根据评论。

为了调查这个问题,建议在没有 ALB 的情况下测试 ECS 服务。根据测试发现,由于应用程序启动时间长

,ALB将ECS服务视为不健康

通过将 ALB health-check 宽限期 增加到(例如 300 秒)解决了该问题。

not sure if EC2 launch type must use "bridge"

您也可以在 EC2 实例上使用 awsvpc,但在这种情况下 bridge 更容易使用。