2017-10-25 2 views
1

kämpfen, meinen Kopf um diese zu erhalten, unter meinem realen Welt Beispiel ist, aber ich denke, die allgemeine Frage ist:Terraforming Verweise auf neue Ressourcen über Variablen Werte

, wie eine Gruppe von Objekten nehmen in einer Vorlage und Referenz erstellt wird die ID eines bestimmten Objekts, das auf einem Namens-Tag basiert, zur Verwendung in einer anderen Ressource?

reale Welt Beispiel:

So bin ich dynamisch Bündel von Subnetzen basierend auf einer Liste von Subnetz Namen versehen als Listenvariable zu schaffen

variable "subnet_names" { 
description = "subnet list" 
default = ["subnet1","subnet2","dmz-a","dmz-b"] 
} 


resource "aws_subnet" "subnets" { 
count = "${length(var.subnet_names)}" 
vpc_id = "${aws_vpc.vpc.id}" 
cidr_block = "${cidrsubnet(var.vpc_cidr, 6, count.index)}" 
map_public_ip_on_launch = "false" 
availability_zone ="${element(slice(data.aws_availability_zones.available.names, 0, 2), count.index)} " 
tags = "${merge(var.common_tags, map("Name", "${var.domain_short_name}-${var.subnet_names[count.index]}"))}" 
} 

Dies funktioniert gut, aber ich möge dann sagen, befestigen NAT-Gateway zu nur bestimmten Subnetzen, für das Beispiel lässt sich das dmz sagen, aber ich kann nicht herausfinden, wie man eine subnet_id für ein bestimmtes Subnetz referenziert ... ich denke, es muss eine Möglichkeit geben, eine Karte der neuen Subnetze {subnet_ID zu erstellen : tags.name} und wählen Sie eine durch Nachschlagen der Tags.name, die corp-dmz-a als Beispiel wäre

Irgendwelche Vorschläge, wie man sich diesem nähert, würde geschätzt werden, ich habe mit einigen verschiedenen Methoden experimentiert, aber denke, dass ich ein grundlegendes Verständnis vermisse und vielleicht gibt es sogar einfacheren Weg mit der Interpolation und anderen Funktionen, die ich vermisse

Antwort

1

Managed eine Lösung zu entwickeln, die, so scheint auch selbst beantworten zu teilen hier

//define data pull for subnets with a depends on the resource for creating the subnets so there will be subnets present before data is calculated 
data "aws_subnet" "dmz_for_nat" { 
depends_on = ["aws_subnet.subnets"] 
filter { 
name = "tag:Name" 
values = ["${var.domain_short_name}-DMZ-B"] 
} 
} 

//Then reference that data for the subnet ID 
resource "aws_nat_gateway" "nat" { 
allocation_id = "${aws_eip.nat_gw.id}" 
subnet_id = "${data.aws_subnet.dmz_for_nat.id}" 
tags = "${merge(var.common_tags, map("Name", "${var.vpc_name_prefix}${var.domain_short_name}${var.region_short_name}-NAT"))}" 
depends_on = ["aws_internet_gateway.igw","aws_subnet.subnets"] 
} 
so eine ziemlich praktische Methode zu sein scheint zu funktionieren
Verwandte Themen