4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

株式会社LIGAdvent Calendar 2014

Day 19

Amazon EC2 Container Service Previewを使ってみる

Posted at

mazon EC2 Container Service Previewを使ってみる

先に発表されたawsのコンテナサービスECSのpreviewに申し込んでいたのですが、welcomeメールがきましたのでコチラのページを参考に早速触ってみます

弊社はコンテナサービスにに大注目してます

GKEの試してみたはこちら

#Create an IAM User
IAM consoleからグループを作成します

とりあえずAdministratorで作成

nextからcreate groupをクリックして完了です

AdministratorAccess-ecs-group-201412201326
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "*",
      "Resource": "*"
    }
  ]
}

ユーザーを作成します

ecs-testで作成してみます

Security Credentialsを確認してDownload Cresentialsしておきましょう

続いて先ほど作ったグループにecs-testユーザーを登録します


ecs-groupにチェックをつけてAdd to Groupsします

続いてパスワードを設定します

esc-userでコンソールにログインできることを確認しておきます

#Create an IAM Role for your Container Instances

ecs-userにecs操作のroleを設定します

Amazon EC2を選択

Custompolicyを選択して以下を入力

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": "ecs:*",
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}

nextからcreate roleします

#Create a Cluster
ecs用のcliをダウンロードしてecs-cli.zipを解凍後、

$ python ./install
#通常のcliと違うのか、今回はパスを通さずに実行します
$ aws configure から先ほど作成したユーザーの情報を登録してリージョンはus-east-1を指定します
$ aws ecs create-cluster --region us-east-1 --cluster-name MyCluster

このようなjsonが出力されます

{
    "cluster": {
        "clusterName": "MyCluster", 
        "status": "ACTIVE", 
        "clusterArn": "arn:aws:ecs:us-east-1:XXXXXXXXXXX:cluster/MyCluster"
    }
}

#Launch an Instance with the Amazon ECS AMI
EC2を起動して先ほど作ったクラスタとしてコンテナを作っていきます

コンソールから以下のAMIを探します

select後、Auto-assign PublicIPと、IAM roleとAdvanced Detailsをそれぞれ画像のように設定します。

最後に鍵を作成した後、そのままlaunchします
鍵はecs-testで作成しました 

#login ecs culster

作成したインスタンスにログインしてみます

$ ssh ec2-user@XX.165.XXX.XXX -i /path/ecs-admin.pem

できました

#Register a Task Definition

コンテナ群をタスクとして登録します
今回はwebとdbそれぞれでコンテナとして構成したwordpressのセットをタスクとして登録、実行してみます

クラスタ

$ aws ecs list-container-instances --cluster MyCluster                                
{
    "containerInstanceArns": [
        "arn:aws:ecs:us-east-1:XXXXXXXXXXX:container-instance/5a393b97-f836-4764-ac5e-cb22c27be3b3"
    ]
}

今回はテュートリアルの通り、やってみたいと思います

task.json

[
  {
    "environment": [],
    "name": "sleep",
    "image": "busybox",
    "cpu": 10,
    "portMappings": [],
    "entryPoint": [
      "/bin/sh"
    ],
    "memory": 10,
    "command": [
      "sleep",
      "360"
    ],
    "essential": true
  }
]

登録

$ aws ecs register-task-definition --family sleep360 --container-definitions file://$HOME/cli/task.json

結果

$ {
    "taskDefinition": {
        "taskDefinitionArn": "arn:aws:ec2:us-east-1:XXXXX:task-definition/sleep360:1",
        "containerDefinitions": [
            {
                "environment": [],
                "name": "sleep",
                "image": "busybox",
                "cpu": 10,
                "portMappings": [],
                "entryPoint": [
                    "/bin/sh"
                ],
                "memory": 10,
                "command": [
                    "sleep",
                    "360"
                ],
                "essential": true
            }
        ],
        "family": "sleep360",
        "revision": 1
    }
}

実行

$ ecs run-task --cluster MyCluster --task-definition sleep360:1 --count 1

結果

{
    "failures": [], 
    "tasks": [
        {
            "taskArn": "arn:aws:ecs:us-east-1:XXXXXXXXXXX:task/528df7ab-1ea8-44f6-93c2-202a236ab524", 
            "overrides": {
                "containerOverrides": [
                    {
                        "name": "sleep"
                    }
                ]
            }, 
            "lastStatus": "PENDING", 
            "containerInstanceArn": "arn:aws:ecs:us-east-1:XXXXXXXXXXX:container-instance/5a393b97-f836-4764-ac5e-cb22c27be3b3", 
            "desiredStatus": "RUNNING", 
            "taskDefinitionArn": "arn:aws:ecs:us-east-1:XXXXXXXXXXX:task-definition/sleep360:1", 
            "containers": [
                {
                    "containerArn": "arn:aws:ecs:us-east-1:XXXXXXXXXXX:container/5632e756-487e-4e41-bf55-ff4e7495d0f5", 
                    "taskArn": "arn:aws:ecs:us-east-1:XXXXXXXXXXX:task/528df7ab-1ea8-44f6-93c2-202a236ab524", 
                    "lastStatus": "PENDING", 
                    "name": "sleep"
                }
            ]
        }
    ]
}

