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

Amazon web services 在AWS ECS中设置服务时出现问题,amazon-web-services,containers,amazon-ecs,aws-alb,Amazon Web Services,Containers,Amazon Ecs,Aws Alb,我试图在群集上设置一个运行容器映像的ECS服务,但无法使设置正常工作 我基本上遵循了上的指南,只是尝试在EC2实例上托管容器 我想知道这个问题是否与网络模式(使用“awsvpc”)有关 期望值 它应该在index.html上用t eh ALB链接显示一些内容 观察 当我尝试使用负载平衡器链接访问时,它给出了HTTP503,并且运行状况检查也显示不正常 ECS似乎一直在“重建”Conatiner?(请原谅,我对ECS还不熟悉) 试图直接访问容器实例,但也无法访问 我查看了容器实例上的ECS

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

我基本上遵循了上的指南,只是尝试在EC2实例上托管容器

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

期望值 它应该在index.html上用t eh ALB链接显示一些内容

观察 当我尝试使用负载平衡器链接访问时,它给出了HTTP503,并且运行状况检查也显示不正常

ECS似乎一直在“重建”Conatiner?(请原谅,我对ECS还不熟悉)

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

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

任务应该已经开始了

ECS服务事件

它似乎保留了注册和注销目标

安全组已设置为接受HTTP通信

安装程序 容器上的Tomcat服务器在端口80上启动

  • ALB

  • 听众

  • 目标群体

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>"
}
{
“系列”:“TestTaskDefinition”,
“网络模式”:“awsvpc”,
“集装箱定义”:[
{
“名称”:“TestContainer”,
“图像”:“,
“端口映射”:[
{
“集装箱港口”:80,
“主机端口”:80,
“协议”:“tcp”
}
],
“本质”:真实
}
],
“需求兼容性”:[
“EC2”
],
“cpu”:“256”,
“内存”:“512”,
“executionRoleArn”:”
}
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
}
{
“集群”:“TestCluster”,
“serviceName”:“TestService”,
“任务定义”:“TestTaskDefinition”,
“负载平衡器”:[
{
“targetGroupArn”:“,
“containerName”:“TestContainer”,
“集装箱港口”:80
}
],
“启动类型”:“EC2”,
“计划策略”:“副本”,
“部署控制器”:{
“类型”:“代码部署”
},
“网络配置”:{
“awsvpcConfiguration”:{
“assignPublicIp”:“已禁用”,
“证券集团”:[“sg-0f9b629686ca3bd08”],
“子网”:[“子网-05f47b367df4f50d4”,“子网-0fd76fc8e47ea3be7”]
}
},
“期望计数”:1
}
基于评论

为了调查问题,建议在没有ALB的情况下测试ECS服务。根据测试,发现ALB将ECS服务视为不健康,因为应用程序启动时间过长

通过将ALB健康检查宽限期增加到(例如300秒),问题得以解决

不确定EC2启动类型是否必须使用“桥接”


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

既然您禁用了public
assignPublicIp
,您如何确保internet连接以下载docker映像?我认为EC2 launchType应该禁用“assignPublicIp”。您将收到错误“调用CreateService操作时发生错误(InvalidParameterException):此启动类型不支持分配公共IP”。如果启用specfiy,请转到控制台中的ECS服务选项卡,查看事件?它可以有更多关于发生了什么的信息。补充了ECS服务的事件捕获。目标组似乎一直在注册和取消注册。尝试在不使用负载平衡器的情况下创建服务,进行了以下更改,结果正常。(1) 将网络模式从“awsvpc”更改为“桥接”。了解fargate启动类型必须使用“awsvpc”网络模式,但不确定EC2启动类型是否必须使用“桥接”(2)将服务运行状况检查周期更改为更大的值(例如300s)。似乎ECS在应用程序还没有完成启动的情况下处理容器实例不健康,导致任务不断停止和启动。不管怎样,终于让它与ALB一起工作,以及在代码管道流中,谢谢。