我需要帮助为AWS编写一个terraform脚本,如下所示:
我有一个多个地区的安全组列表,例如, - us-east-2 - us-west-1 - 等等。
现在,当我在任何地区添加新实例时,我正在应用EIP。 我需要在每个地区的安全组中添加EIP所有流量。
到目前为止,我尝试过:
以下是脚本示例:
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组是不同的。所以,我无法知道我以前地区的安全组是什么。 请告知任何想法。
感谢。
答案 0 :(得分:0)
Terraform的想法是“多个提供商实例”,您可以为需要访问和操作资源的每个区域创建提供商。
# West coast region
provider "aws" {
alias = "west"
region = "us-west-2"
}
resource "aws_instance" "foo" {
provider = "aws.west"
# ...
}