ECS集群中没有实例

时间:2018-11-24 15:47:23

标签: amazon-web-services terraform amazon-ecs

我周末在Terraform和AWS玩了一段时间,但是在ECS方面遇到了麻烦……我认为我的配置是正确的,但是由于某种原因,我的任务定义产生了EC2实例没有绑定到我的集群。我的定义资源如下:

resource "aws_launch_configuration" "myapp" {
  name                        = "myapp-launchcfg"
    image_id                    = "ami-0acc9f8be17a41897"
    instance_type               = "t2.micro"
    associate_public_ip_address = true
    iam_instance_profile        = "${aws_iam_instance_profile.myapp.arn}"
    key_name                    = "${aws_key_pair.myapp.key_name}"

    user_data = "#!/bin/bash\necho ECS_CLUSTER=${aws_ecs_cluster.myapp.name} >> /etc/ecs/ecs.config"
}

一切正常,没有错误,但是ECS集群中没有实例在运行……而EC2实例正在运行。我不确定user_data块是否正确,还是执行该操作,就像我从EC2实例中抓取终端的屏幕截图时一样,它位于登录提示符处。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

到目前为止,感谢您的评论,我设法解决了这个问题,因此我将解决方案放在这里,供其他人偶然使用。

主要问题是我正在创建一个VPC和一个子网,但是当我进一步查看时,AWS还在创建一个默认子网,因为我做了一个自定义的子网并绑定到该默认子网,所以没有使用。在进一步检查EC2实例和子网之间的绑定后,该绑定是针对默认子网的,因此最终我不得不将Terraform中的初始子网资源从resource "aws_subnet" {}更改为resource "aws_default_subnet" {},以提供我想要此默认实例的设置。

第二,最后,我不得不修改路由表以将所有流量从0.0.0.0/0路由到我的Internet网关。

现在启动并运行,仍然有很多东西要学习,但是您就可以了!

答案 1 :(得分:0)

您还可以将负载均衡器与ECS群集和自动扩展组结合使用。要将自动伸缩组绑定到ECS集群,可以配置aws_autoscaling_attachment。这将确保由该自动伸缩组启动的任何实例都已注册到目标组(如果使用Application Load Balancer),或者如果您使用的是直接注册到ELB。示例:

resource "aws_autoscaling_attachment" "default" {
    autoscaling_group_name = "${var.my_asg_name}"
    alb_target_group_arn = "${var.my_alb_target_group_arn}"
    #elb = "${var.my_elb_id}" #in case of elb
}

在这种情况下,您可以使用ECS优化的AMI,它已预先安装和配置了ECS代理。例如在Linux中,您必须使用用户数据脚本来提供一个env变量,例如:

echo 'ECS_CLUSTER=my_cluster_name' >> /etc/ecs/ecs.config

这会将代理链接到正确的群集以进行部署。