Skip to content

Files

Latest commit

597dd24 · Jun 14, 2021

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
Mar 19, 2020
Jun 14, 2021
Mar 19, 2020

Contents

Purpose

AWS ECS task definitions allow for multiple containers to be defined. For example, the following task definition contains two container definitions:

{
  "containerDefinitions": [
    {
      "name": "wordpress",
      "links": [
        "mysql"
      ],
      "image": "wordpress",
      "essential": true,
      "portMappings": [
        {
          "containerPort": 80,
          "hostPort": 80
        }
      ],
      "memory": 500,
      "cpu": 10
    },
    {
      "environment": [
        {
          "name": "MYSQL_ROOT_PASSWORD",
          "value": "password"
        }
      ],
      "name": "mysql",
      "image": "mysql",
      "cpu": 10,
      "memory": 500,
      "essential": true
    }
  ],
  "family": "hello_world"
}

Due to some known limitations with the HashiCorp Configuration Language (HCL), the merge module allows for combining multiple container definitions. To see an example of the merge module in use, see the usage section.

Usage

The task definition defined in the purpose section can be created using a combination of the terraform-aws-ecs-task-definition module and the merge module like so:

module "wordpress" {
  source = "mongodb/ecs-task-definition/aws"

  name = "wordpress"

  links = [
    "mysql",
  ]

  image     = "wordpress"
  essential = true

  portMappings = [
    {
      containerPort = 80
      hostPort      = 80
    },
  ]

  memory = 500
  cpu    = 10

  register_task_definition = false
}

module "mysql" {
  source = "mongodb/ecs-task-definition/aws"

  environment = [
    {
      name  = "MYSQL_ROOT_PASSWORD"
      value = "password"
    },
  ]

  name      = "mysql"
  image     = "mysql"
  cpu       = 10
  memory    = 500
  essential = true

  register_task_definition = false
}

module "merged" {
  source = "mongodb/ecs-task-definition/aws//modules/merge"

  container_definitions = [
    "${module.wordpress.container_definitions}",
    "${module.mysql.container_definitions}",
  ]
}

resource "aws_ecs_task_definition" "hello_world" {
  container_definitions = "${module.merged.container_definitions}"
  family                = "hello_world"
}

Note: The register_task_definition flag for both task definitions is required; otherwise a task definition containing a single container definition is registered created for both the wordpress and mysql services.

Providers

No provider.

Inputs

Name Description Type Default Required
container_definitions A list of container definitions in JSON format that describe the different containers that make up your task list [] no

Outputs

Name Description
container_definitions A list of container definitions in JSON format that describe the different containers that make up your task