{"id":13505633,"url":"https://github.com/terraform-aws-modules/terraform-aws-ecs","last_synced_at":"2026-03-06T00:10:37.146Z","repository":{"id":37444372,"uuid":"104857991","full_name":"terraform-aws-modules/terraform-aws-ecs","owner":"terraform-aws-modules","description":"Terraform module to create AWS ECS resources 🇺🇦","archived":false,"fork":false,"pushed_at":"2026-02-19T13:48:45.000Z","size":862,"stargazers_count":658,"open_issues_count":5,"forks_count":659,"subscribers_count":16,"default_branch":"master","last_synced_at":"2026-03-04T18:59:13.253Z","etag":null,"topics":["aws","aws-ecs","ecs","terraform","terraform-module","terraform-modules"],"latest_commit_sha":null,"homepage":"https://registry.terraform.io/modules/terraform-aws-modules/ecs/aws","language":"HCL","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/terraform-aws-modules.png","metadata":{"funding":{"github":["antonbabenko"],"custom":"https://www.paypal.me/antonbabenko"},"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2017-09-26T08:31:12.000Z","updated_at":"2026-02-23T11:29:44.000Z","dependencies_parsed_at":"2023-11-28T00:26:21.255Z","dependency_job_id":"a3e551c3-1bb0-4550-ac08-d315215905a3","html_url":"https://github.com/terraform-aws-modules/terraform-aws-ecs","commit_stats":{"total_commits":156,"total_committers":37,"mean_commits":4.216216216216216,"dds":0.7564102564102564,"last_synced_commit":"fd0f0ecd7fd3a85d8d738320d37a22644b5f129a"},"previous_names":[],"tags_count":93,"template":false,"template_full_name":null,"purl":"pkg:github/terraform-aws-modules/terraform-aws-ecs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/terraform-aws-modules%2Fterraform-aws-ecs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/terraform-aws-modules%2Fterraform-aws-ecs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/terraform-aws-modules%2Fterraform-aws-ecs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/terraform-aws-modules%2Fterraform-aws-ecs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/terraform-aws-modules","download_url":"https://codeload.github.com/terraform-aws-modules/terraform-aws-ecs/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/terraform-aws-modules%2Fterraform-aws-ecs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30156259,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-05T22:39:40.138Z","status":"ssl_error","status_checked_at":"2026-03-05T22:39:24.771Z","response_time":93,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aws","aws-ecs","ecs","terraform","terraform-module","terraform-modules"],"created_at":"2024-08-01T00:01:10.893Z","updated_at":"2026-03-06T00:10:37.125Z","avatar_url":"https://github.com/terraform-aws-modules.png","language":"HCL","funding_links":["https://github.com/sponsors/antonbabenko","https://www.paypal.me/antonbabenko"],"categories":["Community Modules"],"sub_categories":["Miscellaneous"],"readme":"# AWS ECS Terraform module\n\nTerraform module which creates ECS (Elastic Container Service) resources on AWS.\n\n[![SWUbanner](https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/banner2-direct.svg)](https://github.com/vshymanskyy/StandWithUkraine/blob/main/docs/README.md)\n\n## Available Features\n\n- ECS cluster w/ Fargate or EC2 Auto Scaling capacity providers\n- ECS Service w/ task definition, task set, and container definition support\n- Separate sub-modules or integrated module for ECS cluster and service\n\nFor more details see the [design doc](https://github.com/terraform-aws-modules/terraform-aws-ecs/blob/master/docs/README.md)\n\n## Usage\n\nThis project supports creating resources through individual sub-modules, or through a single module that creates both the cluster and service resources. See the respective sub-module directory for more details and example usage.\n\n### Integrated Cluster w/ Services\n\n```hcl\nmodule \"ecs\" {\n  source = \"terraform-aws-modules/ecs/aws\"\n\n  cluster_name = \"ecs-integrated\"\n\n  cluster_configuration = {\n    execute_command_configuration = {\n      logging = \"OVERRIDE\"\n      log_configuration = {\n        cloud_watch_log_group_name = \"/aws/ecs/aws-ec2\"\n      }\n    }\n  }\n\n  # Cluster capacity providers\n  cluster_capacity_providers = [\"FARGATE\", \"FARGATE_SPOT\"]\n  default_capacity_provider_strategy = {\n    FARGATE = {\n      weight = 50\n      base   = 20\n    }\n    FARGATE_SPOT = {\n      weight = 50\n    }\n  }\n\n  services = {\n    ecsdemo-frontend = {\n      cpu    = 1024\n      memory = 4096\n\n      # Container definition(s)\n      container_definitions = {\n\n        fluent-bit = {\n          cpu       = 512\n          memory    = 1024\n          essential = true\n          image     = \"906394416424.dkr.ecr.us-west-2.amazonaws.com/aws-for-fluent-bit:stable\"\n          firelensConfiguration = {\n            type = \"fluentbit\"\n          }\n          memoryReservation = 50\n        }\n\n        ecs-sample = {\n          cpu       = 512\n          memory    = 1024\n          essential = true\n          image     = \"public.ecr.aws/aws-containers/ecsdemo-frontend:776fd50\"\n          portMappings = [\n            {\n              name          = \"ecs-sample\"\n              containerPort = 80\n              protocol      = \"tcp\"\n            }\n          ]\n\n          # Example image used requires access to write to root filesystem\n          readonlyRootFilesystem = false\n\n          dependsOn = [{\n            containerName = \"fluent-bit\"\n            condition     = \"START\"\n          }]\n\n          enable_cloudwatch_logging = false\n          logConfiguration = {\n            logDriver = \"awsfirelens\"\n            options = {\n              Name                    = \"firehose\"\n              region                  = \"eu-west-1\"\n              delivery_stream         = \"my-stream\"\n              log-driver-buffer-limit = \"2097152\"\n            }\n          }\n          memoryReservation = 100\n        }\n      }\n\n      service_connect_configuration = {\n        namespace = \"example\"\n        service = [{\n          client_alias = {\n            port     = 80\n            dns_name = \"ecs-sample\"\n          }\n          port_name      = \"ecs-sample\"\n          discovery_name = \"ecs-sample\"\n        }]\n      }\n\n      load_balancer = {\n        service = {\n          target_group_arn = \"arn:aws:elasticloadbalancing:eu-west-1:1234567890:targetgroup/bluegreentarget1/209a844cd01825a4\"\n          container_name   = \"ecs-sample\"\n          container_port   = 80\n        }\n      }\n\n      subnet_ids = [\"subnet-abcde012\", \"subnet-bcde012a\", \"subnet-fghi345a\"]\n\n      security_group_ingress_rules = {\n        alb_3000 = {\n          description                  = \"Service port\"\n          from_port                    = local.container_port\n          ip_protocol                  = \"tcp\"\n          referenced_security_group_id = \"sg-12345678\"\n        }\n      }\n      security_group_egress_rules = {\n        all = {\n          ip_protocol = \"-1\"\n          cidr_ipv4   = \"0.0.0.0/0\"\n        }\n      }\n    }\n  }\n\n  tags = {\n    Environment = \"Development\"\n    Project     = \"Example\"\n  }\n}\n```\n\n## Examples\n\n- [ECS cluster w/ integrated service(s)](https://github.com/terraform-aws-modules/terraform-aws-ecs/tree/master/examples/complete)\n- [ECS container definition](https://github.com/terraform-aws-modules/terraform-aws-ecs/tree/master/examples/container-definition)\n- [ECS cluster w/ EC2 Autoscaling capacity provider](https://github.com/terraform-aws-modules/terraform-aws-ecs/tree/master/examples/ec2-autoscaling)\n- [ECS express service](https://github.com/terraform-aws-modules/terraform-aws-ecs/tree/master/examples/express-service)\n- [ECS cluster w/ Fargate capacity provider](https://github.com/terraform-aws-modules/terraform-aws-ecs/tree/master/examples/fargate)\n- [ECS cluster w/ ECS managed instances capacity provider](https://github.com/terraform-aws-modules/terraform-aws-ecs/tree/master/examples/managed-instances)\n\n\u003c!-- BEGIN_TF_DOCS --\u003e\n## Requirements\n\n| Name | Version |\n|------|---------|\n| \u003ca name=\"requirement_terraform\"\u003e\u003c/a\u003e [terraform](#requirement\\_terraform) | \u003e= 1.5.7 |\n| \u003ca name=\"requirement_aws\"\u003e\u003c/a\u003e [aws](#requirement\\_aws) | \u003e= 6.34 |\n\n## Providers\n\nNo providers.\n\n## Modules\n\n| Name | Source | Version |\n|------|--------|---------|\n| \u003ca name=\"module_cluster\"\u003e\u003c/a\u003e [cluster](#module\\_cluster) | ./modules/cluster | n/a |\n| \u003ca name=\"module_service\"\u003e\u003c/a\u003e [service](#module\\_service) | ./modules/service | n/a |\n\n## Resources\n\nNo resources.\n\n## Inputs\n\n| Name | Description | Type | Default | Required |\n|------|-------------|------|---------|:--------:|\n| \u003ca name=\"input_capacity_providers\"\u003e\u003c/a\u003e [capacity\\_providers](#input\\_capacity\\_providers) | Map of capacity provider definitions to create for the cluster | \u003cpre\u003emap(object({\u003cbr/\u003e    auto_scaling_group_provider = optional(object({\u003cbr/\u003e      auto_scaling_group_arn = string\u003cbr/\u003e      managed_draining       = optional(string, \"ENABLED\")\u003cbr/\u003e      managed_scaling = optional(object({\u003cbr/\u003e        instance_warmup_period    = optional(number)\u003cbr/\u003e        maximum_scaling_step_size = optional(number)\u003cbr/\u003e        minimum_scaling_step_size = optional(number)\u003cbr/\u003e        status                    = optional(string)\u003cbr/\u003e        target_capacity           = optional(number)\u003cbr/\u003e      }))\u003cbr/\u003e      managed_termination_protection = optional(string)\u003cbr/\u003e    }))\u003cbr/\u003e    managed_instances_provider = optional(object({\u003cbr/\u003e      infrastructure_role_arn = optional(string)\u003cbr/\u003e      instance_launch_template = object({\u003cbr/\u003e        capacity_option_type     = optional(string)\u003cbr/\u003e        ec2_instance_profile_arn = optional(string)\u003cbr/\u003e        instance_requirements = optional(object({\u003cbr/\u003e          accelerator_count = optional(object({\u003cbr/\u003e            max = optional(number)\u003cbr/\u003e            min = optional(number)\u003cbr/\u003e          }))\u003cbr/\u003e          accelerator_manufacturers = optional(list(string))\u003cbr/\u003e          accelerator_names         = optional(list(string))\u003cbr/\u003e          accelerator_total_memory_mib = optional(object({\u003cbr/\u003e            max = optional(number)\u003cbr/\u003e            min = optional(number)\u003cbr/\u003e          }))\u003cbr/\u003e          accelerator_types      = optional(list(string))\u003cbr/\u003e          allowed_instance_types = optional(list(string))\u003cbr/\u003e          bare_metal             = optional(string)\u003cbr/\u003e          baseline_ebs_bandwidth_mbps = optional(object({\u003cbr/\u003e            max = optional(number)\u003cbr/\u003e            min = optional(number)\u003cbr/\u003e          }))\u003cbr/\u003e          burstable_performance                                   = optional(string)\u003cbr/\u003e          cpu_manufacturers                                       = optional(list(string))\u003cbr/\u003e          excluded_instance_types                                 = optional(list(string))\u003cbr/\u003e          instance_generations                                    = optional(list(string))\u003cbr/\u003e          local_storage                                           = optional(string)\u003cbr/\u003e          local_storage_types                                     = optional(list(string))\u003cbr/\u003e          max_spot_price_as_percentage_of_optimal_on_demand_price = optional(number)\u003cbr/\u003e          memory_gib_per_vcpu = optional(object({\u003cbr/\u003e            max = optional(number)\u003cbr/\u003e            min = optional(number)\u003cbr/\u003e          }))\u003cbr/\u003e          memory_mib = optional(object({\u003cbr/\u003e            max = optional(number)\u003cbr/\u003e            min = optional(number)\u003cbr/\u003e          }))\u003cbr/\u003e          network_bandwidth_gbps = optional(object({\u003cbr/\u003e            max = optional(number)\u003cbr/\u003e            min = optional(number)\u003cbr/\u003e          }))\u003cbr/\u003e          network_interface_count = optional(object({\u003cbr/\u003e            max = optional(number)\u003cbr/\u003e            min = optional(number)\u003cbr/\u003e          }))\u003cbr/\u003e          on_demand_max_price_percentage_over_lowest_price = optional(number)\u003cbr/\u003e          require_hibernate_support                        = optional(bool)\u003cbr/\u003e          spot_max_price_percentage_over_lowest_price      = optional(number)\u003cbr/\u003e          total_local_storage_gb = optional(object({\u003cbr/\u003e            max = optional(number)\u003cbr/\u003e            min = optional(number)\u003cbr/\u003e          }))\u003cbr/\u003e          vcpu_count = optional(object({\u003cbr/\u003e            max = optional(number)\u003cbr/\u003e            min = optional(number)\u003cbr/\u003e          }))\u003cbr/\u003e        }))\u003cbr/\u003e        monitoring = optional(string)\u003cbr/\u003e        network_configuration = optional(object({\u003cbr/\u003e          security_groups = optional(list(string), [])\u003cbr/\u003e          subnets         = list(string)\u003cbr/\u003e        }))\u003cbr/\u003e        storage_configuration = optional(object({\u003cbr/\u003e          storage_size_gib = number\u003cbr/\u003e        }))\u003cbr/\u003e      })\u003cbr/\u003e      propagate_tags = optional(string, \"CAPACITY_PROVIDER\")\u003cbr/\u003e    }))\u003cbr/\u003e    name = optional(string) # Will fall back to use map key if not set\u003cbr/\u003e    tags = optional(map(string), {})\u003cbr/\u003e  }))\u003c/pre\u003e | `null` | no |\n| \u003ca name=\"input_cloudwatch_log_group_class\"\u003e\u003c/a\u003e [cloudwatch\\_log\\_group\\_class](#input\\_cloudwatch\\_log\\_group\\_class) | Specified the log class of the log group. Possible values are: `STANDARD` or `INFREQUENT_ACCESS` | `string` | `null` | no |\n| \u003ca name=\"input_cloudwatch_log_group_kms_key_id\"\u003e\u003c/a\u003e [cloudwatch\\_log\\_group\\_kms\\_key\\_id](#input\\_cloudwatch\\_log\\_group\\_kms\\_key\\_id) | If a KMS Key ARN is set, this key will be used to encrypt the corresponding log group. Please be sure that the KMS Key has an appropriate key policy (https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/encrypt-log-data-kms.html) | `string` | `null` | no |\n| \u003ca name=\"input_cloudwatch_log_group_name\"\u003e\u003c/a\u003e [cloudwatch\\_log\\_group\\_name](#input\\_cloudwatch\\_log\\_group\\_name) | Custom name of CloudWatch Log Group for ECS cluster | `string` | `null` | no |\n| \u003ca name=\"input_cloudwatch_log_group_retention_in_days\"\u003e\u003c/a\u003e [cloudwatch\\_log\\_group\\_retention\\_in\\_days](#input\\_cloudwatch\\_log\\_group\\_retention\\_in\\_days) | Number of days to retain log events | `number` | `90` | no |\n| \u003ca name=\"input_cloudwatch_log_group_tags\"\u003e\u003c/a\u003e [cloudwatch\\_log\\_group\\_tags](#input\\_cloudwatch\\_log\\_group\\_tags) | A map of additional tags to add to the log group created | `map(string)` | `{}` | no |\n| \u003ca name=\"input_cluster_capacity_providers\"\u003e\u003c/a\u003e [cluster\\_capacity\\_providers](#input\\_cluster\\_capacity\\_providers) | List of capacity provider names to associate with the ECS cluster. Note: any capacity providers created by this module will be automatically added | `list(string)` | `[]` | no |\n| \u003ca name=\"input_cluster_configuration\"\u003e\u003c/a\u003e [cluster\\_configuration](#input\\_cluster\\_configuration) | The execute command configuration for the cluster | \u003cpre\u003eobject({\u003cbr/\u003e    execute_command_configuration = optional(object({\u003cbr/\u003e      kms_key_id = optional(string)\u003cbr/\u003e      log_configuration = optional(object({\u003cbr/\u003e        cloud_watch_encryption_enabled = optional(bool)\u003cbr/\u003e        cloud_watch_log_group_name     = optional(string)\u003cbr/\u003e        s3_bucket_encryption_enabled   = optional(bool)\u003cbr/\u003e        s3_bucket_name                 = optional(string)\u003cbr/\u003e        s3_kms_key_id                  = optional(string)\u003cbr/\u003e        s3_key_prefix                  = optional(string)\u003cbr/\u003e      }))\u003cbr/\u003e      logging = optional(string, \"OVERRIDE\")\u003cbr/\u003e    }))\u003cbr/\u003e    managed_storage_configuration = optional(object({\u003cbr/\u003e      fargate_ephemeral_storage_kms_key_id = optional(string)\u003cbr/\u003e      kms_key_id                           = optional(string)\u003cbr/\u003e    }))\u003cbr/\u003e  })\u003c/pre\u003e | \u003cpre\u003e{\u003cbr/\u003e  \"execute_command_configuration\": {\u003cbr/\u003e    \"log_configuration\": {\u003cbr/\u003e      \"cloud_watch_log_group_name\": \"placeholder\"\u003cbr/\u003e    }\u003cbr/\u003e  }\u003cbr/\u003e}\u003c/pre\u003e | no |\n| \u003ca name=\"input_cluster_name\"\u003e\u003c/a\u003e [cluster\\_name](#input\\_cluster\\_name) | Name of the cluster (up to 255 letters, numbers, hyphens, and underscores) | `string` | `\"\"` | no |\n| \u003ca name=\"input_cluster_service_connect_defaults\"\u003e\u003c/a\u003e [cluster\\_service\\_connect\\_defaults](#input\\_cluster\\_service\\_connect\\_defaults) | Configures a default Service Connect namespace | \u003cpre\u003eobject({\u003cbr/\u003e    namespace = string\u003cbr/\u003e  })\u003c/pre\u003e | `null` | no |\n| \u003ca name=\"input_cluster_setting\"\u003e\u003c/a\u003e [cluster\\_setting](#input\\_cluster\\_setting) | List of configuration block(s) with cluster settings. For example, this can be used to enable CloudWatch Container Insights for a cluster | \u003cpre\u003elist(object({\u003cbr/\u003e    name  = string\u003cbr/\u003e    value = string\u003cbr/\u003e  }))\u003c/pre\u003e | \u003cpre\u003e[\u003cbr/\u003e  {\u003cbr/\u003e    \"name\": \"containerInsights\",\u003cbr/\u003e    \"value\": \"enabled\"\u003cbr/\u003e  }\u003cbr/\u003e]\u003c/pre\u003e | no |\n| \u003ca name=\"input_cluster_tags\"\u003e\u003c/a\u003e [cluster\\_tags](#input\\_cluster\\_tags) | A map of additional tags to add to the cluster | `map(string)` | `{}` | no |\n| \u003ca name=\"input_create\"\u003e\u003c/a\u003e [create](#input\\_create) | Determines whether resources will be created (affects all resources) | `bool` | `true` | no |\n| \u003ca name=\"input_create_cloudwatch_log_group\"\u003e\u003c/a\u003e [create\\_cloudwatch\\_log\\_group](#input\\_create\\_cloudwatch\\_log\\_group) | Determines whether a log group is created by this module for the cluster logs. If not, AWS will automatically create one if logging is enabled | `bool` | `true` | no |\n| \u003ca name=\"input_create_infrastructure_iam_role\"\u003e\u003c/a\u003e [create\\_infrastructure\\_iam\\_role](#input\\_create\\_infrastructure\\_iam\\_role) | Determines whether the ECS infrastructure IAM role should be created | `bool` | `true` | no |\n| \u003ca name=\"input_create_node_iam_instance_profile\"\u003e\u003c/a\u003e [create\\_node\\_iam\\_instance\\_profile](#input\\_create\\_node\\_iam\\_instance\\_profile) | Determines whether an IAM instance profile is created or to use an existing IAM instance profile | `bool` | `true` | no |\n| \u003ca name=\"input_create_security_group\"\u003e\u003c/a\u003e [create\\_security\\_group](#input\\_create\\_security\\_group) | Determines if a security group is created | `bool` | `true` | no |\n| \u003ca name=\"input_create_task_exec_iam_role\"\u003e\u003c/a\u003e [create\\_task\\_exec\\_iam\\_role](#input\\_create\\_task\\_exec\\_iam\\_role) | Determines whether the ECS task definition IAM role should be created | `bool` | `false` | no |\n| \u003ca name=\"input_create_task_exec_policy\"\u003e\u003c/a\u003e [create\\_task\\_exec\\_policy](#input\\_create\\_task\\_exec\\_policy) | Determines whether the ECS task definition IAM policy should be created. This includes permissions included in AmazonECSTaskExecutionRolePolicy as well as access to secrets and SSM parameters | `bool` | `true` | no |\n| \u003ca name=\"input_default_capacity_provider_strategy\"\u003e\u003c/a\u003e [default\\_capacity\\_provider\\_strategy](#input\\_default\\_capacity\\_provider\\_strategy) | Map of default capacity provider strategy definitions to use for the cluster | \u003cpre\u003emap(object({\u003cbr/\u003e    base   = optional(number)\u003cbr/\u003e    name   = optional(string) # Will fall back to use map key if not set\u003cbr/\u003e    weight = optional(number)\u003cbr/\u003e  }))\u003c/pre\u003e | `null` | no |\n| \u003ca name=\"input_disable_v7_default_name_description\"\u003e\u003c/a\u003e [disable\\_v7\\_default\\_name\\_description](#input\\_disable\\_v7\\_default\\_name\\_description) | [DEPRECATED - will be removed in v8.0] Determines whether to disable the default postfix added to resource names and descriptions added in v7.0 | `bool` | `false` | no |\n| \u003ca name=\"input_infrastructure_iam_role_description\"\u003e\u003c/a\u003e [infrastructure\\_iam\\_role\\_description](#input\\_infrastructure\\_iam\\_role\\_description) | Description of the role | `string` | `null` | no |\n| \u003ca name=\"input_infrastructure_iam_role_name\"\u003e\u003c/a\u003e [infrastructure\\_iam\\_role\\_name](#input\\_infrastructure\\_iam\\_role\\_name) | Name to use on IAM role created | `string` | `null` | no |\n| \u003ca name=\"input_infrastructure_iam_role_override_policy_documents\"\u003e\u003c/a\u003e [infrastructure\\_iam\\_role\\_override\\_policy\\_documents](#input\\_infrastructure\\_iam\\_role\\_override\\_policy\\_documents) | List of IAM policy documents that are merged together into the exported document. In merging, statements with non-blank `sid`s will override statements with the same `sid` | `list(string)` | `[]` | no |\n| \u003ca name=\"input_infrastructure_iam_role_path\"\u003e\u003c/a\u003e [infrastructure\\_iam\\_role\\_path](#input\\_infrastructure\\_iam\\_role\\_path) | IAM role path | `string` | `null` | no |\n| \u003ca name=\"input_infrastructure_iam_role_permissions_boundary\"\u003e\u003c/a\u003e [infrastructure\\_iam\\_role\\_permissions\\_boundary](#input\\_infrastructure\\_iam\\_role\\_permissions\\_boundary) | ARN of the policy that is used to set the permissions boundary for the IAM role | `string` | `null` | no |\n| \u003ca name=\"input_infrastructure_iam_role_source_policy_documents\"\u003e\u003c/a\u003e [infrastructure\\_iam\\_role\\_source\\_policy\\_documents](#input\\_infrastructure\\_iam\\_role\\_source\\_policy\\_documents) | List of IAM policy documents that are merged together into the exported document. Statements must have unique `sid`s | `list(string)` | `[]` | no |\n| \u003ca name=\"input_infrastructure_iam_role_statements\"\u003e\u003c/a\u003e [infrastructure\\_iam\\_role\\_statements](#input\\_infrastructure\\_iam\\_role\\_statements) | A map of IAM policy [statements](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/iam_policy_document#statement) for custom permission usage | \u003cpre\u003emap(object({\u003cbr/\u003e    sid           = optional(string)\u003cbr/\u003e    actions       = optional(list(string))\u003cbr/\u003e    not_actions   = optional(list(string))\u003cbr/\u003e    effect        = optional(string, \"Allow\")\u003cbr/\u003e    resources     = optional(list(string))\u003cbr/\u003e    not_resources = optional(list(string))\u003cbr/\u003e    principals = optional(list(object({\u003cbr/\u003e      type        = string\u003cbr/\u003e      identifiers = list(string)\u003cbr/\u003e    })))\u003cbr/\u003e    not_principals = optional(list(object({\u003cbr/\u003e      type        = string\u003cbr/\u003e      identifiers = list(string)\u003cbr/\u003e    })))\u003cbr/\u003e    condition = optional(list(object({\u003cbr/\u003e      test     = string\u003cbr/\u003e      variable = string\u003cbr/\u003e      values   = list(string)\u003cbr/\u003e    })))\u003cbr/\u003e  }))\u003c/pre\u003e | `null` | no |\n| \u003ca name=\"input_infrastructure_iam_role_tags\"\u003e\u003c/a\u003e [infrastructure\\_iam\\_role\\_tags](#input\\_infrastructure\\_iam\\_role\\_tags) | A map of additional tags to add to the IAM role created | `map(string)` | `{}` | no |\n| \u003ca name=\"input_infrastructure_iam_role_use_name_prefix\"\u003e\u003c/a\u003e [infrastructure\\_iam\\_role\\_use\\_name\\_prefix](#input\\_infrastructure\\_iam\\_role\\_use\\_name\\_prefix) | Determines whether the IAM role name (`iam_role_name`) is used as a prefix | `bool` | `true` | no |\n| \u003ca name=\"input_node_iam_role_additional_policies\"\u003e\u003c/a\u003e [node\\_iam\\_role\\_additional\\_policies](#input\\_node\\_iam\\_role\\_additional\\_policies) | Additional policies to be added to the IAM role | `map(string)` | `{}` | no |\n| \u003ca name=\"input_node_iam_role_description\"\u003e\u003c/a\u003e [node\\_iam\\_role\\_description](#input\\_node\\_iam\\_role\\_description) | Description of the role | `string` | `\"ECS Managed Instances node IAM role\"` | no |\n| \u003ca name=\"input_node_iam_role_name\"\u003e\u003c/a\u003e [node\\_iam\\_role\\_name](#input\\_node\\_iam\\_role\\_name) | Name to use on IAM role/instance profile created | `string` | `null` | no |\n| \u003ca name=\"input_node_iam_role_override_policy_documents\"\u003e\u003c/a\u003e [node\\_iam\\_role\\_override\\_policy\\_documents](#input\\_node\\_iam\\_role\\_override\\_policy\\_documents) | List of IAM policy documents that are merged together into the exported document. In merging, statements with non-blank `sid`s will override statements with the same `sid` | `list(string)` | `[]` | no |\n| \u003ca name=\"input_node_iam_role_path\"\u003e\u003c/a\u003e [node\\_iam\\_role\\_path](#input\\_node\\_iam\\_role\\_path) | IAM role/instance profile path | `string` | `null` | no |\n| \u003ca name=\"input_node_iam_role_permissions_boundary\"\u003e\u003c/a\u003e [node\\_iam\\_role\\_permissions\\_boundary](#input\\_node\\_iam\\_role\\_permissions\\_boundary) | ARN of the policy that is used to set the permissions boundary for the IAM role | `string` | `null` | no |\n| \u003ca name=\"input_node_iam_role_source_policy_documents\"\u003e\u003c/a\u003e [node\\_iam\\_role\\_source\\_policy\\_documents](#input\\_node\\_iam\\_role\\_source\\_policy\\_documents) | List of IAM policy documents that are merged together into the exported document. Statements must have unique `sid`s | `list(string)` | `[]` | no |\n| \u003ca name=\"input_node_iam_role_statements\"\u003e\u003c/a\u003e [node\\_iam\\_role\\_statements](#input\\_node\\_iam\\_role\\_statements) | A map of IAM policy [statements](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/iam_policy_document#statement) for custom permission usage | \u003cpre\u003emap(object({\u003cbr/\u003e    sid           = optional(string)\u003cbr/\u003e    actions       = optional(list(string))\u003cbr/\u003e    not_actions   = optional(list(string))\u003cbr/\u003e    effect        = optional(string, \"Allow\")\u003cbr/\u003e    resources     = optional(list(string))\u003cbr/\u003e    not_resources = optional(list(string))\u003cbr/\u003e    principals = optional(list(object({\u003cbr/\u003e      type        = string\u003cbr/\u003e      identifiers = list(string)\u003cbr/\u003e    })))\u003cbr/\u003e    not_principals = optional(list(object({\u003cbr/\u003e      type        = string\u003cbr/\u003e      identifiers = list(string)\u003cbr/\u003e    })))\u003cbr/\u003e    condition = optional(list(object({\u003cbr/\u003e      test     = string\u003cbr/\u003e      variable = string\u003cbr/\u003e      values   = list(string)\u003cbr/\u003e    })))\u003cbr/\u003e  }))\u003c/pre\u003e | `null` | no |\n| \u003ca name=\"input_node_iam_role_tags\"\u003e\u003c/a\u003e [node\\_iam\\_role\\_tags](#input\\_node\\_iam\\_role\\_tags) | A map of additional tags to add to the IAM role/instance profile created | `map(string)` | `{}` | no |\n| \u003ca name=\"input_node_iam_role_use_name_prefix\"\u003e\u003c/a\u003e [node\\_iam\\_role\\_use\\_name\\_prefix](#input\\_node\\_iam\\_role\\_use\\_name\\_prefix) | Determines whether the IAM role/instance profile name (`node_iam_role_name`) is used as a prefix | `bool` | `true` | no |\n| \u003ca name=\"input_region\"\u003e\u003c/a\u003e [region](#input\\_region) | Region where the resource(s) will be managed. Defaults to the Region set in the provider configuration | `string` | `null` | no |\n| \u003ca name=\"input_security_group_description\"\u003e\u003c/a\u003e [security\\_group\\_description](#input\\_security\\_group\\_description) | Description of the security group created | `string` | `null` | no |\n| \u003ca name=\"input_security_group_egress_rules\"\u003e\u003c/a\u003e [security\\_group\\_egress\\_rules](#input\\_security\\_group\\_egress\\_rules) | Security group egress rules to add to the security group created | \u003cpre\u003emap(object({\u003cbr/\u003e    name = optional(string)\u003cbr/\u003e\u003cbr/\u003e    cidr_ipv4                    = optional(string)\u003cbr/\u003e    cidr_ipv6                    = optional(string)\u003cbr/\u003e    description                  = optional(string)\u003cbr/\u003e    from_port                    = optional(string)\u003cbr/\u003e    ip_protocol                  = optional(string, \"tcp\")\u003cbr/\u003e    prefix_list_id               = optional(string)\u003cbr/\u003e    referenced_security_group_id = optional(string)\u003cbr/\u003e    tags                         = optional(map(string), {})\u003cbr/\u003e    to_port                      = optional(string)\u003cbr/\u003e  }))\u003c/pre\u003e | \u003cpre\u003e{\u003cbr/\u003e  \"all_ipv4\": {\u003cbr/\u003e    \"cidr_ipv4\": \"0.0.0.0/0\",\u003cbr/\u003e    \"description\": \"Allow all IPv4 traffic\",\u003cbr/\u003e    \"ip_protocol\": \"-1\"\u003cbr/\u003e  },\u003cbr/\u003e  \"all_ipv6\": {\u003cbr/\u003e    \"cidr_ipv6\": \"::/0\",\u003cbr/\u003e    \"description\": \"Allow all IPv6 traffic\",\u003cbr/\u003e    \"ip_protocol\": \"-1\"\u003cbr/\u003e  }\u003cbr/\u003e}\u003c/pre\u003e | no |\n| \u003ca name=\"input_security_group_ingress_rules\"\u003e\u003c/a\u003e [security\\_group\\_ingress\\_rules](#input\\_security\\_group\\_ingress\\_rules) | Security group ingress rules to add to the security group created | \u003cpre\u003emap(object({\u003cbr/\u003e    name = optional(string)\u003cbr/\u003e\u003cbr/\u003e    cidr_ipv4                    = optional(string)\u003cbr/\u003e    cidr_ipv6                    = optional(string)\u003cbr/\u003e    description                  = optional(string)\u003cbr/\u003e    from_port                    = optional(string)\u003cbr/\u003e    ip_protocol                  = optional(string, \"tcp\")\u003cbr/\u003e    prefix_list_id               = optional(string)\u003cbr/\u003e    referenced_security_group_id = optional(string)\u003cbr/\u003e    tags                         = optional(map(string), {})\u003cbr/\u003e    to_port                      = optional(string)\u003cbr/\u003e  }))\u003c/pre\u003e | `{}` | no |\n| \u003ca name=\"input_security_group_name\"\u003e\u003c/a\u003e [security\\_group\\_name](#input\\_security\\_group\\_name) | Name to use on security group created | `string` | `null` | no |\n| \u003ca name=\"input_security_group_tags\"\u003e\u003c/a\u003e [security\\_group\\_tags](#input\\_security\\_group\\_tags) | A map of additional tags to add to the security group created | `map(string)` | `{}` | no |\n| \u003ca name=\"input_security_group_use_name_prefix\"\u003e\u003c/a\u003e [security\\_group\\_use\\_name\\_prefix](#input\\_security\\_group\\_use\\_name\\_prefix) | Determines whether the security group name (`security_group_name`) is used as a prefix | `bool` | `true` | no |\n| \u003ca name=\"input_services\"\u003e\u003c/a\u003e [services](#input\\_services) | Map of service definitions to create | \u003cpre\u003emap(object({\u003cbr/\u003e    create         = optional(bool)\u003cbr/\u003e    create_service = optional(bool)\u003cbr/\u003e    tags           = optional(map(string))\u003cbr/\u003e\u003cbr/\u003e    # Service\u003cbr/\u003e    ignore_task_definition_changes = optional(bool)\u003cbr/\u003e    alarms = optional(object({\u003cbr/\u003e      alarm_names = list(string)\u003cbr/\u003e      enable      = optional(bool)\u003cbr/\u003e      rollback    = optional(bool)\u003cbr/\u003e    }))\u003cbr/\u003e    availability_zone_rebalancing = optional(string)\u003cbr/\u003e    capacity_provider_strategy = optional(map(object({\u003cbr/\u003e      base              = optional(number)\u003cbr/\u003e      capacity_provider = string\u003cbr/\u003e      weight            = optional(number)\u003cbr/\u003e    })))\u003cbr/\u003e    deployment_circuit_breaker = optional(object({\u003cbr/\u003e      enable   = bool\u003cbr/\u003e      rollback = bool\u003cbr/\u003e    }))\u003cbr/\u003e    deployment_configuration = optional(object({\u003cbr/\u003e      strategy             = optional(string)\u003cbr/\u003e      bake_time_in_minutes = optional(string)\u003cbr/\u003e      canary_configuration = optional(object({\u003cbr/\u003e        canary_bake_time_in_minutes = optional(string)\u003cbr/\u003e        canary_percent              = optional(string)\u003cbr/\u003e      }))\u003cbr/\u003e      linear_configuration = optional(object({\u003cbr/\u003e        step_bake_time_in_minutes = optional(string)\u003cbr/\u003e        step_percent              = optional(string)\u003cbr/\u003e      }))\u003cbr/\u003e      lifecycle_hook = optional(map(object({\u003cbr/\u003e        hook_target_arn  = string\u003cbr/\u003e        role_arn         = optional(string)\u003cbr/\u003e        lifecycle_stages = list(string)\u003cbr/\u003e        hook_details     = optional(string)\u003cbr/\u003e      })))\u003cbr/\u003e    }))\u003cbr/\u003e    deployment_controller = optional(object({\u003cbr/\u003e      type = optional(string)\u003cbr/\u003e    }))\u003cbr/\u003e    deployment_maximum_percent         = optional(number, 200)\u003cbr/\u003e    deployment_minimum_healthy_percent = optional(number, 66)\u003cbr/\u003e    desired_count                      = optional(number, 1)\u003cbr/\u003e    enable_ecs_managed_tags            = optional(bool)\u003cbr/\u003e    enable_execute_command             = optional(bool)\u003cbr/\u003e    force_delete                       = optional(bool)\u003cbr/\u003e    force_new_deployment               = optional(bool)\u003cbr/\u003e    health_check_grace_period_seconds  = optional(number)\u003cbr/\u003e    launch_type                        = optional(string)\u003cbr/\u003e    load_balancer = optional(map(object({\u003cbr/\u003e      container_name   = string\u003cbr/\u003e      container_port   = number\u003cbr/\u003e      elb_name         = optional(string)\u003cbr/\u003e      target_group_arn = optional(string)\u003cbr/\u003e      advanced_configuration = optional(object({\u003cbr/\u003e        alternate_target_group_arn = string\u003cbr/\u003e        production_listener_rule   = string # Should be optional but bug in provider\u003cbr/\u003e        role_arn                   = optional(string)\u003cbr/\u003e        test_listener_rule         = optional(string)\u003cbr/\u003e      }))\u003cbr/\u003e    })))\u003cbr/\u003e    name               = optional(string) # Will fall back to use map key if not set\u003cbr/\u003e    assign_public_ip   = optional(bool)\u003cbr/\u003e    security_group_ids = optional(list(string))\u003cbr/\u003e    subnet_ids         = optional(list(string))\u003cbr/\u003e    ordered_placement_strategy = optional(list(object({\u003cbr/\u003e      field = optional(string)\u003cbr/\u003e      type  = string\u003cbr/\u003e    })))\u003cbr/\u003e    placement_constraints = optional(map(object({\u003cbr/\u003e      expression = optional(string)\u003cbr/\u003e      type       = string\u003cbr/\u003e    })))\u003cbr/\u003e    platform_version    = optional(string)\u003cbr/\u003e    propagate_tags      = optional(string)\u003cbr/\u003e    scheduling_strategy = optional(string)\u003cbr/\u003e    service_connect_configuration = optional(object({\u003cbr/\u003e      enabled = optional(bool)\u003cbr/\u003e      access_log_configuration = optional(object({\u003cbr/\u003e        format                   = string\u003cbr/\u003e        include_query_parameters = optional(string)\u003cbr/\u003e      }))\u003cbr/\u003e      log_configuration = optional(object({\u003cbr/\u003e        log_driver = string\u003cbr/\u003e        options    = optional(map(string))\u003cbr/\u003e        secret_option = optional(list(object({\u003cbr/\u003e          name       = string\u003cbr/\u003e          value_from = string\u003cbr/\u003e        })))\u003cbr/\u003e      }))\u003cbr/\u003e      namespace = optional(string)\u003cbr/\u003e      service = optional(list(object({\u003cbr/\u003e        client_alias = optional(object({\u003cbr/\u003e          dns_name = optional(string)\u003cbr/\u003e          port     = number\u003cbr/\u003e          test_traffic_rules = optional(list(object({\u003cbr/\u003e            header = optional(object({\u003cbr/\u003e              name = string\u003cbr/\u003e              value = object({\u003cbr/\u003e                exact = string\u003cbr/\u003e              })\u003cbr/\u003e            }))\u003cbr/\u003e          })))\u003cbr/\u003e        }))\u003cbr/\u003e        discovery_name        = optional(string)\u003cbr/\u003e        ingress_port_override = optional(number)\u003cbr/\u003e        port_name             = string\u003cbr/\u003e        timeout = optional(object({\u003cbr/\u003e          idle_timeout_seconds        = optional(number)\u003cbr/\u003e          per_request_timeout_seconds = optional(number)\u003cbr/\u003e        }))\u003cbr/\u003e        tls = optional(object({\u003cbr/\u003e          issuer_cert_authority = object({\u003cbr/\u003e            aws_pca_authority_arn = string\u003cbr/\u003e          })\u003cbr/\u003e          kms_key  = optional(string)\u003cbr/\u003e          role_arn = optional(string)\u003cbr/\u003e        }))\u003cbr/\u003e      })))\u003cbr/\u003e    }))\u003cbr/\u003e    service_registries = optional(object({\u003cbr/\u003e      container_name = optional(string)\u003cbr/\u003e      container_port = optional(number)\u003cbr/\u003e      port           = optional(number)\u003cbr/\u003e      registry_arn   = string\u003cbr/\u003e    }))\u003cbr/\u003e    sigint_rollback = optional(bool)\u003cbr/\u003e    timeouts = optional(object({\u003cbr/\u003e      create = optional(string)\u003cbr/\u003e      update = optional(string)\u003cbr/\u003e      delete = optional(string)\u003cbr/\u003e    }))\u003cbr/\u003e    triggers = optional(map(string))\u003cbr/\u003e    volume_configuration = optional(object({\u003cbr/\u003e      name = string\u003cbr/\u003e      managed_ebs_volume = object({\u003cbr/\u003e        encrypted        = optional(bool)\u003cbr/\u003e        file_system_type = optional(string)\u003cbr/\u003e        iops             = optional(number)\u003cbr/\u003e        kms_key_id       = optional(string)\u003cbr/\u003e        size_in_gb       = optional(number)\u003cbr/\u003e        snapshot_id      = optional(string)\u003cbr/\u003e        tag_specifications = optional(list(object({\u003cbr/\u003e          propagate_tags = optional(string)\u003cbr/\u003e          resource_type  = string\u003cbr/\u003e          tags           = optional(map(string))\u003cbr/\u003e        })))\u003cbr/\u003e        throughput  = optional(number)\u003cbr/\u003e        volume_type = optional(string)\u003cbr/\u003e      })\u003cbr/\u003e    }))\u003cbr/\u003e    vpc_lattice_configurations = optional(object({\u003cbr/\u003e      role_arn         = string\u003cbr/\u003e      target_group_arn = string\u003cbr/\u003e      port_name        = string\u003cbr/\u003e    }))\u003cbr/\u003e    wait_for_steady_state = optional(bool)\u003cbr/\u003e    service_tags          = optional(map(string))\u003cbr/\u003e    # Service - IAM Role\u003cbr/\u003e    create_iam_role               = optional(bool)\u003cbr/\u003e    iam_role_arn                  = optional(string)\u003cbr/\u003e    iam_role_name                 = optional(string)\u003cbr/\u003e    iam_role_use_name_prefix      = optional(bool)\u003cbr/\u003e    iam_role_path                 = optional(string)\u003cbr/\u003e    iam_role_description          = optional(string)\u003cbr/\u003e    iam_role_permissions_boundary = optional(string)\u003cbr/\u003e    iam_role_tags                 = optional(map(string))\u003cbr/\u003e    iam_role_statements = optional(list(object({\u003cbr/\u003e      sid           = optional(string)\u003cbr/\u003e      actions       = optional(list(string))\u003cbr/\u003e      not_actions   = optional(list(string))\u003cbr/\u003e      effect        = optional(string)\u003cbr/\u003e      resources     = optional(list(string))\u003cbr/\u003e      not_resources = optional(list(string))\u003cbr/\u003e      principals = optional(list(object({\u003cbr/\u003e        type        = string\u003cbr/\u003e        identifiers = list(string)\u003cbr/\u003e      })))\u003cbr/\u003e      not_principals = optional(list(object({\u003cbr/\u003e        type        = string\u003cbr/\u003e        identifiers = list(string)\u003cbr/\u003e      })))\u003cbr/\u003e      condition = optional(list(object({\u003cbr/\u003e        test     = string\u003cbr/\u003e        values   = list(string)\u003cbr/\u003e        variable = string\u003cbr/\u003e      })))\u003cbr/\u003e    })))\u003cbr/\u003e    # Task Definition\u003cbr/\u003e    create_task_definition = optional(bool)\u003cbr/\u003e    task_definition_arn    = optional(string)\u003cbr/\u003e    container_definitions = optional(map(object({\u003cbr/\u003e      operating_system_family = optional(string)\u003cbr/\u003e      tags                    = optional(map(string))\u003cbr/\u003e\u003cbr/\u003e      # Container definition\u003cbr/\u003e      command         = optional(list(string))\u003cbr/\u003e      cpu             = optional(number)\u003cbr/\u003e      credentialSpecs = optional(list(string))\u003cbr/\u003e      dependsOn = optional(list(object({\u003cbr/\u003e        condition     = string\u003cbr/\u003e        containerName = string\u003cbr/\u003e      })))\u003cbr/\u003e      disableNetworking      = optional(bool)\u003cbr/\u003e      dnsSearchDomains       = optional(list(string))\u003cbr/\u003e      dnsServers             = optional(list(string))\u003cbr/\u003e      dockerLabels           = optional(map(string))\u003cbr/\u003e      dockerSecurityOptions  = optional(list(string))\u003cbr/\u003e      enable_execute_command = optional(bool)\u003cbr/\u003e      entrypoint             = optional(list(string))\u003cbr/\u003e      environment = optional(list(object({\u003cbr/\u003e        name  = string\u003cbr/\u003e        value = string\u003cbr/\u003e      })))\u003cbr/\u003e      environmentFiles = optional(list(object({\u003cbr/\u003e        type  = string\u003cbr/\u003e        value = string\u003cbr/\u003e      })))\u003cbr/\u003e      essential = optional(bool)\u003cbr/\u003e      extraHosts = optional(list(object({\u003cbr/\u003e        hostname  = string\u003cbr/\u003e        ipAddress = string\u003cbr/\u003e      })))\u003cbr/\u003e      firelensConfiguration = optional(object({\u003cbr/\u003e        options = optional(map(string))\u003cbr/\u003e        type    = optional(string)\u003cbr/\u003e      }))\u003cbr/\u003e      healthCheck = optional(object({\u003cbr/\u003e        command     = optional(list(string))\u003cbr/\u003e        interval    = optional(number)\u003cbr/\u003e        retries     = optional(number)\u003cbr/\u003e        startPeriod = optional(number)\u003cbr/\u003e        timeout     = optional(number)\u003cbr/\u003e      }))\u003cbr/\u003e      hostname    = optional(string)\u003cbr/\u003e      image       = optional(string)\u003cbr/\u003e      interactive = optional(bool)\u003cbr/\u003e      links       = optional(list(string))\u003cbr/\u003e      linuxParameters = optional(object({\u003cbr/\u003e        capabilities = optional(object({\u003cbr/\u003e          add  = optional(list(string))\u003cbr/\u003e          drop = optional(list(string))\u003cbr/\u003e        }))\u003cbr/\u003e        devices = optional(list(object({\u003cbr/\u003e          containerPath = optional(string)\u003cbr/\u003e          hostPath      = optional(string)\u003cbr/\u003e          permissions   = optional(list(string))\u003cbr/\u003e        })))\u003cbr/\u003e        initProcessEnabled = optional(bool)\u003cbr/\u003e        maxSwap            = optional(number)\u003cbr/\u003e        sharedMemorySize   = optional(number)\u003cbr/\u003e        swappiness         = optional(number)\u003cbr/\u003e        tmpfs = optional(list(object({\u003cbr/\u003e          containerPath = string\u003cbr/\u003e          mountOptions  = optional(list(string))\u003cbr/\u003e          size          = number\u003cbr/\u003e        })))\u003cbr/\u003e      }))\u003cbr/\u003e      logConfiguration = optional(object({\u003cbr/\u003e        logDriver = optional(string)\u003cbr/\u003e        options   = optional(map(string))\u003cbr/\u003e        secretOptions = optional(list(object({\u003cbr/\u003e          name      = string\u003cbr/\u003e          valueFrom = string\u003cbr/\u003e        })))\u003cbr/\u003e      }))\u003cbr/\u003e      memory            = optional(number)\u003cbr/\u003e      memoryReservation = optional(number)\u003cbr/\u003e      mountPoints = optional(list(object({\u003cbr/\u003e        containerPath = optional(string)\u003cbr/\u003e        readOnly      = optional(bool)\u003cbr/\u003e        sourceVolume  = optional(string)\u003cbr/\u003e      })), [])\u003cbr/\u003e      name = optional(string)\u003cbr/\u003e      portMappings = optional(list(object({\u003cbr/\u003e        appProtocol        = optional(string)\u003cbr/\u003e        containerPort      = optional(number)\u003cbr/\u003e        containerPortRange = optional(string)\u003cbr/\u003e        hostPort           = optional(number)\u003cbr/\u003e        name               = optional(string)\u003cbr/\u003e        protocol           = optional(string)\u003cbr/\u003e      })), [])\u003cbr/\u003e      privileged             = optional(bool)\u003cbr/\u003e      pseudoTerminal         = optional(bool)\u003cbr/\u003e      readonlyRootFilesystem = optional(bool)\u003cbr/\u003e      repositoryCredentials = optional(object({\u003cbr/\u003e        credentialsParameter = optional(string)\u003cbr/\u003e      }))\u003cbr/\u003e      resourceRequirements = optional(list(object({\u003cbr/\u003e        type  = string\u003cbr/\u003e        value = string\u003cbr/\u003e      })))\u003cbr/\u003e      restartPolicy = optional(object({\u003cbr/\u003e        enabled              = optional(bool)\u003cbr/\u003e        ignoredExitCodes     = optional(list(number))\u003cbr/\u003e        restartAttemptPeriod = optional(number)\u003cbr/\u003e      }))\u003cbr/\u003e      secrets = optional(list(object({\u003cbr/\u003e        name      = string\u003cbr/\u003e        valueFrom = string\u003cbr/\u003e      })))\u003cbr/\u003e      startTimeout = optional(number)\u003cbr/\u003e      stopTimeout  = optional(number)\u003cbr/\u003e      systemControls = optional(list(object({\u003cbr/\u003e        namespace = optional(string)\u003cbr/\u003e        value     = optional(string)\u003cbr/\u003e      })))\u003cbr/\u003e      ulimits = optional(list(object({\u003cbr/\u003e        hardLimit = number\u003cbr/\u003e        name      = string\u003cbr/\u003e        softLimit = number\u003cbr/\u003e      })))\u003cbr/\u003e      user               = optional(string)\u003cbr/\u003e      versionConsistency = optional(string)\u003cbr/\u003e      volumesFrom = optional(list(object({\u003cbr/\u003e        readOnly        = optional(bool)\u003cbr/\u003e        sourceContainer = optional(string)\u003cbr/\u003e      })))\u003cbr/\u003e      workingDirectory = optional(string)\u003cbr/\u003e\u003cbr/\u003e      # Cloudwatch Log Group\u003cbr/\u003e      service                                = optional(string, \"\")\u003cbr/\u003e      enable_cloudwatch_logging              = optional(bool)\u003cbr/\u003e      create_cloudwatch_log_group            = optional(bool)\u003cbr/\u003e      cloudwatch_log_group_name              = optional(string)\u003cbr/\u003e      cloudwatch_log_group_use_name_prefix   = optional(bool)\u003cbr/\u003e      cloudwatch_log_group_class             = optional(string)\u003cbr/\u003e      cloudwatch_log_group_retention_in_days = optional(number)\u003cbr/\u003e      cloudwatch_log_group_kms_key_id        = optional(string)\u003cbr/\u003e    })))\u003cbr/\u003e    cpu                    = optional(number, 1024)\u003cbr/\u003e    enable_fault_injection = optional(bool)\u003cbr/\u003e    ephemeral_storage = optional(object({\u003cbr/\u003e      size_in_gib = number\u003cbr/\u003e    }))\u003cbr/\u003e    family       = optional(string)\u003cbr/\u003e    ipc_mode     = optional(string)\u003cbr/\u003e    memory       = optional(number, 2048)\u003cbr/\u003e    network_mode = optional(string)\u003cbr/\u003e    pid_mode     = optional(string)\u003cbr/\u003e    proxy_configuration = optional(object({\u003cbr/\u003e      container_name = string\u003cbr/\u003e      properties     = optional(map(string))\u003cbr/\u003e      type           = optional(string)\u003cbr/\u003e    }))\u003cbr/\u003e    requires_compatibilities = optional(list(string))\u003cbr/\u003e    runtime_platform = optional(object({\u003cbr/\u003e      cpu_architecture        = optional(string)\u003cbr/\u003e      operating_system_family = optional(string)\u003cbr/\u003e    }))\u003cbr/\u003e    skip_destroy = optional(bool)\u003cbr/\u003e    task_definition_placement_constraints = optional(map(object({\u003cbr/\u003e      expression = optional(string)\u003cbr/\u003e      type       = string\u003cbr/\u003e    })))\u003cbr/\u003e    track_latest = optional(bool)\u003cbr/\u003e    volume = optional(map(object({\u003cbr/\u003e      configure_at_launch = optional(bool)\u003cbr/\u003e      docker_volume_configuration = optional(object({\u003cbr/\u003e        autoprovision = optional(bool)\u003cbr/\u003e        driver        = optional(string)\u003cbr/\u003e        driver_opts   = optional(map(string))\u003cbr/\u003e        labels        = optional(map(string))\u003cbr/\u003e        scope         = optional(string)\u003cbr/\u003e      }))\u003cbr/\u003e      efs_volume_configuration = optional(object({\u003cbr/\u003e        authorization_config = optional(object({\u003cbr/\u003e          access_point_id = optional(string)\u003cbr/\u003e          iam             = optional(string)\u003cbr/\u003e        }))\u003cbr/\u003e        file_system_id          = string\u003cbr/\u003e        root_directory          = optional(string)\u003cbr/\u003e        transit_encryption      = optional(string)\u003cbr/\u003e        transit_encryption_port = optional(number)\u003cbr/\u003e      }))\u003cbr/\u003e      fsx_windows_file_server_volume_configuration = optional(object({\u003cbr/\u003e        authorization_config = optional(object({\u003cbr/\u003e          credentials_parameter = string\u003cbr/\u003e          domain                = string\u003cbr/\u003e        }))\u003cbr/\u003e        file_system_id = string\u003cbr/\u003e        root_directory = string\u003cbr/\u003e      }))\u003cbr/\u003e      host_path = optional(string)\u003cbr/\u003e      name      = optional(string)\u003cbr/\u003e    })))\u003cbr/\u003e    task_tags = optional(map(string))\u003cbr/\u003e    # Task Execution - IAM Role\u003cbr/\u003e    create_task_exec_iam_role               = optional(bool)\u003cbr/\u003e    task_exec_iam_role_arn                  = optional(string)\u003cbr/\u003e    task_exec_iam_role_name                 = optional(string)\u003cbr/\u003e    task_exec_iam_role_use_name_prefix      = optional(bool)\u003cbr/\u003e    task_exec_iam_role_path                 = optional(string)\u003cbr/\u003e    task_exec_iam_role_description          = optional(string)\u003cbr/\u003e    task_exec_iam_role_permissions_boundary = optional(string)\u003cbr/\u003e    task_exec_iam_role_tags                 = optional(map(string))\u003cbr/\u003e    task_exec_iam_role_policies             = optional(map(string))\u003cbr/\u003e    task_exec_iam_role_max_session_duration = optional(number)\u003cbr/\u003e    create_task_exec_policy                 = optional(bool)\u003cbr/\u003e    task_exec_ssm_param_arns                = optional(list(string))\u003cbr/\u003e    task_exec_secret_arns                   = optional(list(string))\u003cbr/\u003e    task_exec_iam_statements = optional(list(object({\u003cbr/\u003e      sid           = optional(string)\u003cbr/\u003e      actions       = optional(list(string))\u003cbr/\u003e      not_actions   = optional(list(string))\u003cbr/\u003e      effect        = optional(string)\u003cbr/\u003e      resources     = optional(list(string))\u003cbr/\u003e      not_resources = optional(list(string))\u003cbr/\u003e      principals = optional(list(object({\u003cbr/\u003e        type        = string\u003cbr/\u003e        identifiers = list(string)\u003cbr/\u003e      })))\u003cbr/\u003e      not_principals = optional(list(object({\u003cbr/\u003e        type        = string\u003cbr/\u003e        identifiers = list(string)\u003cbr/\u003e      })))\u003cbr/\u003e      condition = optional(list(object({\u003cbr/\u003e        test     = string\u003cbr/\u003e        values   = list(string)\u003cbr/\u003e        variable = string\u003cbr/\u003e      })))\u003cbr/\u003e    })))\u003cbr/\u003e    task_exec_iam_policy_path = optional(string)\u003cbr/\u003e    # Tasks - IAM Role\u003cbr/\u003e    create_tasks_iam_role               = optional(bool)\u003cbr/\u003e    tasks_iam_role_arn                  = optional(string)\u003cbr/\u003e    tasks_iam_role_name                 = optional(string)\u003cbr/\u003e    tasks_iam_role_use_name_prefix      = optional(bool)\u003cbr/\u003e    tasks_iam_role_path                 = optional(string)\u003cbr/\u003e    tasks_iam_role_description          = optional(string)\u003cbr/\u003e    tasks_iam_role_permissions_boundary = optional(string)\u003cbr/\u003e    tasks_iam_role_tags                 = optional(map(string))\u003cbr/\u003e    tasks_iam_role_policies             = optional(map(string))\u003cbr/\u003e    tasks_iam_role_max_session_duration = optional(number)\u003cbr/\u003e    tasks_iam_role_statements = optional(list(object({\u003cbr/\u003e      sid           = optional(string)\u003cbr/\u003e      actions       = optional(list(string))\u003cbr/\u003e      not_actions   = optional(list(string))\u003cbr/\u003e      effect        = optional(string)\u003cbr/\u003e      resources     = optional(list(string))\u003cbr/\u003e      not_resources = optional(list(string))\u003cbr/\u003e      principals = optional(list(object({\u003cbr/\u003e        type        = string\u003cbr/\u003e        identifiers = list(string)\u003cbr/\u003e      })))\u003cbr/\u003e      not_principals = optional(list(object({\u003cbr/\u003e        type        = string\u003cbr/\u003e        identifiers = list(string)\u003cbr/\u003e      })))\u003cbr/\u003e      condition = optional(list(object({\u003cbr/\u003e        test     = string\u003cbr/\u003e        values   = list(string)\u003cbr/\u003e        variable = string\u003cbr/\u003e      })))\u003cbr/\u003e    })))\u003cbr/\u003e    # Task Set\u003cbr/\u003e    external_id = optional(string)\u003cbr/\u003e    scale = optional(object({\u003cbr/\u003e      unit  = optional(string)\u003cbr/\u003e      value = optional(number)\u003cbr/\u003e    }))\u003cbr/\u003e    wait_until_stable         = optional(bool)\u003cbr/\u003e    wait_until_stable_timeout = optional(string)\u003cbr/\u003e    # Autoscaling\u003cbr/\u003e    enable_autoscaling       = optional(bool)\u003cbr/\u003e    autoscaling_min_capacity = optional(number)\u003cbr/\u003e    autoscaling_max_capacity = optional(number)\u003cbr/\u003e    autoscaling_policies = optional(map(object({\u003cbr/\u003e      name        = optional(string) # Will fall back to the key name if not provided\u003cbr/\u003e      policy_type = optional(string)\u003cbr/\u003e      predictive_scaling_policy_configuration = optional(object({\u003cbr/\u003e        max_capacity_breach_behavior = optional(string)\u003cbr/\u003e        max_capacity_buffer          = optional(number)\u003cbr/\u003e        metric_specification = list(object({\u003cbr/\u003e          customized_capacity_metric_specification = optional(object({\u003cbr/\u003e            metric_data_query = list(object({\u003cbr/\u003e              expression = optional(string)\u003cbr/\u003e              id         = string\u003cbr/\u003e              label      = optional(string)\u003cbr/\u003e              metric_stat = optional(object({\u003cbr/\u003e                metric = object({\u003cbr/\u003e                  dimension = optional(list(object({\u003cbr/\u003e                    name  = string\u003cbr/\u003e                    value = string\u003cbr/\u003e                  })))\u003cbr/\u003e                  metric_name = optional(string)\u003cbr/\u003e                  namespace   = optional(string)\u003cbr/\u003e                })\u003cbr/\u003e                stat = string\u003cbr/\u003e                unit = optional(string)\u003cbr/\u003e              }))\u003cbr/\u003e              return_data = optional(bool)\u003cbr/\u003e            }))\u003cbr/\u003e          }))\u003cbr/\u003e          customized_load_metric_specification = optional(object({\u003cbr/\u003e            metric_data_query = list(object({\u003cbr/\u003e              expression = optional(string)\u003cbr/\u003e              id         = string\u003cbr/\u003e              label      = optional(string)\u003cbr/\u003e              metric_stat = optional(object({\u003cbr/\u003e                metric = object({\u003cbr/\u003e                  dimension = optional(list(object({\u003cbr/\u003e                    name  = string\u003cbr/\u003e                    value = string\u003cbr/\u003e                  })))\u003cbr/\u003e                  metric_name = optional(string)\u003cbr/\u003e                  namespace   = optional(string)\u003cbr/\u003e                })\u003cbr/\u003e                stat = string\u003cbr/\u003e                unit = optional(string)\u003cbr/\u003e              }))\u003cbr/\u003e              return_data = optional(bool)\u003cbr/\u003e            }))\u003cbr/\u003e          }))\u003cbr/\u003e          customized_scaling_metric_specification = optional(object({\u003cbr/\u003e            metric_data_query = list(object({\u003cbr/\u003e              expression = optional(string)\u003cbr/\u003e              id         = string\u003cbr/\u003e              label      = optional(string)\u003cbr/\u003e              metric_stat = optional(object({\u003cbr/\u003e                metric = object({\u003cbr/\u003e                  dimension = optional(list(object({\u003cbr/\u003e                    name  = string\u003cbr/\u003e                    value = string\u003cbr/\u003e                  })))\u003cbr/\u003e                  metric_name = optional(string)\u003cbr/\u003e                  namespace   = optional(string)\u003cbr/\u003e                })\u003cbr/\u003e                stat = string\u003cbr/\u003e                unit = optional(string)\u003cbr/\u003e              }))\u003cbr/\u003e              return_data = optional(bool)\u003cbr/\u003e            }))\u003cbr/\u003e          }))\u003cbr/\u003e          predefined_load_metric_specification = optional(object({\u003cbr/\u003e            predefined_metric_type = string\u003cbr/\u003e            resource_label         = optional(string)\u003cbr/\u003e          }))\u003cbr/\u003e          predefined_metric_pair_specification = optional(object({\u003cbr/\u003e            predefined_metric_type = string\u003cbr/\u003e            resource_label         = optional(string)\u003cbr/\u003e          }))\u003cbr/\u003e          predefined_scaling_metric_specification = optional(object({\u003cbr/\u003e            predefined_metric_type = string\u003cbr/\u003e            resource_label         = optional(string)\u003cbr/\u003e          }))\u003cbr/\u003e          target_value = number\u003cbr/\u003e        }))\u003cbr/\u003e        mode                   = optional(string)\u003cbr/\u003e        scheduling_buffer_time = optional(number)\u003cbr/\u003e      }))\u003cbr/\u003e      step_scaling_policy_configuration = optional(object({\u003cbr/\u003e        adjustment_type          = optional(string)\u003cbr/\u003e        cooldown                 = optional(number)\u003cbr/\u003e        metric_aggregation_type  = optional(string)\u003cbr/\u003e        min_adjustment_magnitude = optional(number)\u003cbr/\u003e        step_adjustment = optional(list(object({\u003cbr/\u003e          metric_interval_lower_bound = optional(string)\u003cbr/\u003e          metric_interval_upper_bound = optional(string)\u003cbr/\u003e          scaling_adjustment          = number\u003cbr/\u003e        })))\u003cbr/\u003e      }))\u003cbr/\u003e      target_tracking_scaling_policy_configuration = optional(object({\u003cbr/\u003e        customized_metric_specification = optional(object({\u003cbr/\u003e          dimensions = optional(list(object({\u003cbr/\u003e            name  = string\u003cbr/\u003e            value = string\u003cbr/\u003e          })))\u003cbr/\u003e          metric_name = optional(string)\u003cbr/\u003e          metrics = optional(list(object({\u003cbr/\u003e            expression = optional(string)\u003cbr/\u003e            id         = string\u003cbr/\u003e            label      = optional(string)\u003cbr/\u003e            metric_stat = optional(object({\u003cbr/\u003e              metric = object({\u003cbr/\u003e                dimensions = optional(list(object({\u003cbr/\u003e                  name  = string\u003cbr/\u003e                  value = string\u003cbr/\u003e                })))\u003cbr/\u003e                metric_name = string\u003cbr/\u003e                namespace   = string\u003cbr/\u003e              })\u003cbr/\u003e              stat = string\u003cbr/\u003e              unit = optional(string)\u003cbr/\u003e            }))\u003cbr/\u003e            return_data = optional(bool)\u003cbr/\u003e          })))\u003cbr/\u003e          namespace = optional(string)\u003cbr/\u003e          statistic = optional(string)\u003cbr/\u003e          unit      = optional(string)\u003cbr/\u003e        }))\u003cbr/\u003e\u003cbr/\u003e        disable_scale_in = optional(bool)\u003cbr/\u003e        predefined_metric_specification = optional(object({\u003cbr/\u003e          predefined_metric_type = string\u003cbr/\u003e          resource_label         = optional(string)\u003cbr/\u003e        }))\u003cbr/\u003e        scale_in_cooldown  = optional(number)\u003cbr/\u003e        scale_out_cooldown = optional(number)\u003cbr/\u003e        target_value       = optional(number)\u003cbr/\u003e      }))\u003cbr/\u003e    })))\u003cbr/\u003e    autoscaling_scheduled_actions = optional(map(object({\u003cbr/\u003e      name         = optional(string)\u003cbr/\u003e      min_capacity = number\u003cbr/\u003e      max_capacity = number\u003cbr/\u003e      schedule     = string\u003cbr/\u003e      start_time   = optional(string)\u003cbr/\u003e      end_time     = optional(string)\u003cbr/\u003e      timezone     = optional(string)\u003cbr/\u003e    })))\u003cbr/\u003e    autoscaling_suspended_state = optional(object({\u003cbr/\u003e      dynamic_scaling_in_suspended  = optional(bool)\u003cbr/\u003e      dynamic_scaling_out_suspended = optional(bool)\u003cbr/\u003e      scheduled_scaling_suspended   = optional(bool)\u003cbr/\u003e    }))\u003cbr/\u003e    # Security Group\u003cbr/\u003e    create_security_group          = optional(bool)\u003cbr/\u003e    vpc_id                         = optional(string)\u003cbr/\u003e    security_group_name            = optional(string)\u003cbr/\u003e    security_group_use_name_prefix = optional(bool)\u003cbr/\u003e    security_group_description     = optional(string)\u003cbr/\u003e    security_group_ingress_rules = optional(map(object({\u003cbr/\u003e      cidr_ipv4                    = optional(string)\u003cbr/\u003e      cidr_ipv6                    = optional(string)\u003cbr/\u003e      description                  = optional(string)\u003cbr/\u003e      from_port                    = optional(string)\u003cbr/\u003e      ip_protocol                  = optional(string)\u003cbr/\u003e      prefix_list_id               = optional(string)\u003cbr/\u003e      referenced_security_group_id = optional(string)\u003cbr/\u003e      tags                         = optional(map(string))\u003cbr/\u003e      to_port                      = optional(string)\u003cbr/\u003e    })))\u003cbr/\u003e    security_group_egress_rules = optional(map(object({\u003cbr/\u003e      cidr_ipv4                    = optional(string)\u003cbr/\u003e      cidr_ipv6                    = optional(string)\u003cbr/\u003e      description                  = optional(string)\u003cbr/\u003e      from_port                    = optional(string)\u003cbr/\u003e      ip_protocol                  = optional(string)\u003cbr/\u003e      prefix_list_id               = optional(string)\u003cbr/\u003e      referenced_security_group_id = optional(string)\u003cbr/\u003e      tags                         = optional(map(string))\u003cbr/\u003e      to_port                      = optional(string)\u003cbr/\u003e    })))\u003cbr/\u003e    security_group_tags = optional(map(string))\u003cbr/\u003e    # ECS Infrastructure IAM Role\u003cbr/\u003e    create_infrastructure_iam_role               = optional(bool)\u003cbr/\u003e    infrastructure_iam_role_arn                  = optional(string)\u003cbr/\u003e    infrastructure_iam_role_name                 = optional(string)\u003cbr/\u003e    infrastructure_iam_role_use_name_prefix      = optional(bool)\u003cbr/\u003e    infrastructure_iam_role_path                 = optional(string)\u003cbr/\u003e    infrastructure_iam_role_description          = optional(string)\u003cbr/\u003e    infrastructure_iam_role_permissions_boundary = optional(string)\u003cbr/\u003e    infrastructure_iam_role_tags                 = optional(map(string))\u003cbr/\u003e  }))\u003c/pre\u003e | `null` | no |\n| \u003ca name=\"input_tags\"\u003e\u003c/a\u003e [tags](#input\\_tags) | A map of tags to add to all resources | `map(string)` | `{}` | no |\n| \u003ca name=\"input_task_exec_iam_role_description\"\u003e\u003c/a\u003e [task\\_exec\\_iam\\_role\\_description](#input\\_task\\_exec\\_iam\\_role\\_description) | Description of the role | `string` | `null` | no |\n| \u003ca name=\"input_task_exec_iam_role_name\"\u003e\u003c/a\u003e [task\\_exec\\_iam\\_role\\_name](#input\\_task\\_exec\\_iam\\_role\\_name) | Name to use on IAM role created | `string` | `null` | no |\n| \u003ca name=\"input_task_exec_iam_role_path\"\u003e\u003c/a\u003e [task\\_exec\\_iam\\_role\\_path](#input\\_task\\_exec\\_iam\\_role\\_path) | IAM role path | `string` | `null` | no |\n| \u003ca name=\"input_task_exec_iam_role_permissions_boundary\"\u003e\u003c/a\u003e [task\\_exec\\_iam\\_role\\_permissions\\_boundary](#input\\_task\\_exec\\_iam\\_role\\_permissions\\_boundary) | ARN of the policy that is used to set the permissions boundary for the IAM role | `string` | `null` | no |\n| \u003ca name=\"input_task_exec_iam_role_policies\"\u003e\u003c/a\u003e [task\\_exec\\_iam\\_role\\_policies](#input\\_task\\_exec\\_iam\\_role\\_policies) | Map of IAM role policy ARNs to attach to the IAM role | `map(string)` | `{}` | no |\n| \u003ca name=\"input_task_exec_iam_role_tags\"\u003e\u003c/a\u003e [task\\_exec\\_iam\\_role\\_tags](#input\\_task\\_exec\\_iam\\_role\\_tags) | A map of additional tags to add to the IAM role created | `map(string)` | `{}` | no |\n| \u003ca name=\"input_task_exec_iam_role_use_name_prefix\"\u003e\u003c/a\u003e [task\\_exec\\_iam\\_role\\_use\\_name\\_prefix](#input\\_task\\_exec\\_iam\\_role\\_use\\_name\\_prefix) | Determines whether the IAM role name (`task_exec_iam_role_name`) is used as a prefix | `bool` | `true` | no |\n| \u003ca name=\"input_task_exec_iam_statements\"\u003e\u003c/a\u003e [task\\_exec\\_iam\\_statements](#input\\_task\\_exec\\_iam\\_statements) | A map of IAM policy [statements](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/iam_policy_document#statement) for custom permission usage | \u003cpre\u003emap(object({\u003cbr/\u003e    sid           = optional(string)\u003cbr/\u003e    actions       = optional(list(string))\u003cbr/\u003e    not_actions   = optional(list(string))\u003cbr/\u003e    effect        = optional(string, \"Allow\")\u003cbr/\u003e    resources     = optional(list(string))\u003cbr/\u003e    not_resources = optional(list(string))\u003cbr/\u003e    principals = optional(list(object({\u003cbr/\u003e      type        = string\u003cbr/\u003e      identifiers = list(string)\u003cbr/\u003e    })))\u003cbr/\u003e    not_principals = optional(list(object({\u003cbr/\u003e      type        = string\u003cbr/\u003e      identifiers = list(string)\u003cbr/\u003e    })))\u003cbr/\u003e    condition = optional(list(object({\u003cbr/\u003e      test     = string\u003cbr/\u003e      variable = string\u003cbr/\u003e      values   = list(string)\u003cbr/\u003e    })))\u003cbr/\u003e  }))\u003c/pre\u003e | `null` | no |\n| \u003ca name=\"input_task_exec_secret_arns\"\u003e\u003c/a\u003e [task\\_exec\\_secret\\_arns](#input\\_task\\_exec\\_secret\\_arns) | List of SecretsManager secret ARNs the task execution role will be permitted to get/read | `list(string)` | `[]` | no |\n| \u003ca name=\"input_task_exec_ssm_param_arns\"\u003e\u003c/a\u003e [task\\_exec\\_ssm\\_param\\_arns](#input\\_task\\_exec\\_ssm\\_param\\_arns) | List of SSM parameter ARNs the task execution role will be permitted to get/read | `list(string)` | `[]` | no |\n| \u003ca name=\"input_vpc_id\"\u003e\u003c/a\u003e [vpc\\_id](#input\\_vpc\\_id) | The ID of the VPC where the security group will be created | `string` | `null` | no |\n\n## Outputs\n\n| Name | Description |\n|------|-------------|\n| \u003ca name=\"output_capacity_providers\"\u003e\u003c/a\u003e [capacity\\_providers](#output\\_capacity\\_providers) | Map of autoscaling capacity providers created and their attributes |\n| \u003ca name=\"output_cloudwatch_log_group_arn\"\u003e\u003c/a\u003e [cloudwatch\\_log\\_group\\_arn](#output\\_cloudwatch\\_log\\_group\\_arn) | ARN of CloudWatch log group created |\n| \u003ca name=\"output_cloudwatch_log_group_name\"\u003e\u003c/a\u003e [cloudwatch\\_log\\_group\\_name](#output\\_cloudwatch\\_log\\_group\\_name) | Name of CloudWatch log group created |\n| \u003ca name=\"output_cluster_arn\"\u003e\u003c/a\u003e [cluster\\_arn](#output\\_cluster\\_arn) | ARN that identifies the cluster |\n| \u003ca name=\"output_cluster_capacity_providers\"\u003e\u003c/a\u003e [cluster\\_capacity\\_providers](#output\\_cluster\\_capacity\\_providers) | Map of cluster capacity providers attributes |\n| \u003ca name=\"output_cluster_id\"\u003e\u003c/a\u003e [cluster\\_id](#output\\_cluster\\_id) | ID that identifies the cluster |\n| \u003ca name=\"output_cluster_name\"\u003e\u003c/a\u003e [cluster\\_name](#output\\_cluster\\_name) | Name that identifies the cluster |\n| \u003ca name=\"output_infrastructure_iam_role_arn\"\u003e\u003c/a\u003e [infrastructure\\_iam\\_role\\_arn](#output\\_infrastructure\\_iam\\_role\\_arn) | The Amazon Resource Name (ARN) specifying the IAM role |\n| \u003ca name=\"output_infrastructure_iam_role_name\"\u003e\u003c/a\u003e [infrastructure\\_iam\\_role\\_name](#output\\_infrastructure\\_iam\\_role\\_name) | IAM role name |\n| \u003ca name=\"output_infrastructure_iam_role_unique_id\"\u003e\u003c/a\u003e [infrastructure\\_iam\\_role\\_unique\\_id](#output\\_infrastructure\\_iam\\_role\\_unique\\_id) | Stable and unique string identifying the IAM role |\n| \u003ca name=\"output_node_iam_instance_profile_arn\"\u003e\u003c/a\u003e [node\\_iam\\_instance\\_profile\\_arn](#output\\_node\\_iam\\_instance\\_profile\\_arn) | ARN assigned by AWS to the instance profile |\n| \u003ca name=\"output_node_iam_instance_profile_id\"\u003e\u003c/a\u003e [node\\_iam\\_instance\\_profile\\_id](#output\\_node\\_iam\\_instance\\_profile\\_id) | Instance profile's ID |\n| \u003ca name=\"output_node_iam_instance_profile_unique\"\u003e\u003c/a\u003e [node\\_iam\\_instance\\_profile\\_unique](#output\\_node\\_iam\\_instance\\_profile\\_unique) | Stable and unique string identifying the IAM instance profile |\n| \u003ca name=\"output_node_iam_role_arn\"\u003e\u003c/a\u003e [node\\_iam\\_role\\_arn](#output\\_node\\_iam\\_role\\_arn) | The Amazon Resource Name (ARN) specifying the IAM role |\n| \u003ca name=\"output_node_iam_role_name\"\u003e\u003c/a\u003e [node\\_iam\\_role\\_name](#output\\_node\\_iam\\_role\\_name) | IAM role name |\n| \u003ca name=\"output_node_iam_role_unique_id\"\u003e\u003c/a\u003e [node\\_iam\\_role\\_unique\\_id](#output\\_node\\_iam\\_role\\_unique\\_id) | Stable and unique string identifying the IAM role |\n| \u003ca name=\"output_services\"\u003e\u003c/a\u003e [services](#output\\_services) | Map of services created and their attributes |\n| \u003ca name=\"output_task_exec_iam_role_arn\"\u003e\u003c/a\u003e [task\\_exec\\_iam\\_role\\_arn](#output\\_task\\_exec\\_iam\\_role\\_arn) | Task execution IAM role ARN |\n| \u003ca name=\"output_task_exec_iam_role_name\"\u003e\u003c/a\u003e [task\\_exec\\_iam\\_role\\_name](#output\\_task\\_exec\\_iam\\_role\\_name) | Task execution IAM role name |\n| \u003ca name=\"output_task_exec_iam_role_unique_id\"\u003e\u003c/a\u003e [task\\_exec\\_iam\\_role\\_unique\\_id](#output\\_task\\_exec\\_iam\\_role\\_unique\\_id) | Stable and unique string identifying the task execution IAM role |\n\u003c!-- END_TF_DOCS --\u003e\n\n## Authors\n\nModule is maintained by [Anton Babenko](https://github.com/antonbabenko) with help from [these awesome contributors](https://github.com/terraform-aws-modules/terraform-aws-ecs/graphs/contributors).\n\n## License\n\nApache-2.0 Licensed. See [LICENSE](https://github.com/terraform-aws-modules/terraform-aws-ecs/blob/master/LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fterraform-aws-modules%2Fterraform-aws-ecs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fterraform-aws-modules%2Fterraform-aws-ecs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fterraform-aws-modules%2Fterraform-aws-ecs/lists"}