我周末在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实例中抓取终端的屏幕截图时一样,它位于登录提示符处。有什么想法吗?
答案 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
这会将代理链接到正确的群集以进行部署。