ECS集群中没有实例
No instances in ECS cluster
我在周末玩了 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 实例抓取终端屏幕截图时它是否在登录提示时被执行。有什么想法吗?
感谢到目前为止的评论,我最终设法解决了这个问题,所以我将解决方案放在这里供其他人偶然发现。
主要问题是我正在创建一个 VPC 和一个子网,但当我进一步查看时,AWS 也在创建一个默认子网,并且因为我创建了一个自定义子网并绑定到默认子网,所以默认不是习惯。在进一步检查 EC2 实例和子网之间的绑定后,绑定是针对默认子网的,所以最后我不得不将 Terraform 中的初始子网资源从 resource "aws_subnet" {}
更改为 resource "aws_default_subnet" {}
以提供我想要这个默认实例的设置。
其次,也是最后,我不得不修改路由 table 以将所有流量从 0.0.0.0/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 然后您必须使用您的用户数据脚本提供环境变量,例如:
echo 'ECS_CLUSTER=my_cluster_name' >> /etc/ecs/ecs.config
这会将代理 link 部署到正确的集群。
我在周末玩了 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 实例抓取终端屏幕截图时它是否在登录提示时被执行。有什么想法吗?
感谢到目前为止的评论,我最终设法解决了这个问题,所以我将解决方案放在这里供其他人偶然发现。
主要问题是我正在创建一个 VPC 和一个子网,但当我进一步查看时,AWS 也在创建一个默认子网,并且因为我创建了一个自定义子网并绑定到默认子网,所以默认不是习惯。在进一步检查 EC2 实例和子网之间的绑定后,绑定是针对默认子网的,所以最后我不得不将 Terraform 中的初始子网资源从 resource "aws_subnet" {}
更改为 resource "aws_default_subnet" {}
以提供我想要这个默认实例的设置。
其次,也是最后,我不得不修改路由 table 以将所有流量从 0.0.0.0/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 然后您必须使用您的用户数据脚本提供环境变量,例如:
echo 'ECS_CLUSTER=my_cluster_name' >> /etc/ecs/ecs.config
这会将代理 link 部署到正确的集群。