Module: ecs-web-app
A Terraform module which implements a web app on ECS and supporting AWS resources.
Usage
For a complete example, see examples/complete.
For automated tests of the complete example using bats and Terratest (which test and deploy the example on AWS), see test.
Other examples:
- without authentication - without authentication
- with Google OIDC authentication - with Google OIDC authentication
- with Cognito authentication - with Cognito authentication
module "default_backend_web_app" {
source = "cloudposse/ecs-web-app/aws"
# Cloud Posse recommends pinning every module to a specific version
# version = "x.x.x"
namespace = "eg"
stage = "testing"
name = "appname"
vpc_id = module.vpc.vpc_id
alb_ingress_unauthenticated_listener_arns = module.alb.listener_arns
alb_ingress_unauthenticated_listener_arns_count = 1
aws_logs_region = "us-east-2"
ecs_cluster_arn = aws_ecs_cluster.default.arn
ecs_cluster_name = aws_ecs_cluster.default.name
ecs_security_group_ids = [module.vpc.vpc_default_security_group_id]
ecs_private_subnet_ids = module.subnets.private_subnet_ids
alb_ingress_healthcheck_path = "/healthz"
alb_ingress_unauthenticated_paths = ["/*"]
codepipeline_enabled = false
container_environment = [
{
name = "COOKIE"
value = "cookiemonster"
},
{
name = "PORT"
value = "80"
}
]
}
Variables
Required Variables
alb_security_group(string) requiredSecurity group of the ALB
ecs_cluster_arn(string) requiredThe ECS Cluster ARN where ECS Service will be provisioned
ecs_private_subnet_ids(list(string)) requiredList of Private Subnet IDs to provision ECS Service onto if
var.network_mode = "awsvpc"vpc_id(string) requiredThe VPC ID where resources are created
Optional Variables
additional_lbsoptionalList of additional load balancer configurations. Each config should specify container_name (optional), container_port (optional, defaults to main container_port), and target_group_arn
Type:
list(object({
container_name = optional(string)
container_port = optional(number)
target_group_arn = string
}))Default value:
[ ]alb_arn_suffix(string) optionalARN suffix of the ALB for the Target Group
Default value:
""alb_container_name(string) optionalThe name of the container to associate with the ALB. If not provided, the generated container will be used
Default value:
nullalb_ingress_authenticated_hosts(list(string)) optionalAuthenticated hosts to match in Hosts header
Default value:
[ ]alb_ingress_authenticated_listener_arns(list(string)) optionalA list of authenticated ALB listener ARNs to attach ALB listener rules to
Default value:
[ ]alb_ingress_authenticated_listener_arns_count(number) optionalThe number of authenticated ARNs in
alb_ingress_authenticated_listener_arns. This is necessary to work around a limitation in Terraform where counts cannot be computedDefault value:
0alb_ingress_authenticated_paths(list(string)) optionalAuthenticated path pattern to match (a maximum of 1 can be defined)
Default value:
[ ]alb_ingress_enable_default_target_group(bool) optionalIf true, create a default target group for the ALB ingress
Default value:
truealb_ingress_health_check_healthy_threshold(number) optionalThe number of consecutive health checks successes required before healthy
Default value:
2alb_ingress_health_check_interval(number) optionalThe duration in seconds in between health checks
Default value:
15alb_ingress_health_check_matcher(string) optionalThe HTTP response codes to indicate a healthy check
Default value:
"200-399"alb_ingress_health_check_timeout(number) optionalThe amount of time to wait in seconds before failing a health check request
Default value:
10alb_ingress_health_check_unhealthy_threshold(number) optionalThe number of consecutive health check failures required before unhealthy
Default value:
2alb_ingress_healthcheck_path(string) optionalThe path of the healthcheck which the ALB checks
Default value:
"/"alb_ingress_healthcheck_protocol(string) optionalThe protocol to use to connect with the target. Defaults to
HTTP. Not applicable whentarget_typeislambdaDefault value:
"HTTP"alb_ingress_listener_authenticated_priority(number) optionalThe priority for the rules with authentication, between 1 and 50000 (1 being highest priority). Must be different from
alb_ingress_listener_unauthenticated_prioritysince a listener can't have multiple rules with the same priorityDefault value:
300alb_ingress_listener_unauthenticated_priority(number) optionalThe priority for the rules without authentication, between 1 and 50000 (1 being highest priority). Must be different from
alb_ingress_listener_authenticated_prioritysince a listener can't have multiple rules with the same priorityDefault value:
1000alb_ingress_load_balancing_algorithm_type(string) optionalDetermines how the load balancer selects targets when routing requests. Only applicable for Application Load Balancer Target Groups. The value is round_robin or least_outstanding_requests. The default is round_robin.
Default value:
"round_robin"alb_ingress_protocol(string) optionalThe protocol for the created ALB target group (if target_group_arn is not set). One of
HTTP,HTTPS. Defaults toHTTP.Default value:
"HTTP"alb_ingress_protocol_version(string) optionalThe protocol version. One of
HTTP1,HTTP2,GRPC. Only applicable when protocol is HTTP or HTTPS. Specify GRPC to send requests to targets using gRPC. Specify HTTP2 to send requests to targets using HTTP/2. The default isHTTP1, which sends requests to targets using HTTP/1.1Default value:
"HTTP1"alb_ingress_target_group_arn(string) optionalExisting ALB target group ARN. If provided, set
alb_ingress_enable_default_target_grouptofalseto disable creation of the default target groupDefault value:
""alb_ingress_target_type(string) optionalTarget type for the ALB ingress. One of
ip,instance,lambdaorcontainer. Defaults toip, for bridge networking mode should beinstanceDefault value:
"ip"alb_ingress_unauthenticated_hosts(list(string)) optionalUnauthenticated hosts to match in Hosts header
Default value:
[ ]alb_ingress_unauthenticated_listener_arns(list(string)) optionalA list of unauthenticated ALB listener ARNs to attach ALB listener rules to
Default value:
[ ]alb_ingress_unauthenticated_listener_arns_count(number) optionalThe number of unauthenticated ARNs in
alb_ingress_unauthenticated_listener_arns. This is necessary to work around a limitation in Terraform where counts cannot be computedDefault value:
0alb_ingress_unauthenticated_paths(list(string)) optionalUnauthenticated path pattern to match (a maximum of 1 can be defined)
Default value:
[ ]alb_stickiness_cookie_duration(number) optionalThe time period, in seconds, during which requests from a client should be routed to the same target. After this time period expires, the load balancer-generated cookie is considered stale. The range is 1 second to 1 week (604800 seconds). The default value is 1 day (86400 seconds)
Default value:
86400alb_stickiness_enabled(bool) optionalBoolean to enable / disable
stickiness. Default istrueDefault value:
truealb_stickiness_type(string) optionalThe type of sticky sessions. The only current possible value is
lb_cookieDefault value:
"lb_cookie"alb_target_group_alarms_3xx_threshold(number) optionalThe maximum number of 3XX HTTPCodes in a given period for ECS Service
Default value:
25alb_target_group_alarms_4xx_threshold(number) optionalThe maximum number of 4XX HTTPCodes in a given period for ECS Service
Default value:
25alb_target_group_alarms_5xx_threshold(number) optionalThe maximum number of 5XX HTTPCodes in a given period for ECS Service
Default value:
25alb_target_group_alarms_alarm_actions(list(string)) optionalA list of ARNs (i.e. SNS Topic ARN) to execute when ALB Target Group alarms transition into an ALARM state from any other state
Default value:
[ ]alb_target_group_alarms_enabled(bool) optionalA boolean to enable/disable CloudWatch Alarms for ALB Target metrics
Default value:
falsealb_target_group_alarms_evaluation_periods(number) optionalThe number of periods to analyze for ALB CloudWatch Alarms
Default value:
1alb_target_group_alarms_insufficient_data_actions(list(string)) optionalA list of ARNs (i.e. SNS Topic ARN) to execute when ALB Target Group alarms transition into an INSUFFICIENT_DATA state from any other state
Default value:
[ ]alb_target_group_alarms_ok_actions(list(string)) optionalA list of ARNs (i.e. SNS Topic ARN) to execute when ALB Target Group alarms transition into an OK state from any other state
Default value:
[ ]alb_target_group_alarms_period(number) optionalThe period (in seconds) to analyze for ALB CloudWatch Alarms
Default value:
300alb_target_group_alarms_response_time_threshold(number) optionalThe maximum ALB Target Group response time
Default value:
0.5assign_public_ip(bool) optionalAssign a public IP address to the ENI (Fargate launch type only). Valid values are
trueorfalse. DefaultfalseDefault value:
falseauthentication_cognito_scope(string) optionalCognito scope, which should be a space separated string of requested scopes (see https://openid.net/specs/openid-connect-core-1_0.html#ScopeClaims)
Default value:
nullauthentication_cognito_user_pool_arn(string) optionalCognito User Pool ARN
Default value:
""authentication_cognito_user_pool_client_id(string) optionalCognito User Pool Client ID
Default value:
""authentication_cognito_user_pool_domain(string) optionalCognito User Pool Domain. The User Pool Domain should be set to the domain prefix (
xxx) instead of full domain (https://xxx.auth.us-west-2.amazoncognito.com)Default value:
""authentication_oidc_authorization_endpoint(string) optionalOIDC Authorization Endpoint
Default value:
""authentication_oidc_client_id(string) optionalOIDC Client ID
Default value:
""authentication_oidc_client_secret(string) optionalOIDC Client Secret
Default value:
""authentication_oidc_issuer(string) optionalOIDC Issuer
Default value:
""authentication_oidc_scope(string) optionalOIDC scope, which should be a space separated string of requested scopes (see https://openid.net/specs/openid-connect-core-1_0.html#ScopeClaims, and https://developers.google.com/identity/protocols/oauth2/openid-connect#scope-param for an example set of scopes when using Google as the IdP)
Default value:
nullauthentication_oidc_token_endpoint(string) optionalOIDC Token Endpoint
Default value:
""authentication_oidc_user_info_endpoint(string) optionalOIDC User Info Endpoint
Default value:
""authentication_type(string) optionalAuthentication type. Supported values are
COGNITOandOIDCDefault value:
""autoscaling_dimension(string) optionalDimension to autoscale on (valid options: cpu, memory)
Default value:
"memory"autoscaling_enabled(bool) optionalA boolean to enable/disable Autoscaling policy for ECS Service
Default value:
falseautoscaling_max_capacity(number) optionalMaximum number of running instances of a Service
Default value:
2autoscaling_min_capacity(number) optionalMinimum number of running instances of a Service
Default value:
1autoscaling_scale_down_adjustment(number) optionalScaling adjustment to make during scale down event
Default value:
-1autoscaling_scale_down_cooldown(number) optionalPeriod (in seconds) to wait between scale down events
Default value:
300autoscaling_scale_up_adjustment(number) optionalScaling adjustment to make during scale up event
Default value:
1autoscaling_scale_up_cooldown(number) optionalPeriod (in seconds) to wait between scale up events
Default value:
60aws_logs_prefix(string) optionalCustom AWS Logs prefix. If empty name from label module will be used
Default value:
""aws_logs_region(string) optionalThe region for the AWS Cloudwatch Logs group
Default value:
nullbadge_enabled(bool) optionalGenerates a publicly-accessible URL for the projects build badge. Available as badge_url attribute when enabled
Default value:
falsebranch(string) optionalBranch of the GitHub repository, e.g.
masterDefault value:
""build_environment_variablesoptionalA list of maps, that contain the keys 'name', 'value', and 'type' to be used as additional environment variables for the build. Valid types are 'PLAINTEXT', 'PARAMETER_STORE', or 'SECRETS_MANAGER'
Type:
list(object(
{
name = string
value = string
type = string
}))Default value:
[ ]build_image(string) optionalDocker image for build environment, e.g.
aws/codebuild/docker:docker:17.09.0Default value:
"aws/codebuild/docker:17.09.0"build_timeout(number) optionalHow long in minutes, from 5 to 480 (8 hours), for AWS CodeBuild to wait until timing out any related build that does not get marked as completed
Default value:
60buildspec(string) optionalDeclaration to use for building the project. For more info
Default value:
""capacity_provider_strategiesoptionalThe capacity provider strategies to use for the service. See
capacity_provider_strategyconfiguration block: https://www.terraform.io/docs/providers/aws/r/ecs_service.html#capacity_provider_strategyType:
list(object({
capacity_provider = string
weight = number
base = number
}))Default value:
[ ]circuit_breaker_deployment_enabled(bool) optionalIf
true, enable the deployment circuit breaker logic for the serviceDefault value:
falsecircuit_breaker_rollback_enabled(bool) optionalIf
true, Amazon ECS will roll back the service if a service deployment failsDefault value:
falsecloudwatch_log_group_enabled(bool) optionalA boolean to disable cloudwatch log group creation
Default value:
truecodebuild_cache_type(string) optionalThe type of storage that will be used for the AWS CodeBuild project cache. Valid values: NO_CACHE, LOCAL, and S3. Defaults to NO_CACHE. If cache_type is S3, it will create an S3 bucket for storing codebuild cache inside
Default value:
"S3"codepipeline_build_cache_bucket_suffix_enabled(bool) optionalThe codebuild cache bucket generates a random 13 character string to generate a unique bucket name. If set to false it uses terraform-null-label's id value. It only works when cache_type is 'S3'
Default value:
truecodepipeline_build_compute_type(string) optionalCodeBuildinstance size. Possible values are:BUILD_GENERAL1_SMALLBUILD_GENERAL1_MEDIUMBUILD_GENERAL1_LARGEDefault value:
"BUILD_GENERAL1_SMALL"codepipeline_cdn_bucket_buildspec_identifier(string) optionalIdentifier for buildspec section controlling the optional CDN asset deployment.
Default value:
nullcodepipeline_cdn_bucket_encryption_enabled(bool) optionalIf set to true, enable encryption on the optional CDN asset deployment bucket
Default value:
falsecodepipeline_cdn_bucket_id(string) optionalOptional bucket for static asset deployment. If specified, the buildspec must include a secondary artifacts section which controls the files deployed to the bucket For more info
Default value:
nullcodepipeline_enabled(bool) optionalA boolean to enable/disable AWS Codepipeline. If
false, useecr_enabledto control if AWS ECR stays enabled.Default value:
truecodepipeline_s3_bucket_force_destroy(bool) optionalA boolean that indicates all objects should be deleted from the CodePipeline artifact store S3 bucket so that the bucket can be destroyed without error
Default value:
falsecommand(list(string)) optionalThe command that is passed to the container
Default value:
nullcontainer_cpu(number) optionalThe vCPU setting to control cpu limits of container. (If FARGATE launch type is used below, this must be a supported vCPU size from the table here: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-cpu-memory-error.html)
Default value:
256container_definition(string) optionalOverride the main container_definition
Default value:
""container_environmentoptionalThe environment variables to pass to the container. This is a list of maps
Type:
list(object({
name = string
value = string
}))Default value:
nullcontainer_image(string) optionalThe default container image to use in container definition
Default value:
"cloudposse/default-backend"container_memory(number) optionalThe amount of RAM to allow container to use in MB. (If FARGATE launch type is used below, this must be a supported Memory size from the table here: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-cpu-memory-error.html)
Default value:
512container_memory_reservation(number) optionalThe amount of RAM (Soft Limit) to allow container to use in MB. This value must be less than
container_memoryif setDefault value:
128container_port(number) optionalThe port number on the container bound to assigned host_port
Default value:
80container_repo_credentials(map(string)) optionalContainer repository credentials; required when using a private repo. This map currently supports a single key; "credentialsParameter", which should be the ARN of a Secrets Manager's secret holding the credentials
Default value:
nullcontainer_start_timeout(number) optionalTime duration (in seconds) to wait before giving up on resolving dependencies for a container
Default value:
30container_stop_timeout(number) optionalTime duration (in seconds) to wait before the container is forcefully killed if it doesn't exit normally on its own
Default value:
30deployment_controller_type(string) optionalType of deployment controller. Valid values are CODE_DEPLOY and ECS
Default value:
"ECS"deployment_maximum_percent(number) optionalThe upper limit of the number of tasks (as a percentage of
desired_count) that can be running in a service during a deploymentDefault value:
200deployment_minimum_healthy_percent(number) optionalThe lower limit (as a percentage of
desired_count) of the number of tasks that must remain running and healthy in a service during a deploymentDefault value:
100desired_count(number) optionalThe desired number of tasks to start with. Set this to 0 if using DAEMON Service type. (FARGATE does not suppoert DAEMON Service type)
Default value:
1docker_labels(map(string)) optionalMap of Docker labels to assign to the container
Default value:
nullecr_enabled(bool) optionalA boolean to enable/disable AWS ECR
Default value:
trueecr_image_tag_mutability(string) optionalThe tag mutability setting for the ecr repository. Must be one of:
MUTABLEorIMMUTABLEDefault value:
"IMMUTABLE"ecr_scan_images_on_push(bool) optionalIndicates whether images are scanned after being pushed to the repository (true) or not (false)
Default value:
falseecs_alarms_cpu_utilization_high_alarm_actions(list(string)) optionalA list of ARNs (i.e. SNS Topic ARN) to notify on CPU Utilization High Alarm action
Default value:
[ ]ecs_alarms_cpu_utilization_high_evaluation_periods(number) optionalNumber of periods to evaluate for the alarm
Default value:
1ecs_alarms_cpu_utilization_high_ok_actions(list(string)) optionalA list of ARNs (i.e. SNS Topic ARN) to notify on CPU Utilization High OK action
Default value:
[ ]ecs_alarms_cpu_utilization_high_period(number) optionalDuration in seconds to evaluate for the alarm
Default value:
300ecs_alarms_cpu_utilization_high_threshold(number) optionalThe maximum percentage of CPU utilization average
Default value:
80ecs_alarms_cpu_utilization_low_alarm_actions(list(string)) optionalA list of ARNs (i.e. SNS Topic ARN) to notify on CPU Utilization Low Alarm action
Default value:
[ ]ecs_alarms_cpu_utilization_low_evaluation_periods(number) optionalNumber of periods to evaluate for the alarm
Default value:
1ecs_alarms_cpu_utilization_low_ok_actions(list(string)) optionalA list of ARNs (i.e. SNS Topic ARN) to notify on CPU Utilization Low OK action
Default value:
[ ]ecs_alarms_cpu_utilization_low_period(number) optionalDuration in seconds to evaluate for the alarm
Default value:
300ecs_alarms_cpu_utilization_low_threshold(number) optionalThe minimum percentage of CPU utilization average
Default value:
20ecs_alarms_enabled(bool) optionalA boolean to enable/disable CloudWatch Alarms for ECS Service metrics
Default value:
falseecs_alarms_memory_utilization_high_alarm_actions(list(string)) optionalA list of ARNs (i.e. SNS Topic ARN) to notify on Memory Utilization High Alarm action
Default value:
[ ]ecs_alarms_memory_utilization_high_evaluation_periods(number) optionalNumber of periods to evaluate for the alarm
Default value:
1ecs_alarms_memory_utilization_high_ok_actions(list(string)) optionalA list of ARNs (i.e. SNS Topic ARN) to notify on Memory Utilization High OK action
Default value:
[ ]ecs_alarms_memory_utilization_high_period(number) optionalDuration in seconds to evaluate for the alarm
Default value:
300ecs_alarms_memory_utilization_high_threshold(number) optionalThe maximum percentage of Memory utilization average
Default value:
80ecs_alarms_memory_utilization_low_alarm_actions(list(string)) optionalA list of ARNs (i.e. SNS Topic ARN) to notify on Memory Utilization Low Alarm action
Default value:
[ ]ecs_alarms_memory_utilization_low_evaluation_periods(number) optionalNumber of periods to evaluate for the alarm
Default value:
1ecs_alarms_memory_utilization_low_ok_actions(list(string)) optionalA list of ARNs (i.e. SNS Topic ARN) to notify on Memory Utilization Low OK action
Default value:
[ ]ecs_alarms_memory_utilization_low_period(number) optionalDuration in seconds to evaluate for the alarm
Default value:
300ecs_alarms_memory_utilization_low_threshold(number) optionalThe minimum percentage of Memory utilization average
Default value:
20ecs_cluster_name(string) optionalThe ECS Cluster Name to use in ECS Code Pipeline Deployment step
Default value:
nullecs_security_group_enabled(bool) optionalWhether to create a security group for the service.
Default value:
trueecs_security_group_ids(list(string)) optionalAdditional Security Group IDs to allow into ECS Service if
var.network_mode = "awsvpc"Default value:
[ ]enable_all_egress_rule(bool) optionalA flag to enable/disable adding the all ports egress rule to the ECS security group
Default value:
trueenable_ecs_managed_tags(bool) optionalSpecifies whether to enable Amazon ECS managed tags for the tasks within the service
Default value:
falseentrypoint(list(string)) optionalThe entry point that is passed to the container
Default value:
nullexec_enabled(bool) optionalSpecifies whether to enable Amazon ECS Exec for the tasks within the service
Default value:
falseforce_new_deployment(bool) optionalEnable to force a new task deployment of the service.
Default value:
falsegithub_oauth_token(string) optionalGitHub Oauth Token with permissions to access private repositories
Default value:
""github_webhook_events(list(string)) optionalA list of events which should trigger the webhook. See a list of available events
Default value:
[
"push"
]health_check_grace_period_seconds(number) optionalSeconds to ignore failing load balancer health checks on newly instantiated tasks to prevent premature shutdown, up to 7200. Only valid for services configured to use load balancers
Default value:
0healthcheckoptionalA map containing command (string), timeout, interval (duration in seconds), retries (1-10, number of times to retry before marking container unhealthy), and startPeriod (0-300, optional grace period to wait, in seconds, before failed healthchecks count toward retries)
Type:
object({
command = list(string)
retries = number
timeout = number
interval = number
startPeriod = number
})Default value:
nullignore_changes_desired_count(bool) optionalWhether to ignore changes for desired count in the ECS service
Default value:
falseignore_changes_task_definition(bool) optionalIgnore changes (like environment variables) to the ECS task definition
Default value:
trueinit_containersoptionalA list of additional init containers to start. The map contains the container_definition (JSON) and the main container's dependency condition (string) on the init container. The latter can be one of START, COMPLETE, SUCCESS, HEALTHY, or null. If null, the init container will not be added to the depends_on list of the main container.
Type:
list(object({
container_definition = any
condition = string
}))Default value:
[ ]launch_type(string) optionalThe ECS launch type (valid options: FARGATE or EC2)
Default value:
"FARGATE"linux_parametersoptionalLinux-specific modifications that are applied to the container, such as Linux kernel capabilities. For more details, see https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_LinuxParameters.html
Type:
object({
capabilities = optional(object({
add = optional(list(string))
drop = optional(list(string))
}))
devices = optional(list(object({
containerPath = optional(string)
hostPath = optional(string)
permissions = optional(list(string))
})))
initProcessEnabled = optional(bool)
maxSwap = optional(number)
sharedMemorySize = optional(number)
swappiness = optional(number)
tmpfs = optional(list(object({
containerPath = optional(string)
mountOptions = optional(list(string))
size = number
})))
})Default value:
{ }log_driver(string) optionalThe log driver to use for the container. If using Fargate launch type, only supported value is awslogs
Default value:
"awslogs"log_retention_in_days(number) optionalThe number of days to retain logs for the log group
Default value:
90map_container_environment(map(string)) optionalThe environment variables to pass to the container. This is a map of string: {key: value}.
environmentoverridesmap_environmentDefault value:
nullmount_pointsoptionalContainer mount points. This is a list of maps, where each map should contain a
containerPathandsourceVolumeType:
list(object({
containerPath = string
sourceVolume = string
readOnly = bool
}))Default value:
[ ]network_mode(string) optionalThe network mode to use for the task. This is required to be
awsvpcforFARGATElaunch_typeornullforEC2launch_typeDefault value:
"awsvpc"nlb_cidr_blocks(list(string)) optionalA list of CIDR blocks to add to the ingress rule for the NLB container port
Default value:
[ ]nlb_container_name(string) optionalThe name of the container to associate with the NLB. If not provided, the generated container will be used
Default value:
nullnlb_container_port(number) optionalThe port number on the container bound to assigned NLB host_port
Default value:
80nlb_ingress_target_group_arn(string) optionalTarget group ARN of the NLB ingress
Default value:
""permissions_boundary(string) optionalA permissions boundary ARN to apply to the 3 roles that are created.
Default value:
""platform_version(string) optionalThe platform version on which to run your service. Only applicable for launch_type set to FARGATE. More information about Fargate platform versions can be found in the AWS ECS User Guide.
Default value:
"LATEST"poll_source_changes(bool) optionalPeriodically check the location of your source content and run the pipeline if changes are detected
Default value:
falseport_mappingsoptionalThe port mappings to configure for the container. This is a list of maps. Each map should contain "containerPort", "hostPort", and "protocol", where "protocol" is one of "tcp" or "udp". If using containers in a task with the awsvpc or host network mode, the hostPort can either be left blank or set to the same value as the containerPort
Type:
list(object({
containerPort = number
hostPort = number
protocol = string
}))Default value:
[
{
"containerPort": 80,
"hostPort": 80,
"protocol": "tcp"
}
]privileged(string) optionalWhen this variable is
true, the container is given elevated privileges on the host container instance (similar to the root user). This parameter is not supported for Windows containers or tasks using the Fargate launch type. Due to how Terraform type casts booleans in json it is required to double quote this valueDefault value:
nullpropagate_tags(string) optionalSpecifies whether to propagate the tags from the task definition or the service to the tasks. The valid values are SERVICE and TASK_DEFINITION
Default value:
nullregion(string) optionalAWS Region for S3 bucket
Default value:
nullrepo_name(string) optionalGitHub repository name of the application to be built and deployed to ECS
Default value:
""repo_owner(string) optionalGitHub Organization or Username
Default value:
""runtime_platform(list(map(string))) optionalZero or one runtime platform configurations that containers in your task may use.
Map of strings with optional keysoperating_system_familyandcpu_architecture.
Seeruntime_platformdocs https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/ecs_task_definition#runtime_platformDefault value:
[ ]secretsoptionalThe secrets to pass to the container. This is a list of maps
Type:
list(object({
name = string
valueFrom = string
}))Default value:
nullservice_registriesoptionalThe service discovery registries for the service. The maximum number of service_registries blocks is 1. The currently supported service registry is Amazon Route 53 Auto Naming Service -
aws_service_discovery_service; seeservice_registriesdocs https://www.terraform.io/docs/providers/aws/r/ecs_service.html#service_registries-1Type:
list(object({
registry_arn = string
port = optional(number)
container_name = optional(string)
container_port = optional(number)
}))Default value:
[ ]system_controls(list(map(string))) optionalA list of namespaced kernel parameters to set in the container, mapping to the --sysctl option to docker run. This is a list of maps: { namespace = "", value = ""}
Default value:
nulltask_cpu(number) optionalThe number of CPU units used by the task. If unspecified, it will default to
container_cpu. If usingFARGATElaunch typetask_cpumust match supported memory values (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html#task_size)Default value:
nulltask_memory(number) optionalThe amount of memory (in MiB) used by the task. If unspecified, it will default to
container_memory. If using Fargate launch typetask_memorymust match supported cpu value (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html#task_size)Default value:
nulltask_policy_arns(list(string)) optionalA list of IAM Policy ARNs to attach to the generated task role.
Default value:
[ ]task_role_arn(string) optionalThe ARN of IAM role that allows your Amazon ECS container task to make calls to other AWS services
Default value:
""ulimitsoptionalThe ulimits to configure for the container. This is a list of maps. Each map should contain "name", "softLimit" and "hardLimit"
Type:
list(object({
name = string
softLimit = number
hardLimit = number
}))Default value:
[ ]use_alb_security_group(bool) optionalA boolean to enable adding an ALB security group rule for the service task
Default value:
falseuse_ecr_image(bool) optionalIf true, use ECR repo URL for image, otherwise use value in container_image
Default value:
falseuse_nlb_cidr_blocks(bool) optionalA flag to enable/disable adding the NLB ingress rule to the security group
Default value:
falsevolumesoptionalTask volume definitions as list of configuration objects
Type:
list(object({
host_path = string
name = string
docker_volume_configuration = list(object({
autoprovision = bool
driver = string
driver_opts = map(string)
labels = map(string)
scope = string
}))
efs_volume_configuration = list(object({
file_system_id = string
root_directory = string
transit_encryption = string
transit_encryption_port = string
authorization_config = list(object({
access_point_id = string
iam = string
}))
}))
}))Default value:
[ ]webhook_authentication(string) optionalThe type of authentication to use. One of IP, GITHUB_HMAC, or UNAUTHENTICATED
Default value:
"GITHUB_HMAC"webhook_enabled(bool) optionalSet to false to prevent the module from creating any webhook resources
Default value:
truewebhook_filter_json_path(string) optionalThe JSON path to filter on
Default value:
"$.ref"webhook_filter_match_equals(string) optionalThe value to match on (e.g. refs/heads/{Branch})
Default value:
"refs/heads/{Branch}"webhook_target_action(string) optionalThe name of the action in a pipeline you want to connect to the webhook. The action must be from the source (first) stage of the pipeline
Default value:
"Source"
Context Variables
The following variables are defined in the context.tf file of this module and part of the terraform-null-label pattern.
context.tf file of this module and part of the terraform-null-label pattern.additional_tag_map(map(string)) optionalAdditional key-value pairs to add to each map in
tags_as_list_of_maps. Not added totagsorid.
This is for some rare cases where resources want additional configuration of tags
and therefore take a list of maps with tag key, value, and additional configuration.Required: No
Default value:
{ }attributes(list(string)) optionalID element. Additional attributes (e.g.
workersorcluster) to add toid,
in the order they appear in the list. New attributes are appended to the
end of the list. The elements of the list are joined by thedelimiter
and treated as a single ID element.Required: No
Default value:
[ ]context(any) optionalSingle object for setting entire context at once.
See description of individual variables for details.
Leave string and numeric variables asnullto use default value.
Individual variable settings (non-null) override settings in context object,
except for attributes, tags, and additional_tag_map, which are merged.Required: No
Default value:
{
"additional_tag_map": {},
"attributes": [],
"delimiter": null,
"descriptor_formats": {},
"enabled": true,
"environment": null,
"id_length_limit": null,
"label_key_case": null,
"label_order": [],
"label_value_case": null,
"labels_as_tags": [
"unset"
],
"name": null,
"namespace": null,
"regex_replace_chars": null,
"stage": null,
"tags": {},
"tenant": null
}delimiter(string) optionalDelimiter to be used between ID elements.
Defaults to-(hyphen). Set to""to use no delimiter at all.Required: No
Default value:
nulldescriptor_formats(any) optionalDescribe additional descriptors to be output in the
descriptorsoutput map.
Map of maps. Keys are names of descriptors. Values are maps of the form
\{<br/> format = string<br/> labels = list(string)<br/> \}
(Type isanyso the map values can later be enhanced to provide additional options.)
formatis a Terraform format string to be passed to theformat()function.
labelsis a list of labels, in order, to pass toformat()function.
Label values will be normalized before being passed toformat()so they will be
identical to how they appear inid.
Default is{}(descriptorsoutput will be empty).Required: No
Default value:
{ }enabled(bool) optionalSet to false to prevent the module from creating any resources
Required: NoDefault value:
nullenvironment(string) optionalID element. Usually used for region e.g. 'uw2', 'us-west-2', OR role 'prod', 'staging', 'dev', 'UAT'
Required: NoDefault value:
nullid_length_limit(number) optionalLimit
idto this many characters (minimum 6).
Set to0for unlimited length.
Set tonullfor keep the existing setting, which defaults to0.
Does not affectid_full.Required: No
Default value:
nulllabel_key_case(string) optionalControls the letter case of the
tagskeys (label names) for tags generated by this module.
Does not affect keys of tags passed in via thetagsinput.
Possible values:lower,title,upper.
Default value:title.Required: No
Default value:
nulllabel_order(list(string)) optionalThe order in which the labels (ID elements) appear in the
id.
Defaults to ["namespace", "environment", "stage", "name", "attributes"].
You can omit any of the 6 labels ("tenant" is the 6th), but at least one must be present.Required: No
Default value:
nulllabel_value_case(string) optionalControls the letter case of ID elements (labels) as included in
id,
set as tag values, and output by this module individually.
Does not affect values of tags passed in via thetagsinput.
Possible values:lower,title,upperandnone(no transformation).
Set this totitleand setdelimiterto""to yield Pascal Case IDs.
Default value:lower.Required: No
Default value:
nulllabels_as_tags(set(string)) optionalSet of labels (ID elements) to include as tags in the
tagsoutput.
Default is to include all labels.
Tags with empty values will not be included in thetagsoutput.
Set to[]to suppress all generated tags.
Notes:
The value of thenametag, if included, will be theid, not thename.
Unlike othernull-labelinputs, the initial setting oflabels_as_tagscannot be
changed in later chained modules. Attempts to change it will be silently ignored.Required: No
Default value:
[
"default"
]name(string) optionalID element. Usually the component or solution name, e.g. 'app' or 'jenkins'.
This is the only ID element not also included as atag.
The "name" tag is set to the fullidstring. There is no tag with the value of thenameinput.Required: No
Default value:
nullnamespace(string) optionalID element. Usually an abbreviation of your organization name, e.g. 'eg' or 'cp', to help ensure generated IDs are globally unique
Required: NoDefault value:
nullregex_replace_chars(string) optionalTerraform regular expression (regex) string.
Characters matching the regex will be removed from the ID elements.
If not set,"/[^a-zA-Z0-9-]/"is used to remove all characters other than hyphens, letters and digits.Required: No
Default value:
nullstage(string) optionalID element. Usually used to indicate role, e.g. 'prod', 'staging', 'source', 'build', 'test', 'deploy', 'release'
Required: NoDefault value:
nulltags(map(string)) optionalAdditional tags (e.g.
{'BusinessUnit': 'XYZ'}).
Neither the tag keys nor the tag values will be modified by this module.Required: No
Default value:
{ }tenant(string) optionalID element (Rarely used, not included by default). A customer identifier, indicating who this instance of a resource is for
Required: NoDefault value:
null
Outputs
alb_ingressAll outputs from
module.alb_ingressalb_ingress_target_group_arnALB Target Group ARN
alb_ingress_target_group_arn_suffixALB Target Group ARN suffix
alb_ingress_target_group_nameALB Target Group name
alb_target_group_cloudwatch_sns_alarmsAll outputs from
module.alb_target_group_cloudwatch_sns_alarmscloudwatch_log_groupAll outputs from
aws_cloudwatch_log_group.appcloudwatch_log_group_arnCloudwatch log group ARN
cloudwatch_log_group_nameCloudwatch log group name
codebuildAll outputs from
module.ecs_codepipelinecodebuild_badge_urlThe URL of the build badge when badge_enabled is enabled
codebuild_cache_bucket_arnCodeBuild cache S3 bucket ARN
codebuild_cache_bucket_nameCodeBuild cache S3 bucket name
codebuild_project_idCodeBuild project ID
codebuild_project_nameCodeBuild project name
codebuild_role_arnCodeBuild IAM Role ARN
codebuild_role_idCodeBuild IAM Role ID
codepipeline_arnCodePipeline ARN
codepipeline_idCodePipeline ID
codepipeline_webhook_idThe CodePipeline webhook's ID
codepipeline_webhook_urlThe CodePipeline webhook's URL. POST events to this endpoint to trigger the target
container_definitionAll outputs from
module.container_definitioncontainer_definition_jsonJSON encoded list of container definitions for use with other terraform resources such as aws_ecs_task_definition
container_definition_json_mapJSON encoded container definitions for use with other terraform resources such as aws_ecs_task_definition
ecrAll outputs from
module.ecrecr_registry_idRegistry ID
ecr_registry_urlRepository URL
ecr_repository_arnARN of ECR repository
ecr_repository_nameRegistry name
ecr_repository_urlRepository URL
ecs_alarmsAll outputs from
module.ecs_cloudwatch_sns_alarmsecs_alarms_cpu_utilization_high_cloudwatch_metric_alarm_arnECS CPU utilization high CloudWatch metric alarm ARN
ecs_alarms_cpu_utilization_high_cloudwatch_metric_alarm_idECS CPU utilization high CloudWatch metric alarm ID
ecs_alarms_cpu_utilization_low_cloudwatch_metric_alarm_arnECS CPU utilization low CloudWatch metric alarm ARN
ecs_alarms_cpu_utilization_low_cloudwatch_metric_alarm_idECS CPU utilization low CloudWatch metric alarm ID
ecs_alarms_memory_utilization_high_cloudwatch_metric_alarm_arnECS Memory utilization high CloudWatch metric alarm ARN
ecs_alarms_memory_utilization_high_cloudwatch_metric_alarm_idECS Memory utilization high CloudWatch metric alarm ID
ecs_alarms_memory_utilization_low_cloudwatch_metric_alarm_arnECS Memory utilization low CloudWatch metric alarm ARN
ecs_alarms_memory_utilization_low_cloudwatch_metric_alarm_idECS Memory utilization low CloudWatch metric alarm ID
ecs_alb_service_taskAll outputs from
module.ecs_alb_service_taskecs_cloudwatch_autoscalingAll outputs from
module.ecs_cloudwatch_autoscalingecs_cloudwatch_autoscaling_scale_down_policy_arnARN of the scale down policy
ecs_cloudwatch_autoscaling_scale_up_policy_arnARN of the scale up policy
ecs_exec_role_policy_idThe ECS service role policy ID, in the form of
role_name:role_policy_nameecs_exec_role_policy_nameECS service role name
ecs_service_arnECS Service ARN
ecs_service_nameECS Service name
ecs_service_role_arnECS Service role ARN
ecs_service_security_group_idSecurity Group ID of the ECS task
ecs_task_definition_familyECS task definition family
ecs_task_definition_revisionECS task definition revision
ecs_task_exec_role_arnECS Task exec role ARN
ecs_task_exec_role_nameECS Task role name
ecs_task_role_arnECS Task role ARN
ecs_task_role_idECS Task role id
ecs_task_role_nameECS Task role name
httpcode_elb_5xx_count_cloudwatch_metric_alarm_arnALB 5xx count CloudWatch metric alarm ARN
httpcode_elb_5xx_count_cloudwatch_metric_alarm_idALB 5xx count CloudWatch metric alarm ID
httpcode_target_3xx_count_cloudwatch_metric_alarm_arnALB Target Group 3xx count CloudWatch metric alarm ARN
httpcode_target_3xx_count_cloudwatch_metric_alarm_idALB Target Group 3xx count CloudWatch metric alarm ID
httpcode_target_4xx_count_cloudwatch_metric_alarm_arnALB Target Group 4xx count CloudWatch metric alarm ARN
httpcode_target_4xx_count_cloudwatch_metric_alarm_idALB Target Group 4xx count CloudWatch metric alarm ID
httpcode_target_5xx_count_cloudwatch_metric_alarm_arnALB Target Group 5xx count CloudWatch metric alarm ARN
httpcode_target_5xx_count_cloudwatch_metric_alarm_idALB Target Group 5xx count CloudWatch metric alarm ID
target_response_time_average_cloudwatch_metric_alarm_arnALB Target Group response time average CloudWatch metric alarm ARN
target_response_time_average_cloudwatch_metric_alarm_idALB Target Group response time average CloudWatch metric alarm ID
Dependencies
Requirements
terraform, version:>= 1aws, version:>= 5.0
Providers
aws, version:>= 5.0
Modules
| Name | Version | Source | Description |
|---|---|---|---|
alb_ingress | 0.28.0 | cloudposse/alb-ingress/aws | n/a |
alb_target_group_cloudwatch_sns_alarms | 0.17.0 | cloudposse/alb-target-group-cloudwatch-sns-alarms/aws | n/a |
container_definition | 0.58.1 | cloudposse/ecs-container-definition/aws | n/a |
ecr | 0.41.0 | cloudposse/ecr/aws | n/a |
ecs_alb_service_task | 0.78.0 | cloudposse/ecs-alb-service-task/aws | n/a |
ecs_cloudwatch_autoscaling | 0.7.5 | cloudposse/ecs-cloudwatch-autoscaling/aws | n/a |
ecs_cloudwatch_sns_alarms | 0.12.2 | cloudposse/ecs-cloudwatch-sns-alarms/aws | n/a |
ecs_codepipeline | 0.34.1 | cloudposse/ecs-codepipeline/aws | n/a |
this | 0.25.0 | cloudposse/label/null | n/a |
Resources
The following resources are used by this module:
aws_cloudwatch_log_group.app(resource)
Data Sources
The following data sources are used by this module:
aws_region.current(data source)