Terraform将弹性IP分配给自动扩展组实例

时间:2018-05-22 15:31:37

标签: amazon-web-services elasticsearch ip terraform vpc

我刚刚使用Terraform几天并寻找指导。我在vpc(私有,公共)下有两个子网。我要做的是为自动扩展组创建的每个实例分配弹性IP,或者在实例销毁时删除弹性IP。我试过这个链接: Auto assign public IPs to my instance created by an austo-scaling group

所以我创建了一个弹性负载均衡器,监听端口80并将其分配给自动扩展组和公有子网。我在这里查看了有关弹性负载平衡的AWS文档:https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/how-elastic-load-balancing-works.html以及AWS提供的其他各种文档,因此我可能只是错误地思考问题。我不确定如何为公共子网的自动缩放组的EC2实例分配一个弹性IP,所以我唯一能想到的是它是通过弹性负载均衡器自动处理的?

我想到的第一个解决方案(甚至不确定我是否可以在不作为EC2实例的情况下执行此操作),第二个解决方案来自第一个链接中的说明

  1. 为弹性负载均衡器而不是EC2实例分配弹性IP,然后将DNS记录指向该弹性IP,然后让负载均衡器处理其余部分
  2. 制作DNS记录以指向负载均衡器的DNS
  3. 如果第二个选项正确,我会再次尝试,.tf必须是不正确的。但是,如果有更好的选择,我想听听人们使用的任何建议!

    任何指南,文档或指导都会很棒!

1 个答案:

答案 0 :(得分:2)

第二种选择是正确的。您需要将DNS记录指向负载均衡器。在看起来像这样的terraform(你的ELB或ALB资源会有所不同):

# Set up the load balancer
resource "aws_alb" "example" {
  name            = "example"
  internal        = false
  security_groups = ["${aws_security_group.example.id}"]
  subnets         = ["${data.aws_subnet_ids.example.ids}"]
}

# Get the zone id for the zone you are setting this in
data "aws_route53_zone" "example" {
  name         = "example.com"
  private_zone = false
}

# Set the record, replace <your dns name> with the name you want to use
resource "aws_route53_record" "build" {
  provider = "aws"
  zone_id  = "${data.aws_route53_zone.example.zone_id}"
  name     = "<your dns name>"
  type     = "A"

  alias {
    name                   = "${aws_alb.example.dns_name}"
    zone_id                = "${aws_alb.eaxmple.zone_id}"
    evaluate_target_health = false
  }
}