Hello Team,
I have a code snippet like below to create KMS keys across the regions. I used a list map variable for list of projects and their respective regions like below. I am trying to use for each loop over the map and using Provider attribute to create the keys in single block without repeating the code, but I am getting the following error.
Code:
locals {
project_region_map = flatten([
for p,x in var.Projects_Regions : [
for r in x : {
project = p
region = r
}
]
])
project_region = {
for item in local.project_region_map : “{item.project}.{item.region}” => item
}
}
Projects_Regions = {
“Smartapp” : [“eu-west-1”, “eu-west-2”]
“Portalapp” : [“eu-west-2”]
“boardingapp” : [“eu-west-2”]
}
resource “aws_kms_key” “keys_ireland” {
for_each = {
for item in local.project_region_map : “{item.project}.{item.region}” => item
}
Provider = each.value.region == eu-west-2 ? “aws.london” : “aws”
enable_key_rotation = true
key_usage = “ENCRYPT_DECRYPT”
is_enabled = true
tags = merge(
local.common_tags,
{
“Name” = “{each.value.project}-{var.ENV}.kms”
“Purpose” = “KMS Key 01”
“SecurityZone” = “X2”
},
)
}
provider “aws” {
region = “eu-west-2”
alias = “london”
assume_role {
role_arn = var.DEPLOY_ROLE
}
}
provider “aws” {
version = “4.2.0”
region = “eu-west-1”
assume_role {
role_arn = var.DEPLOY_ROLE
}
}
Error:
│ Error: Invalid provider configuration reference
│
│ on kms_regions.tf line 44, in resource “aws_kms_key” “keys_regions”:
│ 44: provider = (each.value.region == “eu-west-2” ? “aws.london” : “aws”)
│
│ The provider argument requires a provider type name, optionally followed by a period and then a configuration alias.
Is it not possible to write a conditional statement for Provider?
Regards,
Vamsi