Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/hazelops/terraform-aws-ecs-app
Terraform module to create and manage AWS ECS application.
https://github.com/hazelops/terraform-aws-ecs-app
ecs ecs-fargate ecs-service ecs-task terraform
Last synced: 19 days ago
JSON representation
Terraform module to create and manage AWS ECS application.
- Host: GitHub
- URL: https://github.com/hazelops/terraform-aws-ecs-app
- Owner: hazelops
- License: apache-2.0
- Created: 2021-12-29T18:37:28.000Z (about 3 years ago)
- Default Branch: main
- Last Pushed: 2024-10-16T18:21:06.000Z (3 months ago)
- Last Synced: 2024-10-18T15:08:13.795Z (3 months ago)
- Topics: ecs, ecs-fargate, ecs-service, ecs-task, terraform
- Language: HCL
- Homepage: https://registry.terraform.io/modules/hazelops/ecs-app/aws
- Size: 354 KB
- Stars: 3
- Watchers: 1
- Forks: 2
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Terraform AWS ECS App Module
[![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)Create and manage AWS ECS application in a clean abstracted way.
This module is actively maintained and is covered by multiple end-to-end [tests](./test/examples_complete-web_test.go) to prevent regressions.
## Features
_This module is feature-rich, with sane [defaults](./variables.tf). Some of the features are:_
- [Web application](./examples/complete-web/main.tf) (ALB + ACM + R53)
- [Worker application to Fargate](./examples/complete-worker/main.tf) and [Worker application to EC2](./examples/complete-worker-ec2/main.tf) (no ALB)
- [TCP application](./examples/complete-tcp-app/main.tf) (no ALB)
- [Environment variables](#input_environment) (SSM parameters)
- [ECR repo Management](#input_ecr_repo_create)
- [Standardized naming convention for all resources](#input_name)
- [Deployment via Terraform & via external tool](#input_ecs_service_deployed) (ecs-deploy or ize)
- [Datadog integration](#input_datadog_enabled)
- [Autoscale](#input_autoscale_enabled) ([scheduled](#input_autoscale_scheduled_up) or [target-based](#input_autoscale_target_value_cpu))
- [ECS Launch Type (EC2 or Fargate)](#input_ecs_launch_type)
- [EIP assignment](#input_ec2_eip_enabled)
- Resource configuration ([CPU](#input_cpu)/[MEM](#input_mem))
- EFS ([mount](#input_efs_mount_point) and/or [share management](#input_efs_share_create))
- [GPU-based instance](#input_gpu)
- [Multiple ECS network modes](#input_ecs_network_mode)
- Root block device configuration ([size](#input_root_block_device_size), [type](#input_root_block_device_type))
- [Automatic Nginx Proxy for Web Applications](#inputs_web_proxy_enabled)
- [Firelens / Datadog log driver](#input_firelens_ecs_log_enabled)
- [ECS Exec](#input_ecs_exec_enabled) (console into the container)
- [tmpfs configuration](#input_tmpfs_enabled)## Usage
This is a minimal example which demostrates simplicity of the module:
```hcl
module "api" {
source = "registry.terraform.io/hazelops/ecs-app/aws"
version = "~>2.0.0"
name = "api"
env = "prod"
ecs_cluster_name = "prod-cluster"
vpc_id = "vpc-00000000000000000"
public_subnets = ["subnet-00000000000000000", "subnet-11111111111111111", "subnet-22222222222222222"]
private_subnets = ["subnet-33333333333333333", "subnet-44444444444444444", "subnet-55555555555555555"]
security_groups = ["sg-00000000000000000"]
root_domain_name = "example.com"
zone_id = "Z00000000000000000000"environment = {
API_KEY = "00000000000000000000000000000000"
JWT_TOKEN = "99999999999999999999999999999999"
}
}
```See [examples](./examples) for more usage options.
## Requirements
| Name | Version |
|------|---------|
| [terraform](#requirement\_terraform) | >= 1.1 |## Providers
| Name | Version |
|------|---------|
| [aws](#provider\_aws) | 5.47.0 |
| [template](#provider\_template) | 2.2.0 |## Modules
| Name | Source | Version |
|------|--------|---------|
| [alb](#module\_alb) | registry.terraform.io/terraform-aws-modules/alb/aws | ~> 7.0 |
| [autoscaling](#module\_autoscaling) | terraform-aws-modules/autoscaling/aws | ~> 6.0 |
| [datadog](#module\_datadog) | registry.terraform.io/hazelops/ecs-datadog-agent/aws | ~> 3.3 |
| [ecr](#module\_ecr) | registry.terraform.io/hazelops/ecr/aws | ~> 1.1 |
| [efs](#module\_efs) | registry.terraform.io/cloudposse/efs/aws | ~> 0.36 |
| [nginx](#module\_nginx) | registry.terraform.io/hazelops/ecs-nginx-proxy/aws | ~> 1.0 |
| [route\_53\_health\_check](#module\_route\_53\_health\_check) | registry.terraform.io/hazelops/route53-healthcheck/aws | ~> 1.0 |
| [service](#module\_service) | ./modules/ecs-service | n/a |## Resources
| Name | Type |
|------|------|
| [aws_eip.autoscaling](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/eip) | resource |
| [aws_iam_role_policy.ec2_auto_eip](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy) | resource |
| [aws_route53_record.alb](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/route53_record) | resource |
| [aws_route53_record.ec2](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/route53_record) | resource |
| [aws_caller_identity.current](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/caller_identity) | data source |
| [aws_iam_instance_profile.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/iam_instance_profile) | data source |
| [aws_region.current](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/region) | data source |
| [template_file.asg_ecs_ec2_user_data](https://registry.terraform.io/providers/hashicorp/template/latest/docs/data-sources/file) | data source |## Inputs
| Name | Description | Type | Default | Required |
|------|-------------|------|---------|:--------:|
| [additional\_container\_definition\_parameters](#input\_additional\_container\_definition\_parameters) | Additional parameters passed straight to the container definition, eg. tmpfs config | `any` | `{}` | no |
| [alb\_access\_logs\_enabled](#input\_alb\_access\_logs\_enabled) | If true, ALB access logs will be written to S3 | `bool` | `false` | no |
| [alb\_access\_logs\_s3bucket\_name](#input\_alb\_access\_logs\_s3bucket\_name) | S3 bucket name for ALB access logs | `string` | `""` | no |
| [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 |
| [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 |
| [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 |
| [alb\_health\_check\_path](#input\_alb\_health\_check\_path) | ALB health check path | `string` | `"/health"` | no |
| [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 |
| [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 |
| [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 |
| [alb\_idle\_timeout](#input\_alb\_idle\_timeout) | The time in seconds that the connection is allowed to be idle. | `number` | `60` | no |
| [alb\_security\_groups](#input\_alb\_security\_groups) | Security groups to assign to ALB | `list(any)` | `[]` | no |
| [app\_secrets](#input\_app\_secrets) | List of SSM ParameterStore secret parameters - by default, /$var.env/$var.name/* | `list(any)` | `[]` | no |
| [app\_type](#input\_app\_type) | ECS application type. Valid values: web (with ALB), worker (without ALB). | `string` | `"web"` | no |
| [assign\_public\_ip](#input\_assign\_public\_ip) | ECS service network configuration - assign public IP | `bool` | `false` | no |
| [autoscale\_enabled](#input\_autoscale\_enabled) | ECS Autoscaling enabled | `bool` | `false` | no |
| [autoscale\_scheduled\_down](#input\_autoscale\_scheduled\_down) | List of Cron-like expressions for scheduled ecs autoscale DOWN | `list(string)` | `[]` | no |
| [autoscale\_scheduled\_timezone](#input\_autoscale\_scheduled\_timezone) | Time Zone for the scheduled event | `string` | `"UTC"` | no |
| [autoscale\_scheduled\_up](#input\_autoscale\_scheduled\_up) | List of Cron-like expressions for scheduled ecs autoscale UP | `list(string)` | `[]` | no |
| [autoscale\_target\_value\_cpu](#input\_autoscale\_target\_value\_cpu) | ECS Service Average CPU Utilization threshold. Integer value for percentage - IE 80 | `number` | `50` | no |
| [autoscale\_target\_value\_memory](#input\_autoscale\_target\_value\_memory) | ECS Service Average Memory Utilization threshold. Integer value for percentage. IE 60 | `number` | `50` | no |
| [autoscaling\_health\_check\_type](#input\_autoscaling\_health\_check\_type) | ECS 'EC2' or 'ELB' health check type | `string` | `"EC2"` | no |
| [autoscaling\_max\_size](#input\_autoscaling\_max\_size) | Maximum number of running ECS tasks during scheduled-up-autoscaling action | `number` | `2` | no |
| [autoscaling\_min\_size](#input\_autoscaling\_min\_size) | Minimum number of running ECS tasks during scheduled-up-autoscaling action | `number` | `2` | no |
| [aws\_service\_discovery\_private\_dns\_namespace](#input\_aws\_service\_discovery\_private\_dns\_namespace) | Amazon ECS Service Discovery private DNS namespace | `string` | `""` | no |
| [cloudwatch\_schedule\_expressions](#input\_cloudwatch\_schedule\_expressions) | List of Cron-like Cloudwatch Event Rule schedule expressions (UTC time zone) | `list(any)` | `[]` | no |
| [cpu](#input\_cpu) | Fargate CPU value (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-cpu-memory-error.html) | `number` | `256` | no |
| [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 |
| [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 |
| [create\_schedule](#input\_create\_schedule) | Determines whether to create autoscaling group schedule or not | `bool` | `false` | no |
| [datadog\_enabled](#input\_datadog\_enabled) | Datadog agent is enabled | `bool` | `false` | no |
| [datadog\_jmx\_enabled](#input\_datadog\_jmx\_enabled) | Enables / Disables jmx monitor via the datadog agent | `bool` | `false` | no |
| [deployment\_minimum\_healthy\_percent](#input\_deployment\_minimum\_healthy\_percent) | Lower limit on the number of running tasks | `number` | `100` | no |
| [desired\_capacity](#input\_desired\_capacity) | Desired number (capacity) of running ECS tasks | `number` | `1` | no |
| [docker\_container\_command](#input\_docker\_container\_command) | Docker container command | `list(string)` | `[]` | no |
| [docker\_container\_entrypoint](#input\_docker\_container\_entrypoint) | Docker container entrypoint | `list(string)` | `[]` | no |
| [docker\_container\_port](#input\_docker\_container\_port) | Docker container port | `number` | `3000` | no |
| [docker\_host\_port](#input\_docker\_host\_port) | Docker host port. 0 means Auto-assign. | `number` | `0` | no |
| [docker\_image\_name](#input\_docker\_image\_name) | Docker image name | `string` | `""` | no |
| [docker\_image\_tag](#input\_docker\_image\_tag) | Docker image tag | `string` | `"latest"` | no |
| [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 |
| [docker\_registry](#input\_docker\_registry) | ECR or any other docker registry | `string` | `"docker.io"` | no |
| [domain\_names](#input\_domain\_names) | Domain names for AWS Route53 A records | `list(any)` | `[]` | no |
| [ec2\_eip\_count](#input\_ec2\_eip\_count) | Count of EIPs to create | `number` | `0` | no |
| [ec2\_eip\_dns\_enabled](#input\_ec2\_eip\_dns\_enabled) | Whether to manage DNS records to be attached to the EIP | `bool` | `false` | no |
| [ec2\_eip\_enabled](#input\_ec2\_eip\_enabled) | Enable EC2 ASG Auto Assign EIP mode | `bool` | `false` | no |
| [ec2\_service\_group](#input\_ec2\_service\_group) | Service group name, e.g. app, service name etc. | `string` | `"app"` | no |
| [ecr\_force\_delete](#input\_ecr\_force\_delete) | If true, will delete the ECR repository even if it contains images on destroy | `bool` | `false` | no |
| [ecr\_repo\_create](#input\_ecr\_repo\_create) | Creation of a ECR repo | `bool` | `false` | no |
| [ecr\_repo\_name](#input\_ecr\_repo\_name) | ECR repository name | `string` | `""` | no |
| [ecs\_cluster\_arn](#input\_ecs\_cluster\_arn) | ECS cluster arn. Should be specified to avoid data query by cluster name | `string` | `""` | no |
| [ecs\_cluster\_name](#input\_ecs\_cluster\_name) | ECS cluster name | `string` | n/a | yes |
| [ecs\_exec\_custom\_prompt\_enabled](#input\_ecs\_exec\_custom\_prompt\_enabled) | Enable Custom shell prompt on ECS Exec | `bool` | `false` | no |
| [ecs\_exec\_enabled](#input\_ecs\_exec\_enabled) | Turns on the Amazon ECS Exec for the task | `bool` | `true` | no |
| [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 |
| [ecs\_launch\_type](#input\_ecs\_launch\_type) | ECS launch type: FARGATE or EC2 | `string` | `"FARGATE"` | no |
| [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 |
| [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 |
| [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 |
| [ecs\_service\_discovery\_enabled](#input\_ecs\_service\_discovery\_enabled) | ECS service can optionally be configured to use Amazon ECS Service Discovery | `bool` | `false` | no |
| [ecs\_service\_name](#input\_ecs\_service\_name) | The ECS service name | `string` | `""` | no |
| [ecs\_task\_health\_check\_command](#input\_ecs\_task\_health\_check\_command) | Command to check for the health of the container | `string` | `""` | no |
| [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 |
| [efs\_enabled](#input\_efs\_enabled) | Whether to enable EFS mount for ECS task | `bool` | `false` | no |
| [efs\_file\_system\_id](#input\_efs\_file\_system\_id) | EFS file system ID | `string` | `""` | no |
| [efs\_mount\_point](#input\_efs\_mount\_point) | EFS mount point in the container | `string` | `"/mnt/efs"` | no |
| [efs\_root\_directory](#input\_efs\_root\_directory) | EFS root directory | `string` | `"/"` | no |
| [efs\_share\_create](#input\_efs\_share\_create) | Whether to create EFS share or not | `bool` | `false` | no |
| [env](#input\_env) | Target environment name of the infrastructure | `string` | n/a | yes |
| [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 |
| [firelens\_ecs\_log\_enabled](#input\_firelens\_ecs\_log\_enabled) | AWS Firelens ECS logs enabled (used by FluentBit, Datadog, etc) | `bool` | `false` | no |
| [global\_secrets](#input\_global\_secrets) | List of SSM ParameterStore global secrets - by default, /$var.env/global/* | `list(any)` | `[]` | no |
| [gpu](#input\_gpu) | GPU-enabled container instances | `number` | `0` | no |
| [http\_port](#input\_http\_port) | Port that is used for HTTP protocol | `number` | `80` | no |
| [https\_enabled](#input\_https\_enabled) | Whether enable https or not (still needs tls\_cert\_arn) | `bool` | `true` | no |
| [iam\_instance\_profile](#input\_iam\_instance\_profile) | IAM Instance Profile | `string` | `null` | no |
| [iam\_role\_policy\_statement](#input\_iam\_role\_policy\_statement) | ECS Service IAM Role policy statement | `list(any)` | `[]` | no |
| [image\_id](#input\_image\_id) | EC2 AMI id | `string` | `null` | no |
| [instance\_type](#input\_instance\_type) | EC2 instance type for ECS | `string` | `"t3.small"` | no |
| [key\_name](#input\_key\_name) | EC2 key name | `string` | `null` | no |
| [max\_size](#input\_max\_size) | Maximum number of running ECS tasks | `number` | `1` | no |
| [memory](#input\_memory) | Fargate Memory value (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-cpu-memory-error.html) | `number` | `512` | no |
| [memory\_reservation](#input\_memory\_reservation) | The soft limit (in MiB) of memory to reserve for the container | `number` | `256` | no |
| [min\_size](#input\_min\_size) | Minimum number of running ECS tasks | `number` | `1` | no |
| [name](#input\_name) | ECS app name including all required namespaces | `string` | n/a | yes |
| [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 |
| [port\_mappings](#input\_port\_mappings) | List of ports to open from a service | `any` | `[]` | no |
| [private\_subnets](#input\_private\_subnets) | VPC Private subnets to place ECS resources | `list(any)` | `[]` | no |
| [proxy\_docker\_container\_command](#input\_proxy\_docker\_container\_command) | Proxy docker container CMD | `list(string)` |[| no |
"nginx",
"-g",
"daemon off;"
]
| [proxy\_docker\_entrypoint](#input\_proxy\_docker\_entrypoint) | Proxy docker container entrypoint | `list(string)` |[| no |
"/docker-entrypoint.sh"
]
| [proxy\_docker\_image\_name](#input\_proxy\_docker\_image\_name) | Nginx proxy docker image name | `string` | `"nginx"` | no |
| [public](#input\_public) | It's publicity accessible application | `bool` | `true` | no |
| [public\_ecs\_service](#input\_public\_ecs\_service) | It's publicity accessible service | `bool` | `false` | no |
| [public\_subnets](#input\_public\_subnets) | VPC Public subnets to place ECS resources | `list(any)` | `[]` | no |
| [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 |
| [root\_block\_device\_size](#input\_root\_block\_device\_size) | EBS root block device size in GB | `number` | `"50"` | no |
| [root\_block\_device\_type](#input\_root\_block\_device\_type) | EBS root block device type | `string` | `"gp2"` | no |
| [root\_domain\_name](#input\_root\_domain\_name) | Domain name of AWS Route53 Zone | `string` | `""` | no |
| [route53\_health\_check\_enabled](#input\_route53\_health\_check\_enabled) | AWS Route53 health check is enabled | `bool` | `false` | no |
| [schedules](#input\_schedules) | Map of autoscaling group schedule to create | `map(any)` | `{}` | no |
| [security\_groups](#input\_security\_groups) | Security groups to assign to ECS Fargate task/ECS EC2 | `list(any)` | `[]` | no |
| [shared\_memory\_size](#input\_shared\_memory\_size) | Size of the /dev/shm shared memory in MB | `number` | `0` | no |
| [sidecar\_container\_definitions](#input\_sidecar\_container\_definitions) | Sidecar container definitions for ECS task | `any` | `[]` | no |
| [sns\_service\_subscription\_endpoint](#input\_sns\_service\_subscription\_endpoint) | You can use different endpoints, such as email, Pagerduty, Slack, etc. | `string` | `"[email protected]"` | no |
| [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 |
| [ssm\_global\_secret\_path](#input\_ssm\_global\_secret\_path) | AWS SSM root path to global environment secrets like /dev/global | `string` | `null` | no |
| [ssm\_secret\_path](#input\_ssm\_secret\_path) | AWS SSM root path to environment secrets of an app like /dev/app1 | `string` | `null` | no |
| [tls\_cert\_arn](#input\_tls\_cert\_arn) | TLS certificate ARN | `string` | `null` | no |
| [tmpfs\_container\_path](#input\_tmpfs\_container\_path) | Path where tmpfs shm would be mounted | `string` | `"/tmp/"` | no |
| [tmpfs\_enabled](#input\_tmpfs\_enabled) | TMPFS support for non-Fargate deployments | `bool` | `false` | no |
| [tmpfs\_mount\_options](#input\_tmpfs\_mount\_options) | Options for the mount of the ram disk. noatime by default to speed up access | `list(string)` |[| no |
"noatime"
]
| [tmpfs\_size](#input\_tmpfs\_size) | Size of the tmpfs in MB | `number` | `1024` | no |
| [volumes](#input\_volumes) | Amazon data volumes for ECS Task (efs/FSx/Docker volume/Bind mounts) | `list(any)` | `[]` | no |
| [vpc\_id](#input\_vpc\_id) | AWS VPC ID | `string` | n/a | yes |
| [web\_proxy\_docker\_container\_port](#input\_web\_proxy\_docker\_container\_port) | Proxy docker container port | `number` | `80` | no |
| [web\_proxy\_docker\_image\_tag](#input\_web\_proxy\_docker\_image\_tag) | Nginx proxy docker image tag | `string` | `"1.19.2-alpine"` | no |
| [web\_proxy\_enabled](#input\_web\_proxy\_enabled) | Nginx proxy enabled | `bool` | `false` | no |
| [zone\_id](#input\_zone\_id) | AWS Route53 Zone ID | `string` | `""` | no |## Outputs
| Name | Description |
|------|-------------|
| [alb\_arn](#output\_alb\_arn) | ARN of the ALB (if ALB is created) |
| [alb\_dns\_name](#output\_alb\_dns\_name) | Name of the ALB DNS record (if ALB is created) |
| [alb\_dns\_zone](#output\_alb\_dns\_zone) | Zone ID of the ALB DNS record (if ALB is created) |
| [cloudwatch\_event\_rule\_id](#output\_cloudwatch\_event\_rule\_id) | ID of the Cloudwatch event rule for ECS Scheduled Task |
| [cloudwatch\_log\_group](#output\_cloudwatch\_log\_group) | n/a |
| [ec2\_dns\_name](#output\_ec2\_dns\_name) | Public DNS name of the EC2 instance (if EC2 is used) |
| [efs\_mount\_target](#output\_efs\_mount\_target) | DNS name of the EFS mount target (if EFS is created) |
| [eips](#output\_eips) | List of EIPs associated with the EC2 instances (if EC2 is used) |
| [public\_ip](#output\_public\_ip) | Public IP of the EC2 instance (if EC2 is used) |
| [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) |
| [this\_target\_group\_arn](#output\_this\_target\_group\_arn) | n/a |
| [this\_task\_definition\_arn](#output\_this\_task\_definition\_arn) | n/a |