如何在不同地区应用安全组规则?

时间:2017-09-27 18:21:31

标签: amazon-web-services terraform

我需要帮助为AWS编写一个terraform脚本,如下所示:

我有一个多个地区的安全组列表,例如,   - us-east-2   - us-west-1   - 等等。

现在,当我在任何地区添加新实例时,我正在应用EIP。 我需要在每个地区的安全组中添加EIP所有流量。

到目前为止,我尝试过:

  • 将EIP保存在名为node_ips.txt
  • 的文件中
  • 阅读该文件
  • 将其应用于安全组

以下是脚本示例:

variable "list_eips" { type=list" }    
resource "aws_eip_association" "eip_assoc" {
      count = "${local.number_of_instances}"
      instance_id   = "${element(aws_instance.ec2_instance.*.id, count.index)}"
      allocation_id = "${element(data.aws_eip.db_ip.*.id, count.index)}"   
      provisioner "local-exec" {
         command = "echo ${self.public_ip} >> node_ips.txt"
      }
    }

    data "template_file" "read_node_ips" {
      template = "${file("${path.cwd}/node_ips.txt")}"
    }



    resource "aws_security_group_rule" "allow_db_communication" {
      type            = "ingress"
      from_port       = 0
      to_port         = 65535
      protocol        = "tcp"
      cidr_blocks     = ["${split(",", "${join("/32,",  concat(compact(split("\n",data.template_file.read_node_ips.rendered)),var.list_eips)  )}/32")}"]
      security_group_id = "${data.aws_security_group.cassandra_sg.id}"
    }

这对我不起作用。它仅为list_eips添加规则。 同样,当我在不同区域添加新实例时,secruity组是不同的。所以,我无法知道我以前地区的安全组是什么。 请告知任何想法。

感谢。

1 个答案:

答案 0 :(得分:0)

Terraform的想法是“多个提供商实例”,您可以为需要访问和操作资源的每个区域创建提供商。

# West coast region
provider "aws" {
  alias  = "west"
  region = "us-west-2"
}

resource "aws_instance" "foo" {
  provider = "aws.west"

  # ...
}

https://www.terraform.io/docs/configuration/providers.html