For-Each in Modules

In this section I will create an example module and use for-each in it.

Let's start by creating a file with the name ssm-parameter\variables.tf,

variable "name" {}
variable "value" {}

Then a file with the name ssm-parameter\ssm-parameter.tf,

resource "aws_ssm_parameter" "parameter" {
  name  = var.name
  type  = "String"
  value = var.value
}

In here, the ssm_parameter resource expects name and a value to be available in variables. Our target is to provide these to this module using a for-each loop. Because iterating over a list of key values is much easier than repeating multiple times.

Next a file with the name ssm-parameter\outputs.tf,

output "arn" {
  value = aws_ssm_parameter.parameter.arn
}

Then let's create a file with the name provider.tf in our project root to consume the module we just created,

provider "aws" {
  region = "eu-west-1"
}

Finally a file with the name parameters.tf,

locals {
  my_parameters = {
    environment = "development"
    version     = "1.0"
    mykey       = "myvalue"
  }
}

module "parameters" {
  for_each = local.my_parameters
  source   = "./ssm-parameter"
  name     = each.key
  value    = each.value
}

output "all-my-parameters" {
  value = { for k, parameter in module.parameters: k => parameter.arn }
}

In here, we first define a some static locals. Inside the module "parameters" we iterate over each local key value and pass that value to our other module 'ssm-parameter'.

Last updated