2017-09-27 4 views
1

J'ai besoin d'aide pour l'écriture d'un script terraform vient AWS comme suit:Comment appliquer des règles de groupe de sécurité dans différentes régions?

J'ai une liste de groupes de sécurité dans plusieurs régions, par exemple, - nous-est-2 - nous-ouest-1 - etc Maintenant, lorsque j'ajoute une nouvelle instance dans l'une des régions, j'applique un EIP. Je dois ajouter tout le trafic EIP dans le groupe de sécurité de chaque région.

Jusqu'à présent, ce que j'ai essayé:

  • Sauvegarde du EIP dans un fichier appelé node_ips.txt
  • Lire ce fichier
  • Appliquer à un groupe de sécurité

Voici le script échantillon:

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}" 
    } 

ça ne marche pas pour moi. Il ajoute des règles uniquement pour list_eips. Encore une fois, lorsque j'ajoute une nouvelle instance dans une région différente, le groupe de sécurité est différent. Donc, je ne suis pas capable de savoir quel était mon groupe de sécurité dans la région précédente. S'il vous plaît aviser toute idée.

Merci.

Répondre

0

Terraform a l'idée de «plusieurs instances de fournisseur». Vous pouvez créer des fournisseurs pour chaque région qui doit accéder et manipuler des ressources.

# 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