Contenu connexe
Similaire à ECS for Docker Meetup #4 (20)
Plus de Shinpei Ohtani (17)
ECS for Docker Meetup #4
- 3. 3
ECSとは?
• Amazon ECS = コンテナ管理理サービス
– シンプルなAPIで、EC2クラスタ上にDockerコンテナを起動/管理理
– Docker管理理で⾯面倒な所を取り除くために出来たサービス
– EC2インスタンス上に複数コンテナをホストすることが可能
– クラスタの管理理や構成管理理についての運⽤用が不不要
- 10. 10
ECS agent
• オープンソースのエージェント(ASLv2)
• https://github.com/aws/amazon-‐‑‒ecs-‐‑‒agent
• Go⾔言語で書かれています
• というのも、こいつもDockerで動きます
• Docker Hubにも登録されてます。
– https://registry.hub.docker.com/u/amazon/amazon-‐‑‒ecs-‐‑‒
agent/
– docker pull amazon/amazon-‐‑‒ecs-‐‑‒agent
- 12. 12
Task
• Unit of Work
• 関係するコンテナの集合
• Container Instance上で稼働
• Task Definition
– Taskの定義
– JSON
- 14. 14
Cluster
Container Instance Container Instance
Container Instance Container Instance
Container Container
Container Container
Container Container
Container Container
Container Container
Container Container
Container Container
Container Container
Task Definition
JSON
Task
(group of
container)
ECS
Control
Plane
ECS
Agent
ECS
Agent
ECS
Agent
ECS
Agent
コンテナの状態管理理
(利利⽤用者は意識識しない)
- 16. 16
Cluster
Container Instance
Container Container
Container Container
Subnet-1(Network ACL)
Cluster
Container Instance
Container Container
Container Container
セキュリティグループA
セキュリティグループB
Cluster
Container Instance
Container Container
Container Container
Subnet-2(Network ACL)
Cluster
Container Instance
Container Container
Container Container
セキュリティグループC
セキュリティグループD
- 23. 23
Clusterを作成
mypc:~ ohtani$ aws ecs create-cluster --cluster-name my --region us-
east-1
{
"cluster": {
"clusterName": "my",
"status": "ACTIVE",
"clusterArn": "arn:aws:ecs:us-east-1:myaccount:cluster/my"
}
}
- 25. 25
というわけで
aws ec2 run-instances --image-id ami-a47214cc --instance-
type m3.large --associate-public-ip-address –count 4 --key-
name yourkey--subnet-id subnet-03dd1f28 --security-
group-ids sg-8d6c9fe9 --iam-instance-profile Name="ecs"
--user-data file:///pass_to/ecs.sh --region us-east-1
ecs.sh
#!/bin/bash
echo ECS_CLUSTER=my >> /etc/ecs/ecs.config
もちろんマルチAZにあるContainer InstanceをClusterに含める事も可能
- 26. 26
クラスターを確認してみる
mypc:tmp ohtani$ aws ecs list-clusters --region us-east-1
{
"clusterArns": [
"arn:aws:ecs:us-east-1:myaccount:cluster/my",
"arn:aws:ecs:us-east-1:myaccount:cluster/default"
]
}
- 27. 27
Container Instanceを確認してみる
mypc:tmp ohtani$ aws ecs list-container-instances --cluster my --region us-east-1
{
"containerInstanceArns": [
"arn:aws:ecs:us-east-1:myaccount:container-instance/077e74e6-bffe-407a-
bdc4-07d0dd0e3828",
"arn:aws:ecs:us-east-1:myaccount:container-instance/62b30eb7-a72c-4a48-
a973-9b0676d831b8",
"arn:aws:ecs:us-east-1:myaccount:container-instance/
ee086a69-4c7d-497e-9307-fe6f21500438",
"arn:aws:ecs:us-east-1:myaccount:container-instance/
fc8a26ef-0593-431e-9721-5d5c8dbde21d"
]
}
- 28. 28
Container Instanceの状況を調べる
mypc:tmp ohtani$ aws ecs describe-container-instances --cluster my --container-instances 077e74e6-bffe-407a-
bdc4-07d0dd0e3828 --region us-east-1
{
"failures": [],
"containerInstances": [
{
"status": "ACTIVE",
"registeredResources": [
現状利用中のリソース(CPU, Memory, Port)
],
"ec2InstanceId": "i-7b196697",
"agentConnected": true,
"containerInstanceArn": "arn:aws:ecs:us-east-1:myaccount:container-instance/077e74e6-bffe-407a-bdc4-07d0dd0e3828",
"remainingResources": [
現状利用可能なリソース(CPU, Memory, Port)
]
}
]
}
- 29. 29
Task Defintionを作成する
[
{
"environment": [
{ "name" : "WORDPRESS_DB_USER", "value" : "wpuser" },
{ "name" : "WORDPRESS_DB_PASSWORD", "value" : "wppass" },
{ "name" : "WORDPRESS_DB_NAME", "value" : "wpdb" }
],
"name": "wp",
"image": "wordpress:latest",
"cpu": 100,
"portMappings": [
{
"containerPort": 80,
"hostPort": 80
}
],
"links": ["mysql:mysql"],
"memory": 1024,
"essential": false
},
{
"environment": [
{ "name" : "MYSQL_ROOT_PASSWORD", "value" : "rootwppass" },
{ "name" : "MYSQL_USER", "value" : "wpuser" },
{ "name" : "MYSQL_PASSWORD", "value" : "wppass" },
{ "name" : "MYSQL_DATABASE", "value" : "wpdb" }
],
"name": "mysql”,
"image": "mysql”,
"cpu": 200,
"memory": 2048,
"essential": true
}
]
他の項目だと
・entryPoint(ENTRYPOINT)
・command(CMD)
- 30. 30
Task Definitionの登録
mypc:tmp ohtani$ aws ecs register-task-definition --family wp --container-
definitions file://pass_to/wp.json --region us-east-1
{
"taskDefinition": {
"taskDefinitionArn": "arn:aws:ecs:us-east-1:myaccount:task-definition/wp:1",
"containerDefinitions": [
(Task Definitionの内容)
],
"family": "wp",
"revision": 1
}
}
- 31. 31
Task Definitionの確認
mypc:tmp ohtani$ aws ecs list-task-definitions --
region us-east-1
{
"taskDefinitionArns": [
"arn:aws:ecs:us-east-1:myaccount:task-definition/node-hello:1",
"arn:aws:ecs:us-east-1:myaccount:task-definition/sleep360:1",
"arn:aws:ecs:us-east-1:myaccount:task-definition/wp:1"
]
}
- 33. 33
run-task
mypc:tmp ohtani$ aws ecs run-task --cluster my --task-definition wp:1 --count 1 --region us-east-1
{
"tasks": [
{
"taskArn": "arn:aws:ecs:us-east-1:myaccount:task/b6d7821a-d3a6-4105-a2ca-454a36425ae1",
“overrides”: { (コンテナオーバーライド) },
"lastStatus": "PENDING",
"containerInstanceArn": "arn:aws:ecs:us-east-1:myaccount:container-instance/ee086a69-4c7d-497e-9307-fe6f21500438",
"desiredStatus": "RUNNING",
"taskDefinitionArn": "arn:aws:ecs:us-east-1:myaccount:task-definition/wp:1",
"containers": [
{
"containerArn": "arn:aws:ecs:us-east-1:myaccount:container/3a86f627-15b3-4122-af26-4b1477f1ec19",
"taskArn": "arn:aws:ecs:us-east-1:myaccount:task/b6d7821a-d3a6-4105-a2ca-454a36425ae1",
"lastStatus": "PENDING",
"name": "wp"
},
{
"containerArn": "arn:aws:ecs:us-east-1:myaccount:container/86c3400c-4b61-4414-a2bf-e00f5c949935",
"taskArn": "arn:aws:ecs:us-east-1:myaccount:task/b6d7821a-d3a6-4105-a2ca-454a36425ae1",
"lastStatus": "PENDING",
"name": "mysql"
}
]
} ] }
- 35. 35
start-task(Taskを特定コンテナインスタンスで起動)
mypc:tmp ohtani$ aws ecs start-task --cluster my --container-instances 077e74e6-bffe-407a-bdc4-07d0dd0e3828 --task-definition wp:1 --
region us-east-1
{ "failures": [],
"tasks": [
{
"taskArn": "arn:aws:ecs:us-east-1:myaccount:task/c63ee7f1-34a2-4280-89e2-31799a5ee1fb",
“overrides”: { (コンテナをオーバライドするかどうかの設定) },
"lastStatus": "PENDING",
"containerInstanceArn": "arn:aws:ecs:us-east-1:myaccound:container-instance/077e74e6-bffe-407a-bdc4-07d0dd0e3828",
"desiredStatus": "RUNNING",
"taskDefinitionArn": "arn:aws:ecs:us-east-1:myaccount:task-definition/wp:1",
"containers": [
{ "containerArn": "arn:aws:ecs:us-east-1:myaccount:container/37e89b7c-7f33-4891-a1f2-155cb3ff3d37",
"taskArn": "arn:aws:ecs:us-east-1:myaccount:task/c63ee7f1-34a2-4280-89e2-31799a5ee1fb",
"lastStatus": "PENDING",
"name": "wp"
},
{ "containerArn": "arn:aws:ecs:us-east-1:myaccount:container/08ba51bd-e9fd-4bb8-8b5d-73baaf099130",
"taskArn": "arn:aws:ecs:us-east-1:myaccount:task/c63ee7f1-34a2-4280-89e2-31799a5ee1fb",
"lastStatus": "PENDING",
"name": "mysql"
}
]
} ] }