Getting Started with Amazon ECS

STEP 1: Creating a Cluster

First step is creating a cluster. This can be done with CLI or Amazon Console. To do in CLI, run

aws ecs create-cluster --cluster CLUSTER_NAME

create amazon ecs cluster

If you login to Amazon ECS console, you will see newly created cluster.

Amazon ECS cluster console

If you want to delete cluster, you can do with command line

aws ecs delete-cluster --cluster CLUSTER_NAME

STEP 2: Creating Task Definition

Task definition tell Amazon ECS what docker image to run. It is like a blue print of task, not actual task. Once as Task Definition is created, you create Task based on it.

Create a file “task-def.json” with following content.

{
  "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": "serverok_blog"
}

Now run

aws ecs register-task-definition --cli-input-json file:///path/to/task-def.json

You will see something like

Amazon ECS register task definition

You will see newly created Task Definition under Amazon AWS Console > ECS > Task Definitions.

Updating Task Definition

To change Task Definition, edit the JSON file. Run exactly same command used to register the task definition, it will update the Task Definition.

In our Task Definition, we used password for MySQL “password”, let change it to secure password, run the command again to update Task Definition.

boby@hon-pc-01:~$ aws ecs register-task-definition --cli-input-json file:///home/boby/task-def.json
{
    "taskDefinition": {
        "family": "serverok_blog",
        "containerDefinitions": [
            {
                "links": [
                    "mysql"
                ],
                "essential": true,
                "memory": 500,
                "environment": [],
                "cpu": 10,
                "name": "wordpress",
                "mountPoints": [],
                "image": "wordpress",
                "volumesFrom": [],
                "portMappings": [
                    {
                        "containerPort": 80,
                        "protocol": "tcp",
                        "hostPort": 80
                    }
                ]
            },
            {
                "essential": true,
                "memory": 500,
                "environment": [
                    {
                        "name": "MYSQL_ROOT_PASSWORD",
                        "value": "superman123"
                    }
                ],
                "cpu": 10,
                "name": "mysql",
                "mountPoints": [],
                "image": "mysql",
                "volumesFrom": [],
                "portMappings": []
            }
        ],
        "taskDefinitionArn": "arn:aws:ecs:us-west-2:075272784012:task-definition/serverok_blog:3",
        "volumes": [],
        "revision": 3,
        "status": "ACTIVE"
    }
}
boby@hon-pc-01:~$ 

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *