{"id":24087276,"url":"https://github.com/hazelops/terraform-aws-ecs-app","last_synced_at":"2025-10-07T06:42:11.957Z","repository":{"id":39621993,"uuid":"442860225","full_name":"hazelops/terraform-aws-ecs-app","owner":"hazelops","description":"Terraform module to create and manage AWS ECS application.","archived":false,"fork":false,"pushed_at":"2025-01-24T13:37:15.000Z","size":363,"stargazers_count":3,"open_issues_count":1,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-05T07:44:28.837Z","etag":null,"topics":["ecs","ecs-fargate","ecs-service","ecs-task","terraform"],"latest_commit_sha":null,"homepage":"https://registry.terraform.io/modules/hazelops/ecs-app/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/hazelops.png","metadata":{"files":{"readme":"README.md","changelog":null,"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}},"created_at":"2021-12-29T18:37:28.000Z","updated_at":"2025-01-24T13:37:19.000Z","dependencies_parsed_at":"2024-05-19T07:24:12.737Z","dependency_job_id":"4de96fdc-ce1f-4846-880d-ddbf8647a69d","html_url":"https://github.com/hazelops/terraform-aws-ecs-app","commit_stats":null,"previous_names":[],"tags_count":52,"template":false,"template_full_name":null,"purl":"pkg:github/hazelops/terraform-aws-ecs-app","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hazelops%2Fterraform-aws-ecs-app","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hazelops%2Fterraform-aws-ecs-app/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hazelops%2Fterraform-aws-ecs-app/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hazelops%2Fterraform-aws-ecs-app/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hazelops","download_url":"https://codeload.github.com/hazelops/terraform-aws-ecs-app/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hazelops%2Fterraform-aws-ecs-app/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278734435,"owners_count":26036404,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-07T02:00:06.786Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["ecs","ecs-fargate","ecs-service","ecs-task","terraform"],"created_at":"2025-01-10T03:03:23.423Z","updated_at":"2025-10-07T06:42:11.937Z","avatar_url":"https://github.com/hazelops.png","language":"HCL","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Terraform AWS ECS App Module\n[![e2e tests](https://github.com/hazelops/terraform-aws-ecs-app/actions/workflows/run.e2e-tests.yml/badge.svg)](https://github.com/hazelops/terraform-aws-ecs-app/actions/workflows/run.e2e-tests.yml)\n\nCreate and manage AWS ECS application in a clean abstracted way.\n\nThis module is actively maintained and is covered by multiple end-to-end [tests](./test/examples_complete-web_test.go) to prevent regressions.\n\n## Features\n_This module is feature-rich, with sane [defaults](./variables.tf). Some of the features are:_\n- [Web application](./examples/complete-web/main.tf) (ALB + ACM + R53) \n- [Worker application to Fargate](./examples/complete-worker/main.tf) and [Worker application to EC2](./examples/complete-worker-ec2/main.tf) (no ALB)\n- [TCP application](./examples/complete-tcp-app/main.tf) (no ALB)\n- [Environment variables](#input_environment) (SSM parameters)\n- [ECR repo Management](#input_ecr_repo_create) \n- [Standardized naming convention for all resources](#input_name)\n- [Deployment via Terraform \u0026 via external tool](#input_ecs_service_deployed) (ecs-deploy or ize)\n- [Datadog integration](#input_datadog_enabled)\n- [Autoscale](#input_autoscale_enabled) ([scheduled](#input_autoscale_scheduled_up) or [target-based](#input_autoscale_target_value_cpu))\n- [ECS Launch Type (EC2 or Fargate)](#input_ecs_launch_type)\n- [EIP assignment](#input_ec2_eip_enabled)\n- Resource configuration ([CPU](#input_cpu)/[MEM](#input_mem))\n- EFS ([mount](#input_efs_mount_point) and/or [share management](#input_efs_share_create))\n- [GPU-based instance](#input_gpu)\n- [Multiple ECS network modes](#input_ecs_network_mode)\n- Root block device configuration ([size](#input_root_block_device_size), [type](#input_root_block_device_type))\n- [Automatic Nginx Proxy for Web Applications](#inputs_web_proxy_enabled)\n- [Firelens / Datadog log driver](#input_firelens_ecs_log_enabled)\n- [ECS Exec](#input_ecs_exec_enabled) (console into the container)\n- [tmpfs configuration](#input_tmpfs_enabled)\n\n## Usage\nThis is a minimal example which demostrates simplicity of the module:\n```hcl\nmodule \"api\" {\n  source     = \"registry.terraform.io/hazelops/ecs-app/aws\"\n  version    = \"~\u003e2.0.0\"\n  name             = \"api\"\n  \n  env              = \"prod\"\n  ecs_cluster_name = \"prod-cluster\"\n  vpc_id           = \"vpc-00000000000000000\"\n  public_subnets   = [\"subnet-00000000000000000\", \"subnet-11111111111111111\", \"subnet-22222222222222222\"]\n  private_subnets  = [\"subnet-33333333333333333\", \"subnet-44444444444444444\", \"subnet-55555555555555555\"]\n  security_groups  = [\"sg-00000000000000000\"]\n  \n  root_domain_name = \"example.com\"\n  zone_id          = \"Z00000000000000000000\"\n\n  environment = {\n    API_KEY   = \"00000000000000000000000000000000\"\n    JWT_TOKEN = \"99999999999999999999999999999999\"\n  }\n}\n```\n\nSee [examples](./examples) for more usage options.\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.1 |\n\n## Providers\n\n| Name | Version |\n|------|---------|\n| \u003ca name=\"provider_aws\"\u003e\u003c/a\u003e [aws](#provider\\_aws) | 5.47.0 |\n| \u003ca name=\"provider_template\"\u003e\u003c/a\u003e [template](#provider\\_template) | 2.2.0 |\n\n## Modules\n\n| Name | Source | Version |\n|------|--------|---------|\n| \u003ca name=\"module_alb\"\u003e\u003c/a\u003e [alb](#module\\_alb) | registry.terraform.io/terraform-aws-modules/alb/aws | ~\u003e 7.0 |\n| \u003ca name=\"module_autoscaling\"\u003e\u003c/a\u003e [autoscaling](#module\\_autoscaling) | terraform-aws-modules/autoscaling/aws | ~\u003e 6.0 |\n| \u003ca name=\"module_datadog\"\u003e\u003c/a\u003e [datadog](#module\\_datadog) | registry.terraform.io/hazelops/ecs-datadog-agent/aws | ~\u003e 3.3 |\n| \u003ca name=\"module_ecr\"\u003e\u003c/a\u003e [ecr](#module\\_ecr) | registry.terraform.io/hazelops/ecr/aws | ~\u003e 1.1 |\n| \u003ca name=\"module_efs\"\u003e\u003c/a\u003e [efs](#module\\_efs) | registry.terraform.io/cloudposse/efs/aws | ~\u003e 0.36 |\n| \u003ca name=\"module_nginx\"\u003e\u003c/a\u003e [nginx](#module\\_nginx) | registry.terraform.io/hazelops/ecs-nginx-proxy/aws | ~\u003e 1.0 |\n| \u003ca name=\"module_route_53_health_check\"\u003e\u003c/a\u003e [route\\_53\\_health\\_check](#module\\_route\\_53\\_health\\_check) | registry.terraform.io/hazelops/route53-healthcheck/aws | ~\u003e 1.0 |\n| \u003ca name=\"module_service\"\u003e\u003c/a\u003e [service](#module\\_service) | ./modules/ecs-service | n/a |\n\n## Resources\n\n| Name | Type |\n|------|------|\n| [aws_eip.autoscaling](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/eip) | resource |\n| [aws_iam_role_policy.ec2_auto_eip](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy) | resource |\n| [aws_route53_record.alb](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/route53_record) | resource |\n| [aws_route53_record.ec2](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/route53_record) | resource |\n| [aws_caller_identity.current](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/caller_identity) | data source |\n| [aws_iam_instance_profile.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/iam_instance_profile) | data source |\n| [aws_region.current](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/region) | data source |\n| [template_file.asg_ecs_ec2_user_data](https://registry.terraform.io/providers/hashicorp/template/latest/docs/data-sources/file) | data source |\n\n## Inputs\n\n| Name | Description | Type | Default | Required |\n|------|-------------|------|---------|:--------:|\n| \u003ca name=\"input_additional_container_definition_parameters\"\u003e\u003c/a\u003e [additional\\_container\\_definition\\_parameters](#input\\_additional\\_container\\_definition\\_parameters) | Additional parameters passed straight to the container definition, eg. tmpfs config | `any` | `{}` | no |\n| \u003ca name=\"input_alb_access_logs_enabled\"\u003e\u003c/a\u003e [alb\\_access\\_logs\\_enabled](#input\\_alb\\_access\\_logs\\_enabled) | If true, ALB access logs will be written to S3 | `bool` | `false` | no |\n| \u003ca name=\"input_alb_access_logs_s3bucket_name\"\u003e\u003c/a\u003e [alb\\_access\\_logs\\_s3bucket\\_name](#input\\_alb\\_access\\_logs\\_s3bucket\\_name) | S3 bucket name for ALB access logs | `string` | `\"\"` | no |\n| \u003ca name=\"input_alb_deregistration_delay\"\u003e\u003c/a\u003e [alb\\_deregistration\\_delay](#input\\_alb\\_deregistration\\_delay) | The amount of time, in seconds, for Elastic Load Balancing to wait before changing the state of a deregistering target from draining to unused | `number` | `5` | no |\n| \u003ca name=\"input_alb_health_check_healthy_threshold\"\u003e\u003c/a\u003e [alb\\_health\\_check\\_healthy\\_threshold](#input\\_alb\\_health\\_check\\_healthy\\_threshold) | The number of consecutive health checks successes required before considering an unhealthy target healthy | `number` | `3` | no |\n| \u003ca name=\"input_alb_health_check_interval\"\u003e\u003c/a\u003e [alb\\_health\\_check\\_interval](#input\\_alb\\_health\\_check\\_interval) | The approximate amount of time, in seconds, between health checks of an individual target | `number` | `30` | no |\n| \u003ca name=\"input_alb_health_check_path\"\u003e\u003c/a\u003e [alb\\_health\\_check\\_path](#input\\_alb\\_health\\_check\\_path) | ALB health check path | `string` | `\"/health\"` | no |\n| \u003ca name=\"input_alb_health_check_timeout\"\u003e\u003c/a\u003e [alb\\_health\\_check\\_timeout](#input\\_alb\\_health\\_check\\_timeout) | The amount of time, in seconds, during which no response means a failed health check | `number` | `6` | no |\n| \u003ca name=\"input_alb_health_check_unhealthy_threshold\"\u003e\u003c/a\u003e [alb\\_health\\_check\\_unhealthy\\_threshold](#input\\_alb\\_health\\_check\\_unhealthy\\_threshold) | The number of consecutive health check failures required before considering the target unhealthy | `number` | `3` | no |\n| \u003ca name=\"input_alb_health_check_valid_response_codes\"\u003e\u003c/a\u003e [alb\\_health\\_check\\_valid\\_response\\_codes](#input\\_alb\\_health\\_check\\_valid\\_response\\_codes) | The HTTP codes to use when checking for a successful response from a target. You can specify multiple values (for example, \"200,202\") or a range of values (for example, \"200-299\"). | `string` | `\"200-399\"` | no |\n| \u003ca name=\"input_alb_idle_timeout\"\u003e\u003c/a\u003e [alb\\_idle\\_timeout](#input\\_alb\\_idle\\_timeout) | The time in seconds that the connection is allowed to be idle. | `number` | `60` | no |\n| \u003ca name=\"input_alb_security_groups\"\u003e\u003c/a\u003e [alb\\_security\\_groups](#input\\_alb\\_security\\_groups) | Security groups to assign to ALB | `list(any)` | `[]` | no |\n| \u003ca name=\"input_app_secrets\"\u003e\u003c/a\u003e [app\\_secrets](#input\\_app\\_secrets) | List of SSM ParameterStore secret parameters - by default, /$var.env/$var.name/* | `list(any)` | `[]` | no |\n| \u003ca name=\"input_app_type\"\u003e\u003c/a\u003e [app\\_type](#input\\_app\\_type) | ECS application type. Valid values: web (with ALB), worker (without ALB). | `string` | `\"web\"` | no |\n| \u003ca name=\"input_assign_public_ip\"\u003e\u003c/a\u003e [assign\\_public\\_ip](#input\\_assign\\_public\\_ip) | ECS service network configuration - assign public IP | `bool` | `false` | no |\n| \u003ca name=\"input_autoscale_enabled\"\u003e\u003c/a\u003e [autoscale\\_enabled](#input\\_autoscale\\_enabled) | ECS Autoscaling enabled | `bool` | `false` | no |\n| \u003ca name=\"input_autoscale_scheduled_down\"\u003e\u003c/a\u003e [autoscale\\_scheduled\\_down](#input\\_autoscale\\_scheduled\\_down) | List of Cron-like expressions for scheduled ecs autoscale DOWN | `list(string)` | `[]` | no |\n| \u003ca name=\"input_autoscale_scheduled_timezone\"\u003e\u003c/a\u003e [autoscale\\_scheduled\\_timezone](#input\\_autoscale\\_scheduled\\_timezone) | Time Zone for the scheduled event | `string` | `\"UTC\"` | no |\n| \u003ca name=\"input_autoscale_scheduled_up\"\u003e\u003c/a\u003e [autoscale\\_scheduled\\_up](#input\\_autoscale\\_scheduled\\_up) | List of Cron-like expressions for scheduled ecs autoscale UP | `list(string)` | `[]` | no |\n| \u003ca name=\"input_autoscale_target_value_cpu\"\u003e\u003c/a\u003e [autoscale\\_target\\_value\\_cpu](#input\\_autoscale\\_target\\_value\\_cpu) | ECS Service Average CPU Utilization threshold. Integer value for percentage - IE 80 | `number` | `50` | no |\n| \u003ca name=\"input_autoscale_target_value_memory\"\u003e\u003c/a\u003e [autoscale\\_target\\_value\\_memory](#input\\_autoscale\\_target\\_value\\_memory) | ECS Service Average Memory Utilization threshold. Integer value for percentage. IE 60 | `number` | `50` | no |\n| \u003ca name=\"input_autoscaling_health_check_type\"\u003e\u003c/a\u003e [autoscaling\\_health\\_check\\_type](#input\\_autoscaling\\_health\\_check\\_type) | ECS 'EC2' or 'ELB' health check type | `string` | `\"EC2\"` | no |\n| \u003ca name=\"input_autoscaling_max_size\"\u003e\u003c/a\u003e [autoscaling\\_max\\_size](#input\\_autoscaling\\_max\\_size) | Maximum number of running ECS tasks during scheduled-up-autoscaling action | `number` | `2` | no |\n| \u003ca name=\"input_autoscaling_min_size\"\u003e\u003c/a\u003e [autoscaling\\_min\\_size](#input\\_autoscaling\\_min\\_size) | Minimum number of running ECS tasks during scheduled-up-autoscaling action | `number` | `2` | no |\n| \u003ca name=\"input_aws_service_discovery_private_dns_namespace\"\u003e\u003c/a\u003e [aws\\_service\\_discovery\\_private\\_dns\\_namespace](#input\\_aws\\_service\\_discovery\\_private\\_dns\\_namespace) | Amazon ECS Service Discovery private DNS namespace | `string` | `\"\"` | no |\n| \u003ca name=\"input_cloudwatch_schedule_expressions\"\u003e\u003c/a\u003e [cloudwatch\\_schedule\\_expressions](#input\\_cloudwatch\\_schedule\\_expressions) | List of Cron-like Cloudwatch Event Rule schedule expressions (UTC time zone) | `list(any)` | `[]` | no |\n| \u003ca name=\"input_cpu\"\u003e\u003c/a\u003e [cpu](#input\\_cpu) | Fargate CPU value (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-cpu-memory-error.html) | `number` | `256` | no |\n| \u003ca name=\"input_cpu_architecture\"\u003e\u003c/a\u003e [cpu\\_architecture](#input\\_cpu\\_architecture) | When you register a task definition, you specify the CPU architecture. The valid values are X86\\_64 and ARM64 | `string` | `\"X86_64\"` | no |\n| \u003ca name=\"input_create_iam_instance_profile\"\u003e\u003c/a\u003e [create\\_iam\\_instance\\_profile](#input\\_create\\_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_schedule\"\u003e\u003c/a\u003e [create\\_schedule](#input\\_create\\_schedule) | Determines whether to create autoscaling group schedule or not | `bool` | `false` | no |\n| \u003ca name=\"input_datadog_enabled\"\u003e\u003c/a\u003e [datadog\\_enabled](#input\\_datadog\\_enabled) | Datadog agent is enabled | `bool` | `false` | no |\n| \u003ca name=\"input_datadog_jmx_enabled\"\u003e\u003c/a\u003e [datadog\\_jmx\\_enabled](#input\\_datadog\\_jmx\\_enabled) | Enables / Disables jmx monitor via the datadog agent | `bool` | `false` | no |\n| \u003ca name=\"input_deployment_minimum_healthy_percent\"\u003e\u003c/a\u003e [deployment\\_minimum\\_healthy\\_percent](#input\\_deployment\\_minimum\\_healthy\\_percent) | Lower limit on the number of running tasks | `number` | `100` | no |\n| \u003ca name=\"input_desired_capacity\"\u003e\u003c/a\u003e [desired\\_capacity](#input\\_desired\\_capacity) | Desired number (capacity) of running ECS tasks | `number` | `1` | no |\n| \u003ca name=\"input_docker_container_command\"\u003e\u003c/a\u003e [docker\\_container\\_command](#input\\_docker\\_container\\_command) | Docker container command | `list(string)` | `[]` | no |\n| \u003ca name=\"input_docker_container_entrypoint\"\u003e\u003c/a\u003e [docker\\_container\\_entrypoint](#input\\_docker\\_container\\_entrypoint) | Docker container entrypoint | `list(string)` | `[]` | no |\n| \u003ca name=\"input_docker_container_port\"\u003e\u003c/a\u003e [docker\\_container\\_port](#input\\_docker\\_container\\_port) | Docker container port | `number` | `3000` | no |\n| \u003ca name=\"input_docker_host_port\"\u003e\u003c/a\u003e [docker\\_host\\_port](#input\\_docker\\_host\\_port) | Docker host port. 0 means Auto-assign. | `number` | `0` | no |\n| \u003ca name=\"input_docker_image_name\"\u003e\u003c/a\u003e [docker\\_image\\_name](#input\\_docker\\_image\\_name) | Docker image name | `string` | `\"\"` | no |\n| \u003ca name=\"input_docker_image_tag\"\u003e\u003c/a\u003e [docker\\_image\\_tag](#input\\_docker\\_image\\_tag) | Docker image tag | `string` | `\"latest\"` | no |\n| \u003ca name=\"input_docker_labels\"\u003e\u003c/a\u003e [docker\\_labels](#input\\_docker\\_labels) | Labels to be added to the docker. Used for auto-configuration, for instance of JMX discovery | `map(any)` | `null` | no |\n| \u003ca name=\"input_docker_registry\"\u003e\u003c/a\u003e [docker\\_registry](#input\\_docker\\_registry) | ECR or any other docker registry | `string` | `\"docker.io\"` | no |\n| \u003ca name=\"input_domain_names\"\u003e\u003c/a\u003e [domain\\_names](#input\\_domain\\_names) | Domain names for AWS Route53 A records | `list(any)` | `[]` | no |\n| \u003ca name=\"input_ec2_eip_count\"\u003e\u003c/a\u003e [ec2\\_eip\\_count](#input\\_ec2\\_eip\\_count) | Count of EIPs to create | `number` | `0` | no |\n| \u003ca name=\"input_ec2_eip_dns_enabled\"\u003e\u003c/a\u003e [ec2\\_eip\\_dns\\_enabled](#input\\_ec2\\_eip\\_dns\\_enabled) | Whether to manage DNS records to be attached to the EIP | `bool` | `false` | no |\n| \u003ca name=\"input_ec2_eip_enabled\"\u003e\u003c/a\u003e [ec2\\_eip\\_enabled](#input\\_ec2\\_eip\\_enabled) | Enable EC2 ASG Auto Assign EIP mode | `bool` | `false` | no |\n| \u003ca name=\"input_ec2_service_group\"\u003e\u003c/a\u003e [ec2\\_service\\_group](#input\\_ec2\\_service\\_group) | Service group name, e.g. app, service name etc. | `string` | `\"app\"` | no |\n| \u003ca name=\"input_ecr_force_delete\"\u003e\u003c/a\u003e [ecr\\_force\\_delete](#input\\_ecr\\_force\\_delete) | If true, will delete the ECR repository even if it contains images on destroy | `bool` | `false` | no |\n| \u003ca name=\"input_ecr_repo_create\"\u003e\u003c/a\u003e [ecr\\_repo\\_create](#input\\_ecr\\_repo\\_create) | Creation of a ECR repo | `bool` | `false` | no |\n| \u003ca name=\"input_ecr_repo_name\"\u003e\u003c/a\u003e [ecr\\_repo\\_name](#input\\_ecr\\_repo\\_name) | ECR repository name | `string` | `\"\"` | no |\n| \u003ca name=\"input_ecs_cluster_arn\"\u003e\u003c/a\u003e [ecs\\_cluster\\_arn](#input\\_ecs\\_cluster\\_arn) | ECS cluster arn. Should be specified to avoid data query by cluster name | `string` | `\"\"` | no |\n| \u003ca name=\"input_ecs_cluster_name\"\u003e\u003c/a\u003e [ecs\\_cluster\\_name](#input\\_ecs\\_cluster\\_name) | ECS cluster name | `string` | n/a | yes |\n| \u003ca name=\"input_ecs_exec_custom_prompt_enabled\"\u003e\u003c/a\u003e [ecs\\_exec\\_custom\\_prompt\\_enabled](#input\\_ecs\\_exec\\_custom\\_prompt\\_enabled) | Enable Custom shell prompt on ECS Exec | `bool` | `false` | no |\n| \u003ca name=\"input_ecs_exec_enabled\"\u003e\u003c/a\u003e [ecs\\_exec\\_enabled](#input\\_ecs\\_exec\\_enabled) | Turns on the Amazon ECS Exec for the task | `bool` | `true` | no |\n| \u003ca name=\"input_ecs_exec_prompt_string\"\u003e\u003c/a\u003e [ecs\\_exec\\_prompt\\_string](#input\\_ecs\\_exec\\_prompt\\_string) | Shell prompt that contains ENV and APP\\_NAME is enabled | `string` | `\"\\\\e[1;35m★\\\\e[0m $ENV-$APP_NAME:$(wget -qO- $ECS_CONTAINER_METADATA_URI_V4 | sed -n 's/.*\\\"com.amazonaws.ecs.task-definition-version\\\":\\\"\\\\([^\\\"]*\\\\).*/\\\\1/p') \\\\e[1;36m★\\\\e[0m $(wget -qO- $ECS_CONTAINER_METADATA_URI_V4 | sed -n 's/.*\\\"Image\\\":\\\"\\\\([^\\\"]*\\\\).*/\\\\1/p' | awk -F\\\\: '{print $2}' )\\\\n\\\\e[1;33m\\\\e[0m \\\\w \\\\e[1;34m❯\\\\e[0m \"` | no |\n| \u003ca name=\"input_ecs_launch_type\"\u003e\u003c/a\u003e [ecs\\_launch\\_type](#input\\_ecs\\_launch\\_type) | ECS launch type: FARGATE or EC2 | `string` | `\"FARGATE\"` | no |\n| \u003ca name=\"input_ecs_network_mode\"\u003e\u003c/a\u003e [ecs\\_network\\_mode](#input\\_ecs\\_network\\_mode) | Corresponds to networkMode in an ECS task definition. Supported values are none, bridge, host, or awsvpc | `string` | `\"awsvpc\"` | no |\n| \u003ca name=\"input_ecs_platform_version\"\u003e\u003c/a\u003e [ecs\\_platform\\_version](#input\\_ecs\\_platform\\_version) | The platform version on which to run your service. Only applicable when using Fargate launch type | `string` | `\"LATEST\"` | no |\n| \u003ca name=\"input_ecs_service_deployed\"\u003e\u003c/a\u003e [ecs\\_service\\_deployed](#input\\_ecs\\_service\\_deployed) | This service resource doesn't have task definition lifecycle policy, so terraform is used to deploy it (instead of ecs cli or ize) | `bool` | `false` | no |\n| \u003ca name=\"input_ecs_service_discovery_enabled\"\u003e\u003c/a\u003e [ecs\\_service\\_discovery\\_enabled](#input\\_ecs\\_service\\_discovery\\_enabled) | ECS service can optionally be configured to use Amazon ECS Service Discovery | `bool` | `false` | no |\n| \u003ca name=\"input_ecs_service_name\"\u003e\u003c/a\u003e [ecs\\_service\\_name](#input\\_ecs\\_service\\_name) | The ECS service name | `string` | `\"\"` | no |\n| \u003ca name=\"input_ecs_task_health_check_command\"\u003e\u003c/a\u003e [ecs\\_task\\_health\\_check\\_command](#input\\_ecs\\_task\\_health\\_check\\_command) | Command to check for the health of the container | `string` | `\"\"` | no |\n| \u003ca name=\"input_ecs_volumes_from\"\u003e\u003c/a\u003e [ecs\\_volumes\\_from](#input\\_ecs\\_volumes\\_from) | The VolumeFrom property specifies details on a data volume from another container in the same task definition | `list(any)` | `[]` | no |\n| \u003ca name=\"input_efs_enabled\"\u003e\u003c/a\u003e [efs\\_enabled](#input\\_efs\\_enabled) | Whether to enable EFS mount for ECS task | `bool` | `false` | no |\n| \u003ca name=\"input_efs_file_system_id\"\u003e\u003c/a\u003e [efs\\_file\\_system\\_id](#input\\_efs\\_file\\_system\\_id) | EFS file system ID | `string` | `\"\"` | no |\n| \u003ca name=\"input_efs_mount_point\"\u003e\u003c/a\u003e [efs\\_mount\\_point](#input\\_efs\\_mount\\_point) | EFS mount point in the container | `string` | `\"/mnt/efs\"` | no |\n| \u003ca name=\"input_efs_root_directory\"\u003e\u003c/a\u003e [efs\\_root\\_directory](#input\\_efs\\_root\\_directory) | EFS root directory | `string` | `\"/\"` | no |\n| \u003ca name=\"input_efs_share_create\"\u003e\u003c/a\u003e [efs\\_share\\_create](#input\\_efs\\_share\\_create) | Whether to create EFS share or not | `bool` | `false` | no |\n| \u003ca name=\"input_env\"\u003e\u003c/a\u003e [env](#input\\_env) | Target environment name of the infrastructure | `string` | n/a | yes |\n| \u003ca name=\"input_environment\"\u003e\u003c/a\u003e [environment](#input\\_environment) | Map of parameters to be set in SSM and then exposed into a Task Definition as environment variables. | `map(string)` | n/a | yes |\n| \u003ca name=\"input_firelens_ecs_log_enabled\"\u003e\u003c/a\u003e [firelens\\_ecs\\_log\\_enabled](#input\\_firelens\\_ecs\\_log\\_enabled) | AWS Firelens ECS logs enabled (used by FluentBit, Datadog, etc) | `bool` | `false` | no |\n| \u003ca name=\"input_global_secrets\"\u003e\u003c/a\u003e [global\\_secrets](#input\\_global\\_secrets) | List of SSM ParameterStore global secrets - by default, /$var.env/global/* | `list(any)` | `[]` | no |\n| \u003ca name=\"input_gpu\"\u003e\u003c/a\u003e [gpu](#input\\_gpu) | GPU-enabled container instances | `number` | `0` | no |\n| \u003ca name=\"input_http_port\"\u003e\u003c/a\u003e [http\\_port](#input\\_http\\_port) | Port that is used for HTTP protocol | `number` | `80` | no |\n| \u003ca name=\"input_https_enabled\"\u003e\u003c/a\u003e [https\\_enabled](#input\\_https\\_enabled) | Whether enable https or not (still needs tls\\_cert\\_arn) | `bool` | `true` | no |\n| \u003ca name=\"input_iam_instance_profile\"\u003e\u003c/a\u003e [iam\\_instance\\_profile](#input\\_iam\\_instance\\_profile) | IAM Instance Profile | `string` | `null` | no |\n| \u003ca name=\"input_iam_role_policy_statement\"\u003e\u003c/a\u003e [iam\\_role\\_policy\\_statement](#input\\_iam\\_role\\_policy\\_statement) | ECS Service IAM Role policy statement | `list(any)` | `[]` | no |\n| \u003ca name=\"input_image_id\"\u003e\u003c/a\u003e [image\\_id](#input\\_image\\_id) | EC2 AMI id | `string` | `null` | no |\n| \u003ca name=\"input_instance_type\"\u003e\u003c/a\u003e [instance\\_type](#input\\_instance\\_type) | EC2 instance type for ECS | `string` | `\"t3.small\"` | no |\n| \u003ca name=\"input_key_name\"\u003e\u003c/a\u003e [key\\_name](#input\\_key\\_name) | EC2 key name | `string` | `null` | no |\n| \u003ca name=\"input_max_size\"\u003e\u003c/a\u003e [max\\_size](#input\\_max\\_size) | Maximum number of running ECS tasks | `number` | `1` | no |\n| \u003ca name=\"input_memory\"\u003e\u003c/a\u003e [memory](#input\\_memory) | Fargate Memory value (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-cpu-memory-error.html) | `number` | `512` | no |\n| \u003ca name=\"input_memory_reservation\"\u003e\u003c/a\u003e [memory\\_reservation](#input\\_memory\\_reservation) | The soft limit (in MiB) of memory to reserve for the container | `number` | `256` | no |\n| \u003ca name=\"input_min_size\"\u003e\u003c/a\u003e [min\\_size](#input\\_min\\_size) | Minimum number of running ECS tasks | `number` | `1` | no |\n| \u003ca name=\"input_name\"\u003e\u003c/a\u003e [name](#input\\_name) | ECS app name including all required namespaces | `string` | n/a | yes |\n| \u003ca name=\"input_operating_system_family\"\u003e\u003c/a\u003e [operating\\_system\\_family](#input\\_operating\\_system\\_family) | Platform to be used with ECS. The valid values for Amazon ECS tasks hosted on Fargate are LINUX, WINDOWS\\_SERVER\\_2019\\_FULL, and WINDOWS\\_SERVER\\_2019\\_CORE. The valid values for Amazon ECS tasks hosted on EC2 are LINUX, WINDOWS\\_SERVER\\_2022\\_CORE, WINDOWS\\_SERVER\\_2022\\_FULL, WINDOWS\\_SERVER\\_2019\\_FULL, and WINDOWS\\_SERVER\\_2019\\_CORE, WINDOWS\\_SERVER\\_2016\\_FULL, WINDOWS\\_SERVER\\_2004\\_CORE, and WINDOWS\\_SERVER\\_20H2\\_CORE. | `string` | `\"LINUX\"` | no |\n| \u003ca name=\"input_port_mappings\"\u003e\u003c/a\u003e [port\\_mappings](#input\\_port\\_mappings) | List of ports to open from a service | `any` | `[]` | no |\n| \u003ca name=\"input_private_subnets\"\u003e\u003c/a\u003e [private\\_subnets](#input\\_private\\_subnets) | VPC Private subnets to place ECS resources | `list(any)` | `[]` | no |\n| \u003ca name=\"input_proxy_docker_container_command\"\u003e\u003c/a\u003e [proxy\\_docker\\_container\\_command](#input\\_proxy\\_docker\\_container\\_command) | Proxy docker container CMD | `list(string)` | \u003cpre\u003e[\u003cbr\u003e  \"nginx\",\u003cbr\u003e  \"-g\",\u003cbr\u003e  \"daemon off;\"\u003cbr\u003e]\u003c/pre\u003e | no |\n| \u003ca name=\"input_proxy_docker_entrypoint\"\u003e\u003c/a\u003e [proxy\\_docker\\_entrypoint](#input\\_proxy\\_docker\\_entrypoint) | Proxy docker container entrypoint | `list(string)` | \u003cpre\u003e[\u003cbr\u003e  \"/docker-entrypoint.sh\"\u003cbr\u003e]\u003c/pre\u003e | no |\n| \u003ca name=\"input_proxy_docker_image_name\"\u003e\u003c/a\u003e [proxy\\_docker\\_image\\_name](#input\\_proxy\\_docker\\_image\\_name) | Nginx proxy docker image name | `string` | `\"nginx\"` | no |\n| \u003ca name=\"input_public\"\u003e\u003c/a\u003e [public](#input\\_public) | It's publicity accessible application | `bool` | `true` | no |\n| \u003ca name=\"input_public_ecs_service\"\u003e\u003c/a\u003e [public\\_ecs\\_service](#input\\_public\\_ecs\\_service) | It's publicity accessible service | `bool` | `false` | no |\n| \u003ca name=\"input_public_subnets\"\u003e\u003c/a\u003e [public\\_subnets](#input\\_public\\_subnets) | VPC Public subnets to place ECS resources | `list(any)` | `[]` | no |\n| \u003ca name=\"input_resource_requirements\"\u003e\u003c/a\u003e [resource\\_requirements](#input\\_resource\\_requirements) | The ResourceRequirement property specifies the type and amount of a resource to assign to a container. The only supported resource is a GPU | `list(any)` | `[]` | no |\n| \u003ca name=\"input_root_block_device_size\"\u003e\u003c/a\u003e [root\\_block\\_device\\_size](#input\\_root\\_block\\_device\\_size) | EBS root block device size in GB | `number` | `\"50\"` | no |\n| \u003ca name=\"input_root_block_device_type\"\u003e\u003c/a\u003e [root\\_block\\_device\\_type](#input\\_root\\_block\\_device\\_type) | EBS root block device type | `string` | `\"gp2\"` | no |\n| \u003ca name=\"input_root_domain_name\"\u003e\u003c/a\u003e [root\\_domain\\_name](#input\\_root\\_domain\\_name) | Domain name of AWS Route53 Zone | `string` | `\"\"` | no |\n| \u003ca name=\"input_route53_health_check_enabled\"\u003e\u003c/a\u003e [route53\\_health\\_check\\_enabled](#input\\_route53\\_health\\_check\\_enabled) | AWS Route53 health check is enabled | `bool` | `false` | no |\n| \u003ca name=\"input_schedules\"\u003e\u003c/a\u003e [schedules](#input\\_schedules) | Map of autoscaling group schedule to create | `map(any)` | `{}` | no |\n| \u003ca name=\"input_security_groups\"\u003e\u003c/a\u003e [security\\_groups](#input\\_security\\_groups) | Security groups to assign to ECS Fargate task/ECS EC2 | `list(any)` | `[]` | no |\n| \u003ca name=\"input_shared_memory_size\"\u003e\u003c/a\u003e [shared\\_memory\\_size](#input\\_shared\\_memory\\_size) | Size of the /dev/shm shared memory in MB | `number` | `0` | no |\n| \u003ca name=\"input_sidecar_container_definitions\"\u003e\u003c/a\u003e [sidecar\\_container\\_definitions](#input\\_sidecar\\_container\\_definitions) | Sidecar container definitions for ECS task | `any` | `[]` | no |\n| \u003ca name=\"input_sns_service_subscription_endpoint\"\u003e\u003c/a\u003e [sns\\_service\\_subscription\\_endpoint](#input\\_sns\\_service\\_subscription\\_endpoint) | You can use different endpoints, such as email, Pagerduty, Slack, etc. | `string` | `\"exmple@example.com\"` | no |\n| \u003ca name=\"input_sns_service_subscription_endpoint_protocol\"\u003e\u003c/a\u003e [sns\\_service\\_subscription\\_endpoint\\_protocol](#input\\_sns\\_service\\_subscription\\_endpoint\\_protocol) | See valid protocols here: https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/sns_topic_subscription#protocol-support | `string` | `\"email\"` | no |\n| \u003ca name=\"input_ssm_global_secret_path\"\u003e\u003c/a\u003e [ssm\\_global\\_secret\\_path](#input\\_ssm\\_global\\_secret\\_path) | AWS SSM root path to global environment secrets like /dev/global | `string` | `null` | no |\n| \u003ca name=\"input_ssm_secret_path\"\u003e\u003c/a\u003e [ssm\\_secret\\_path](#input\\_ssm\\_secret\\_path) | AWS SSM root path to environment secrets of an app like /dev/app1 | `string` | `null` | no |\n| \u003ca name=\"input_tls_cert_arn\"\u003e\u003c/a\u003e [tls\\_cert\\_arn](#input\\_tls\\_cert\\_arn) | TLS certificate ARN | `string` | `null` | no |\n| \u003ca name=\"input_tmpfs_container_path\"\u003e\u003c/a\u003e [tmpfs\\_container\\_path](#input\\_tmpfs\\_container\\_path) | Path where tmpfs shm would be mounted | `string` | `\"/tmp/\"` | no |\n| \u003ca name=\"input_tmpfs_enabled\"\u003e\u003c/a\u003e [tmpfs\\_enabled](#input\\_tmpfs\\_enabled) | TMPFS support for non-Fargate deployments | `bool` | `false` | no |\n| \u003ca name=\"input_tmpfs_mount_options\"\u003e\u003c/a\u003e [tmpfs\\_mount\\_options](#input\\_tmpfs\\_mount\\_options) | Options for the mount of the ram disk. noatime by default to speed up access | `list(string)` | \u003cpre\u003e[\u003cbr\u003e  \"noatime\"\u003cbr\u003e]\u003c/pre\u003e | no |\n| \u003ca name=\"input_tmpfs_size\"\u003e\u003c/a\u003e [tmpfs\\_size](#input\\_tmpfs\\_size) | Size of the tmpfs in MB | `number` | `1024` | no |\n| \u003ca name=\"input_volumes\"\u003e\u003c/a\u003e [volumes](#input\\_volumes) | Amazon data volumes for ECS Task (efs/FSx/Docker volume/Bind mounts) | `list(any)` | `[]` | no |\n| \u003ca name=\"input_vpc_id\"\u003e\u003c/a\u003e [vpc\\_id](#input\\_vpc\\_id) | AWS VPC ID | `string` | n/a | yes |\n| \u003ca name=\"input_web_proxy_docker_container_port\"\u003e\u003c/a\u003e [web\\_proxy\\_docker\\_container\\_port](#input\\_web\\_proxy\\_docker\\_container\\_port) | Proxy docker container port | `number` | `80` | no |\n| \u003ca name=\"input_web_proxy_docker_image_tag\"\u003e\u003c/a\u003e [web\\_proxy\\_docker\\_image\\_tag](#input\\_web\\_proxy\\_docker\\_image\\_tag) | Nginx proxy docker image tag | `string` | `\"1.19.2-alpine\"` | no |\n| \u003ca name=\"input_web_proxy_enabled\"\u003e\u003c/a\u003e [web\\_proxy\\_enabled](#input\\_web\\_proxy\\_enabled) | Nginx proxy enabled | `bool` | `false` | no |\n| \u003ca name=\"input_zone_id\"\u003e\u003c/a\u003e [zone\\_id](#input\\_zone\\_id) | AWS Route53 Zone ID | `string` | `\"\"` | no |\n\n## Outputs\n\n| Name | Description |\n|------|-------------|\n| \u003ca name=\"output_alb_arn\"\u003e\u003c/a\u003e [alb\\_arn](#output\\_alb\\_arn) | ARN of the ALB (if ALB is created) |\n| \u003ca name=\"output_alb_dns_name\"\u003e\u003c/a\u003e [alb\\_dns\\_name](#output\\_alb\\_dns\\_name) | Name of the ALB DNS record (if ALB is created) |\n| \u003ca name=\"output_alb_dns_zone\"\u003e\u003c/a\u003e [alb\\_dns\\_zone](#output\\_alb\\_dns\\_zone) | Zone ID of the ALB DNS record (if ALB is created) |\n| \u003ca name=\"output_cloudwatch_event_rule_id\"\u003e\u003c/a\u003e [cloudwatch\\_event\\_rule\\_id](#output\\_cloudwatch\\_event\\_rule\\_id) | ID of the Cloudwatch event rule for ECS Scheduled Task |\n| \u003ca name=\"output_cloudwatch_log_group\"\u003e\u003c/a\u003e [cloudwatch\\_log\\_group](#output\\_cloudwatch\\_log\\_group) | n/a |\n| \u003ca name=\"output_ec2_dns_name\"\u003e\u003c/a\u003e [ec2\\_dns\\_name](#output\\_ec2\\_dns\\_name) | Public DNS name of the EC2 instance (if EC2 is used) |\n| \u003ca name=\"output_efs_mount_target\"\u003e\u003c/a\u003e [efs\\_mount\\_target](#output\\_efs\\_mount\\_target) | DNS name of the EFS mount target (if EFS is created) |\n| \u003ca name=\"output_eips\"\u003e\u003c/a\u003e [eips](#output\\_eips) | List of EIPs associated with the EC2 instances (if EC2 is used) |\n| \u003ca name=\"output_public_ip\"\u003e\u003c/a\u003e [public\\_ip](#output\\_public\\_ip) | Public IP of the EC2 instance (if EC2 is used) |\n| \u003ca name=\"output_r53_lb_dns_name\"\u003e\u003c/a\u003e [r53\\_lb\\_dns\\_name](#output\\_r53\\_lb\\_dns\\_name) | DNS name of the record that is attached to the ALB (if app type is web or tcp-ap) |\n| \u003ca name=\"output_this_target_group_arn\"\u003e\u003c/a\u003e [this\\_target\\_group\\_arn](#output\\_this\\_target\\_group\\_arn) | n/a |\n| \u003ca name=\"output_this_task_definition_arn\"\u003e\u003c/a\u003e [this\\_task\\_definition\\_arn](#output\\_this\\_task\\_definition\\_arn) | n/a |\n\u003c!-- END_TF_DOCS --\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhazelops%2Fterraform-aws-ecs-app","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhazelops%2Fterraform-aws-ecs-app","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhazelops%2Fterraform-aws-ecs-app/lists"}