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を起動して先ほど作ったクラスタとしてコンテナを作っていきます
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が出揃ったところでコンテナが今アツイです。この流れにのって弊社でも積極的に使っていきたいです