Terraform module for the deployment of an AWS Elastic Container Service (ECS) cluster.
- Terraform 0.11.0 or newer
- AWS provider
The cluster module provisions an ECS cluster and auto scaling group of agent instances.
| Name | Type | Required | Description |
|---|---|---|---|
cluster_label |
string | yes | Short form identifier for this cluster. |
stack_item_fullname |
string | yes | Long form descriptive name for this stack item. This value is used to create the 'application' resource tag for resources created by this stack item. |
stack_item_label |
string | yes | Short form identifier for this stack. This value is used to create the 'Name' resource tag for resources created by this stack item, and also serves as a unique key for re-use. |
| Name | Type | Required | Description |
|---|---|---|---|
subnets |
list | yes | A list of subnet IDs to launch resources in. |
vpc_id |
string | yes | ID of the target VPC. |
| Name | Type | Required | Description |
|---|---|---|---|
ami_override |
string | Custom Amazon Machine Image (AMI) to associate with the launch configuration. | |
associate_public_ip_address |
string | Flag for associating public IP addresses with instances managed by the auto scaling group. | |
ebs_optimized |
string | Flag to enable EBS optimization. | |
ebs_vol_del_on_term |
string | Default: true |
Whether the volume should be destroyed on instance termination. |
ebs_vol_device_name |
string | The name of the device to mount. | |
ebs_vol_encrypted |
string | Whether the volume should be encrypted or not. Do not use this option if you are using ebs_vol_snapshot_id as the encrypted flag will be determined by the snapshot. |
|
ebs_vol_iops |
string | Default: 2000 |
The amount of provisioned IOPS. Only utilized with ebs_vol_type of io1. |
ebs_vol_size |
string | The size of the volume in gigabytes. | |
ebs_vol_snapshot_id |
string | The Snapshot ID to mount. | |
ebs_vol_type |
string | Default: gp2 |
The type of volume. Valid values are standard, gp2 and io1. |
enable_monitoring |
string | Flag to enable detailed monitoring. | |
iam_path |
string | Default: / |
The path to the IAM resource. |
instance_based_naming_enabled |
string | Flag to enable instance-id based name tagging. Requires the AWS CLI to be installed on the instance. Currently only supports Linux based systems. | |
instance_name_prefix |
string | String to prepend instance-id based name tags with. | |
instance_tags |
map | Map of tags to add to instances. Requires the AWS CLI to be installed on the instance. Currently only supports Linux based systems. | |
instance_type |
string | yes | The EC2 instance type to associate with the launch configuration. |
key_name |
string | The SSH key pair to associate with the launch configuration. | |
logs_bucket_enabled |
string | Default: false |
Flag for enabling access to the logs bucket from the instances. |
logs_bucket_name |
string | Name of the S3 bucket for logging. | |
placement_tenancy |
string | Default: default |
The tenancy of the instance. Valid values are default or dedicated. |
root_vol_del_on_term |
string | Default: true |
Whether the volume should be destroyed on instance termination. |
root_vol_iops |
string | Default: 2000 |
The amount of provisioned IOPS. Only utilized with root_vol_type of io1. |
root_vol_size |
string | The size of the volume in gigabytes. | |
root_vol_type |
string | Default: gp2 |
The type of volume. Valid values are standard, gp2 and io1. |
security_groups |
list | Default: [] | A list of security group IDs to associate with the instances. |
spot_price |
string | The price to use for reserving spot instances. | |
user_data_override |
string | Custom instance initialization data to associate with the launch configuration. |
| Name | Type | Required | Description |
|---|---|---|---|
default_cooldown |
string | The amount of time, in seconds, after a scaling activity completes before another scaling activity can start. | |
desired_capacity |
string | The number of Amazon EC2 instances that should be running in the group. | |
enabled_metrics |
string | Default: [] | A list of metrics to collect. The allowed values are GroupMinSize, GroupMaxSize, GroupDesiredCapacity, GroupInServiceInstances, GroupPendingInstances, GroupStandbyInstances, GroupTerminatingInstances, GroupTotalInstances. |
force_delete |
string | Default: false |
Flag to allow deletion of the auto scaling group without waiting for all instances in the pool to terminate. |
hc_check_type |
string | Type of health check performed by the auto scaling group. Valid values are ELB or EC2. |
|
hc_grace_period |
string | Time allowed after an instance comes into service before checking health. | |
max_size |
string | yes | The maximum number of instances allowed by the auto scaling group. |
min_size |
string | yes | Minimum number of instance to be maintained by the auto scaling group. |
placement_group |
string | The name of the placement group into which you'll launch your instances, if any. | |
protect_from_scale_in |
string | Allows setting instance protection. The autoscaling group will not select instances with this setting for terminination during scale in events. | |
suspended_processes |
list | Default: [] | A list of processes to suspend for the AutoScaling Group. The allowed values are Launch, Terminate, HealthCheck, ReplaceUnhealthy, AZRebalance, AlarmNotification, ScheduledActions, AddToLoadBalancer. Note that if you suspend either the Launch or Terminate process types, it can prevent your autoscaling group from functioning properly. |
target_group_arns |
list | Default: [] | A list of 'aws_alb_target_group' ARNs, for use with Application Load Balancing. |
termination_policies |
list | Default: [] | A list of policies to decide how the instances in the auto scale group should be terminated. The allowed values are OldestInstance, NewestInstance, OldestLaunchConfiguration, ClosestToNextInstanceHour, Default. |
wait_for_capacity_timeout |
string | A maximum duration that Terraform should wait for ASG managed instances to become healthy before timing out. |
| Name | Type | Required | Description |
|---|---|---|---|
agent_config_override |
string | Consul agent ECS task configuration JSON. | |
agent_task_arn_override |
string | Consul agent ECS task ARN. | |
consul_dc |
string | Default: dc1 |
Consul datacenter of the specified cluster. |
registrator_config_override |
string | Registrator ECS task configuration JSON. | |
registrator_task_arn_override |
string | Registrator ECS task ARN. | |
server_config_override |
string | Consul server ECS task configuration JSON. | |
server_task_arn_override |
string | Consul server ECS task ARN. | |
server_desired_count |
string | Default: 3 |
The number of Consul server containers to run. |
service_discovery_enabled |
string | Default: false |
Flag for the deployment of Consul service discovery and configuration. |
service_registration_enabled |
string | Default: false |
Flag for the deployment of Registrator service registration. |
module "cluster" {
source = "github.com/unifio/terraform-aws-ecs?ref=master//cluster"
# Resource tags
cluster_name = "xmpl-prod"
stack_item_fullname = "Example Cluster"
stack_item_label = "xmpl"
# VPC parameters
subnets = ["subnet-aaaaaaaa","subnet-bbbbbbbb","subnet-cccccccc"]
vpc_id = "vpc-xxxxxxxx"
# LC parameters
iam_path = "/tf_managed/"
instance_based_naming_enabled = "true"
instance_type = "t2.small"
# ASG parameters
max_size = "3"
min_size = "3"
# Service discovery parameters
service_discovery_enabled = true
service_registration_enabled = true
}| Name | Type | Description |
|---|---|---|
agent_role_id |
string | ID of the ECS agent IAM role. |
cluster_id |
string | ID of the ECS cluster. |
cluster_name |
string | Name of the ECS cluster. |
consul_sg_id |
string | ID of the security group associated with the agent instances for enabling Consul HTTP communication. |
consul_target_group_arn |
string | ARN of the Consul server target group. |
sg_id |
string | ID of the security group associated with the agent instances. |
See the examples directory for a complete set of example source files.
MPL 2. See LICENSE for full details.