如何在Terraform中获得EC2实例的公共IP ?


resource "aws_instance" "node" {
for_each               = var.node_map
ami                    = data.aws_ami.ubuntu.id
subnet_id              = aws_subnet.development-public-1b.id
key_name               = aws_key_pair.nodes.key_name
instance_type          = each.value.type
vpc_security_group_ids = [aws_security_group.dev-ec2-sg.id]
associate_public_ip_address = true

tags          = {
Name        = each.key
}
root_block_device {
volume_type     = "gp2"
volume_size     = each.value.size
delete_on_termination   = true
}  
}

我试图获得与我的每个ec2实例相关联的公共IP

output "instance_public_ip" {
value       = {
"${aws_instance.node.*.nodeid}" = "${aws_instance.node.*.public_ips}"  
}
description = "The public IP address of the main server instance."
}

但是我得到以下错误

Error: Unsupported attribute
on node-updated.tf line 194, in output "instance_public_ip":
194:     "${aws_instance.node.*.nodeid}" = "${aws_instance.node.*.public_ips}"  
This object does not have an attribute named "nodeid".
Error: Unsupported attribute
on node-updated.tf line 194, in output "instance_public_ip":
194:     "${aws_instance.node.*.nodeid}" = "${aws_instance.node.*.public_ips}"  
This object does not have an attribute named "public_ips".

如果可以的话,请告诉我如何在PUBLIC IP与实例关联后访问它。提前感谢你的建议!!

associate_public_ip_address = true应该在您为vpc编写脚本后在子网部分完成。

resource "aws_vpc" "my_vpc" {
cidr_block = "172.16.0.0/16"
tags = {
"name" = "tf-example"
}
}
# AWS SUBNET ATTACHED TO THE AWS VPC
resource "aws_subnet" "my_subnet" {
vpc_id = aws_vpc.my_vpc.id
cidr_block = "172.16.10.0/24"
availability_zone = "af-south-1a"
map_public_ip_on_launch = true
tags = {
"name"  = "tf-example"
}
}

最新更新