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

问题描述 投票:0回答:1
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".

如果您可以的话,请告诉我在与实例关联后如何访问公共IP。预先感谢您的建议!!

amazon-web-services amazon-ec2 terraform terraform-provider-aws
1个回答
0
投票

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"
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.