modules/terraform/aws/main.tf (51 lines of code) (raw):
locals {
region = lookup(var.json_input, "region", "us-east-1")
run_id = lookup(var.json_input, "run_id", "123456")
user_data_path = lookup(var.json_input, "user_data_path", "")
creation_time = var.json_input["creation_time"]
k8s_machine_type = lookup(var.json_input, "k8s_machine_type", null)
ena_express = lookup(var.json_input, "ena_express", null)
non_computed_tags = {
# Note: Define only non computed values (i.e. values that do not change for each resource). This is required due to a limitation at "aws" provider default_tags.
"owner" = var.owner # note: MUST NOT REMOVE (it's used for resources accountability and cost tracking)
"scenario" = "${var.scenario_type}-${var.scenario_name}"
"creation_time" = local.creation_time # note: should not use timestamp() since it is a computed value
"deletion_due_time" = timeadd(local.creation_time, var.deletion_delay) # note: MUST NOT BE REMOVED (it's used by the garbage collector)
"run_id" = local.run_id
}
tags = merge(local.non_computed_tags, {
# Addicional computed tags
})
network_config_map = { for network in var.network_config_list : network.role => network }
eks_config_map = { for eks in var.eks_config_list : eks.eks_name => eks }
all_vpcs = { for network in var.network_config_list : network.vpc_name => module.virtual_network[network.role].vpc }
}
provider "aws" {
region = local.region
default_tags {
# Note: Aws provider's default_tags does not support computed values (e.g. timestamp()) (see: https://github.com/hashicorp/terraform-provider-aws/issues/19583#issuecomment-1561337902)
tags = local.non_computed_tags
}
}
check "deletion_due_time" {
assert {
condition = timecmp(local.non_computed_tags.deletion_due_time, plantimestamp()) > 0
error_message = "Deletion due time is in the past: ${local.non_computed_tags.deletion_due_time}. This might result in the deletion of resources currenty in use. To resolve it, update the creation_time (${local.creation_time}) to current time"
}
}
module "virtual_network" {
for_each = local.network_config_map
source = "./virtual-network"
network_config = each.value
region = local.region
}
module "eks" {
for_each = local.eks_config_map
source = "./eks"
run_id = local.run_id
region = local.region
vpc_id = local.all_vpcs[each.value.vpc_name].id
eks_config = each.value
tags = local.tags
k8s_machine_type = local.k8s_machine_type
ena_express = local.ena_express
user_data_path = local.user_data_path
depends_on = [module.virtual_network]
}