如何指定使用 terraform aws_launch_template 创建的 ec2 实例的子网 ID?
How can i specify the subnet ID of my ec2 instances created with terraform aws_launch_template?
我想启动带有自动缩放组的 EC2 实例。
我已经创建了一个安全组,其中的入站规则来自 ALB 安全组,并且它与我的自定义 VPC 相关联。
resource "aws_security_group" "asg_sg" {
name = "alb-inbound"
description = "Security group for autoscaling instances"
vpc_id = aws_vpc.vpc_prod.id
}
resource "aws_security_group_rule" "inbound_alb" {
type = "ingress"
from_port = 3000
to_port = 3000
protocol = "tcp"
security_group_id = "${aws_security_group.asg_sg.id}"
source_security_group_id = "${aws_security_group.alb_sg.id}"
}
我想部署一些带有自动缩放组的实例作为项目的测试
我的 launch_template 配置如下所示。
resource "aws_launch_template" "as_lt_node_app" {
name_prefix = "as-lt-"
image_id = data.aws_ami.amzlinux2.id
instance_type = "t2.micro"
vpc_security_group_ids = ["${aws_security_group.asg_sg.id}"]
user_data = base64encode(file("${path.module}/install.sh"))
}
我的自动缩放组配置如下。
resource "aws_autoscaling_group" "asg_node_app" {
# launch_configuration = "${aws_launch_configuration.as_lc_node_app.name}"
availability_zones = [var.azs[0],var.azs[1]]
min_size = 1
max_size = 4
target_group_arns = ["${aws_alb_target_group.node_tg.arn}"]
health_check_type = "ELB"
desired_capacity = 2
launch_template {
id = aws_launch_template.as_lt_node_app.id
version = "$Latest"
}
}
现在当我 运行 terraform 应用时我得到这个错误。
│ Error: Error creating Auto Scaling Group: ValidationError: You must use a valid fully-
formed launch template. Security group sg-01510848bd1c3a79d and subnet subnet-c5d624b8
belong to different networks.
│ status code: 400, request id: 8318256b-4c03-4be5-8be0-51473bc1e0b7
│
│ with aws_autoscaling_group.asg_node_app,
│ on c6-02_autoscaling.tf line 22, in resource "aws_autoscaling_group" "asg_node_app":
│ 22: resource "aws_autoscaling_group" "asg_node_app" {
使用此模板创建的 EC2 实例似乎部署在默认 VPC 子网中。有没有办法在 launch_template?
中指定我正在使用的 VPC
我用 launch_configuration 尝试了这个自动缩放组,但我遇到了类似的错误。
我想尝试 laun_template 中的 network_interfaces 参数,但在此部署中我创建了一个子网列表
resource "aws_subnet" "public_subnet" {
count = length(var.public_cidr)
availability_zone = var.azs[count.index]
vpc_id = aws_vpc.vpc_prod.id
cidr_block = var.public_cidr[count.index]
tags = local.common_tags
}
在这种情况下,我可以使用多个子网吗?
您使用 vpc_zone_identifier
属性在 aws_autoscaling_group
上指定 VPC。这会从 VPC 中获取一个包含子网 ID 的列表,您希望在其中启动实例。
通过了解子网,ASG 将自动了解 VPC。
此外,您需要删除 availability_zones
属性。来自 docs:
availability_zones
: A list of one or more availability zones for the group. Used for EC2-Classic, attaching a network interface via id from a launch template and default subnets when not specified with vpc_zone_identifier
argument. Conflicts with vpc_zone_identifier
.
现在没有人应该使用 EC2 classic。子网绑定到可用性区域,因此可以从 vpc_zone_identifier
.
获知此信息
使用文档建议的更改修改我的代码,感谢 Ervin 的回答
我的 ASG 现在是这个样子
resource "aws_autoscaling_group" "asg_node_app" {
# launch_configuration = "${aws_launch_configuration.as_lc_node_app.name}"
depends_on = [aws_alb_target_group.node_tg]
vpc_zone_identifier = ["${aws_subnet.public_subnet.0.id}","${aws_subnet.public_subnet.1.id}"]
min_size = 1
max_size = 4
target_group_arns = ["${aws_alb_target_group.node_tg.arn}"]
health_check_type = "ELB"
desired_capacity = 2
launch_template {
id = aws_launch_template.as_lt_node_app.id
version = "$Latest"
}
}
资源已创建,没有任何问题。
我想启动带有自动缩放组的 EC2 实例。
我已经创建了一个安全组,其中的入站规则来自 ALB 安全组,并且它与我的自定义 VPC 相关联。
resource "aws_security_group" "asg_sg" {
name = "alb-inbound"
description = "Security group for autoscaling instances"
vpc_id = aws_vpc.vpc_prod.id
}
resource "aws_security_group_rule" "inbound_alb" {
type = "ingress"
from_port = 3000
to_port = 3000
protocol = "tcp"
security_group_id = "${aws_security_group.asg_sg.id}"
source_security_group_id = "${aws_security_group.alb_sg.id}"
}
我想部署一些带有自动缩放组的实例作为项目的测试
我的 launch_template 配置如下所示。
resource "aws_launch_template" "as_lt_node_app" {
name_prefix = "as-lt-"
image_id = data.aws_ami.amzlinux2.id
instance_type = "t2.micro"
vpc_security_group_ids = ["${aws_security_group.asg_sg.id}"]
user_data = base64encode(file("${path.module}/install.sh"))
}
我的自动缩放组配置如下。
resource "aws_autoscaling_group" "asg_node_app" {
# launch_configuration = "${aws_launch_configuration.as_lc_node_app.name}"
availability_zones = [var.azs[0],var.azs[1]]
min_size = 1
max_size = 4
target_group_arns = ["${aws_alb_target_group.node_tg.arn}"]
health_check_type = "ELB"
desired_capacity = 2
launch_template {
id = aws_launch_template.as_lt_node_app.id
version = "$Latest"
}
}
现在当我 运行 terraform 应用时我得到这个错误。
│ Error: Error creating Auto Scaling Group: ValidationError: You must use a valid fully-
formed launch template. Security group sg-01510848bd1c3a79d and subnet subnet-c5d624b8
belong to different networks.
│ status code: 400, request id: 8318256b-4c03-4be5-8be0-51473bc1e0b7
│
│ with aws_autoscaling_group.asg_node_app,
│ on c6-02_autoscaling.tf line 22, in resource "aws_autoscaling_group" "asg_node_app":
│ 22: resource "aws_autoscaling_group" "asg_node_app" {
使用此模板创建的 EC2 实例似乎部署在默认 VPC 子网中。有没有办法在 launch_template?
中指定我正在使用的 VPC我用 launch_configuration 尝试了这个自动缩放组,但我遇到了类似的错误。
我想尝试 laun_template 中的 network_interfaces 参数,但在此部署中我创建了一个子网列表
resource "aws_subnet" "public_subnet" {
count = length(var.public_cidr)
availability_zone = var.azs[count.index]
vpc_id = aws_vpc.vpc_prod.id
cidr_block = var.public_cidr[count.index]
tags = local.common_tags
}
在这种情况下,我可以使用多个子网吗?
您使用 vpc_zone_identifier
属性在 aws_autoscaling_group
上指定 VPC。这会从 VPC 中获取一个包含子网 ID 的列表,您希望在其中启动实例。
通过了解子网,ASG 将自动了解 VPC。
此外,您需要删除 availability_zones
属性。来自 docs:
availability_zones
: A list of one or more availability zones for the group. Used for EC2-Classic, attaching a network interface via id from a launch template and default subnets when not specified withvpc_zone_identifier
argument. Conflicts withvpc_zone_identifier
.
现在没有人应该使用 EC2 classic。子网绑定到可用性区域,因此可以从 vpc_zone_identifier
.
使用文档建议的更改修改我的代码,感谢 Ervin 的回答
我的 ASG 现在是这个样子
resource "aws_autoscaling_group" "asg_node_app" {
# launch_configuration = "${aws_launch_configuration.as_lc_node_app.name}"
depends_on = [aws_alb_target_group.node_tg]
vpc_zone_identifier = ["${aws_subnet.public_subnet.0.id}","${aws_subnet.public_subnet.1.id}"]
min_size = 1
max_size = 4
target_group_arns = ["${aws_alb_target_group.node_tg.arn}"]
health_check_type = "ELB"
desired_capacity = 2
launch_template {
id = aws_launch_template.as_lt_node_app.id
version = "$Latest"
}
}
资源已创建,没有任何问题。