Türchen #14: Terraform Dynamic Blocks


Früher war nicht alles besser

Kennt Ihr das auch noch? Ihr wolltet abhängig von der Umgebung (test, staging, prod) unterschiedliche Ressourcen in Terraform definieren, aber keinen Code duplizieren? In der staging-Umgebung sollte es 2 Webserver geben, in prod aber 6? Nun, dann seid Ihr sicherlich auch über das count / index Pattern gestoßen.

Seit Version 0.12 gibt es nun bequemere Alternativen, um etwa conditionals und loops zu implementieren.

Ein Beispiel: Security Group mit Ingress Ports

Erstellen wir eine Security Group ssh_bastion_hosts mit 3 offenen, erlaubten Ports, über diese von überall zugegriffen werden darf. (In der Praxis würde man natürlich die SSH Zugriff auf bestimmte IPs- oder -Bereiche einschränken!)

variable "ingress_ssh_ports" {
  type        = list(number)
  description = "list of allowed SSH ports"
  default     = [22, 222, 2122]
}

resource "aws_security_group" "ssh_bastion_hosts" {
  name        = "ssh_bastion_hosts"
  description = "Ingress for SSH bastion hosts"
  vpc_id      = aws_vpc.my_vpc.id

  dynamic "ingress" {
    iterator = port
    for_each = var.ingress_ssh_ports
    content {
      from_port   = port.value
      to_port     = port.value
      protocol    = "tcp"
      cidr_blocks = ["0.0.0.0/0"]
    }
  }
}

Weitere Informationen

https://www.terraform.io/docs/configuration/expressions.html#dynamic-blocks

https://github.com/hashicorp/terraform-guides/tree/master/infrastructure-as-code/terraform-0.12-examples

Zurück zu den Blogbeiträgen

Trainings und Workshops

Vom Kurs für Einsteiger bis hin zu Experten-Workshops mit Tiefgang können wir Euch mit technischen Trainings unterstützen. Darüber hinaus bieten wir auch Workshops mit Fokus auf Cloud-Strategie oder für die Vertriebsmannschaft an.

Mehr...