Dynamic Block in CodePipeline->Stage->Action

I am trying to reference values in a map for a dynamic action. I have had no luck getting the proper syntax to make the reference work.

The Action:
stage {
name = “Deploy_Tst_Int_Apps”
dynamic “action” {
for_each = var.app_codedeploy_deployment_group
content {
name = “Deploy-App”
category = “Deploy”
owner = “AWS”
provider = “CodeDeployToECS”
version = “1”
run_order = 4
input_artifacts = [“build”]
role_arn = aws_iam_role.codepipeline_role.arn
configuration = {
ApplicationName = action.value.app_name
DeploymentGroupName = action.value.deployment_group_name
TaskDefinitionTemplateArtifact = “build”
AppSpecTemplateArtifact = “build”
}
}

Current Errors:
│ Error: Unsupported attribute

│ on .terraform/modules/xxxxx_dev.xxxxx_build_pipeline/codepipeline-with-migrate.tf line 162, in resource “aws_codepipeline” “build_pipeline_with_migrate”:
│ 162: ApplicationName = action.value.app_name
│ ├────────────────
│ │ action.value is object with 2 attributes

│ This object does not have an attribute named “app_name”.


│ Error: Unsupported attribute

│ on .terraform/modules/xxxx_dev.xxx_build_pipeline/codepipeline-with-migrate.tf line 163, in resource “aws_codepipeline” “build_pipeline_with_migrate”:
│ 163: DeploymentGroupName = action.value.deployment_group_name
│ ├────────────────
│ │ action.value is object with 2 attributes

│ This object does not have an attribute named “deployment_group_name”.

Map of var.app_codedeploy_deployment_group
app_codedeploy_deployment_group = [
{
“adm” = {
“alarm_configuration” = tolist()
“app_name” = “dev-xxxx-adm”
“arn” = “arn:aws:codedeploy:xxxxxx:xxxxxxxx:deploymentgroup:dev-xxx-adm/xxx”
“auto_rollback_configuration” = tolist([
{
“enabled” = true
“events” = toset([
“DEPLOYMENT_FAILURE”,
])
},
])
“autoscaling_groups” = toset()
“blue_green_deployment_config” = tolist([
{
“deployment_ready_option” = tolist([
{
“action_on_timeout” = “CONTINUE_DEPLOYMENT”
“wait_time_in_minutes” = 0
},
])
“green_fleet_provisioning_option” = tolist()
“terminate_blue_instances_on_deployment_success” = tolist([
{
“action” = “TERMINATE”
“termination_wait_time_in_minutes” = 1
},
])
},
])
“compute_platform” = “ECS”
“deployment_config_name” = “CodeDeployDefault.ECSAllAtOnce”
“deployment_group_id” = “xxxxxx”
“deployment_group_name” = “dev-xxxxxx-app-deploy-group”
“deployment_style” = tolist([
{
“deployment_option” = “WITH_TRAFFIC_CONTROL”
“deployment_type” = “BLUE_GREEN”
},
])
“ec2_tag_filter” = toset()
“ec2_tag_set” = toset()
“ecs_service” = tolist([
{
“cluster_name” = “dev-apps”
“service_name” = “dev-xxxxxx-adm-service”
},
])
“id” = “xxxxxxxxxxx”
“load_balancer_info” = tolist([
{
“elb_info” = toset()
“target_group_info” = toset()
“target_group_pair_info” = tolist([
{
“prod_traffic_route” = tolist([
{
“listener_arns” = toset([
“xxxxxxxxxxx”,
])
},
])
“target_group” = tolist([
{
“name” = “dev-pla-adm-ab”
},
{
“name” = “dev-pla-adm-ag”
},
])
“test_traffic_route” = tolist()
},
])
},
])
“on_premises_instance_tag_filter” = toset()
“service_role_arn” = “arn:aws:iam::xxxxxx:role/devxxxxx-codedeploy-role”
“tags” = tomap({})
“tags_all” = tomap({})
“trigger_configuration” = toset()
}
“del” = {
“alarm_configuration” = tolist()
“app_name” = “dev-player-del”
“arn” = “arn:aws:codedeploy:us-east-1:xxxxxx:deploymentgroup:dev-xxxxx-del/dev-xxxx-app-deploy-group”
“auto_rollback_configuration” = tolist([
{
“enabled” = true
“events” = toset([
“DEPLOYMENT_FAILURE”,
])
},
])
“autoscaling_groups” = toset()
“blue_green_deployment_config” = tolist([
{
“deployment_ready_option” = tolist([
{
“action_on_timeout” = “CONTINUE_DEPLOYMENT”
“wait_time_in_minutes” = 0
},
])
“green_fleet_provisioning_option” = tolist()
“terminate_blue_instances_on_deployment_success” = tolist([
{
“action” = “TERMINATE”
“termination_wait_time_in_minutes” = 1
},
])
},
])
“compute_platform” = “ECS”
“deployment_config_name” = “CodeDeployDefault.ECSAllAtOnce”
“deployment_group_id” = “xxxxxxxx”
“deployment_group_name” = “dev-xxxx-app-deploy-group”
“deployment_style” = tolist([
{
“deployment_option” = “WITH_TRAFFIC_CONTROL”
“deployment_type” = “BLUE_GREEN”
},
])
“ec2_tag_filter” = toset()
“ec2_tag_set” = toset()
“ecs_service” = tolist([
{
“cluster_name” = “dev-apps”
“service_name” = “dev-xxx-del-service”
},
])
“id” = “xxxxxx”
“load_balancer_info” = tolist([
{
“elb_info” = toset()
“target_group_info” = toset()
“target_group_pair_info” = tolist([
{
“prod_traffic_route” = tolist([
{
“listener_arns” = toset([
“arn:aws:elasticloadbalancing:xxxxx:2xxxxxx:listener/app/dev-xxxxxx-del-alb/4xxxxxxx”,
])
},
])
“target_group” = tolist([
{
“name” = “dev-pxx-del-ab”
},
{
“name” = “dev-xxxx-del-ag”
},
])
“test_traffic_route” = tolist()
},
])
},
])
“on_premises_instance_tag_filter” = toset()
“service_role_arn” = “arn:aws:iam::xxxxxxx:role/dev-xxxxx-codedeploy-role”
“tags” = tomap({})
“tags_all” = tomap({})
“trigger_configuration” = toset()
}
},
]

Appreciate any suggestions on what I am doing wrong. Thanks!

Problem Resolved:

Needed a [0] on the end of the variable I was iterating on. The iterator was one level deeper than I thought.

for_each = var.app_codedeploy_deployment_group[0]