おまけ wordpressのタスク

task.jsonを作成

[
  {
    "image": "tutum/wordpress-stackable",
    "name": "wordpress",
    "cpu": 10,
    "memory": 500,
    "essential": true,
    "links": [
      "db"
    ],
    "entryPoint": [
      "/bin/sh",
      "-c"
    ],
    "environment": [
      {
        "name": "DB_USER",
        "value": "root"
      },
      {
        "name": "DB_PASS",
        "value": "pass"
      }
    ],
    "portMappings": [
      {
        "containerPort": 80,
        "hostPort": 80
      }
    ]
  },
  {
    "image": "mysql",
    "name": "db",
    "cpu": 10,
    "memory": 500,
    "essential": true,
    "entryPoint": [
      "/entrypoint.sh"
    ],
    "environment": [
      {
        "name": "MYSQL_ROOT_PASSWORD",
        "value": "pass"
      }
    ],
    "portMappings": []
  }
]

登録

$ aws ecs register-task-definition --family wordpress --container-definitions file://$HOME/cli/task.json

結果

{
    "taskDefinition": {
        "taskDefinitionArn": "arn:aws:ecs:us-east-1:XXX:task-definition/wordpress:1", 
        "containerDefinitions": [
            {
                "environment": [
                    {
                        "name": "DB_USER", 
                        "value": "root"
                    }, 
                    {
                        "name": "DB_PASS", 
                        "value": "pass"
                    }
                ], 
                "name": "wordpress", 
                "links": [
                    "db"
                ], 
                "image": "tutum/wordpress-stackable", 
                "essential": true, 
                "portMappings": [
                    {
                        "containerPort": 80, 
                        "hostPort": 80
                    }
                ], 
                "entryPoint": [
                    "/bin/sh", 
                    "-c"
                ], 
                "memory": 10, 
                "cpu": 1
            }, 
            {
                "environment": [
                    {
                        "name": "MYSQL_ROOT_PASSWORD", 
                        "value": "pass"
                    }
                ], 
                "name": "db", 
                "image": "mysql", 
                "cpu": 10, 
                "portMappings": [], 
                "entryPoint": [
                    "/entrypoint.sh"
                ], 
                "memory": 10, 
                "essential": true
            }
        ], 
        "family": "wordpress", 
        "revision": 1
    }
}

##タスクの登録を確認して実行してみます

$ aws ecs list-task-definitions

{
    "taskDefinitionArns": [
        "arn:aws:ecs:us-east-1:XXXXXXXXXXX:task-definition/wordpress:1"
    ]
}


実行

$ aws ecs run-task --cluster MyCluster --task-definition wordpress --count 1

結果

{
    "failures": [], 
    "tasks": [
        {
            "taskArn": "arn:aws:ecs:us-east-1:XXXXXXXXXXX:task/1bb6d92b-7d69-4809-99a1-6408475ca5e2", 
            "overrides": {
                "containerOverrides": [
                    {
                        "name": "wordpress"
                    }, 
                    {
                        "name": "db"
                    }
                ]
            }, 
            "lastStatus": "PENDING", 
            "containerInstanceArn": "arn:aws:ecs:us-east-1:XXXXXXXXXXX:container-instance/5a393b97-f836-4764-ac5e-cb22c27be3b3", 
            "desiredStatus": "RUNNING", 
            "taskDefinitionArn": "arn:aws:ecs:us-east-1:XXXXXXXXXXX:task-definition/wordpress:2", 
            "containers": [
                {
                    "containerArn": "arn:aws:ecs:us-east-1:XXXXXXXXXXX:container/e11debd8-d1e7-43f1-98ea-984a78116a67", 
                    "taskArn": "arn:aws:ecs:us-east-1:XXXXXXXXXXX:task/1bb6d92b-7d69-4809-99a1-6408475ca5e2", 
                    "lastStatus": "PENDING", 
                    "name": "wordpress"
                }, 
                {
                    "containerArn": "arn:aws:ecs:us-east-1:XXXXXXXXXXX:container/528e6dda-9213-403d-b5d9-72f1b69b8588", 
                    "taskArn": "arn:aws:ecs:us-east-1:XXXXXXXXXXX:task/1bb6d92b-7d69-4809-99a1-6408475ca5e2", 
                    "lastStatus": "PENDING", 
                    "name": "db"
                }
            ]
        }
    ]
}

#まとめ

cliからでもあまり困ることなく操作できました
とりあえず触ってみただけなので、製品版がでた時に仕様が変わったりするかもしれませんが、ウォッチして追いかけてみたいです
GKE、ECSが出揃ったところでコンテナが今アツイです。この流れにのって弊社でも積極的に使っていきたいです

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?