Post on 13-Jul-2015
Amazon EC2 Container Service(ECS) (@shot6, ohtani@amazon.co.jp)
2
EC2 Container Service (ECS)
3
ECS
Amazon ECS = APIEC2Docker/ Docker EC2
4
ECS
Docker
DockerECS agent(Docker) OSDocker
AWS
VPCELBRDSEIPAutoScaling GUI
5
ECS EC2/EBS
Limited Preview AWS :
US-East-1 (N.Virginia)
6
ECS
7
ECS
Container Instance Cluster Task/Task Denition Container : Docker
8
Container Instance
EC2(VPC) Docker ECS agent
9
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
11
Cluster
Container Instance
12
Task
Unit of Work Container Instance Task Definition
Task JSON
13
Task Definition [ { "environment": [], "name": "sleep", "image": "busybox", "cpu": 10, "portMappings": [], "entryPoint": [ "/bin/sh" ], "memory": 10, "command": [ "sleep", "360" ], "essential": true } ]
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
15
ECS AWS
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
17
ECS
18
Cluster Container Instance
Container Container
Container Container
Subnet-1(Network ACL)A
Docker Hub
Private Repository
Container
19
ECS AWSDockerAWS
20
ECS Container Container
Container Container
EC2 VPC ELB Auto Scaling
Route53 Direct Connect
RDS ElastiCache
DynamoDB Redshift
S3 Glacier
EBS
ETS SES SNS
CloudSearch SQS
IAM
OpsWorks
CloudTrail
CloudFormation
CloudWatch
Beanstalk
21
AWS ECS command line
mypc:tmp ohtani$ aws ecs ()
22
Cluster EC2Container Instance Task Definition Task
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" } }
24
EC2Container Instance
amzn-ami-2014.09.1-amazon-ecs-optimized-rc1 (ami-a47214cc) CoreOS
ECS #!/bin/bash echo ECS_CLUSTER=my>> /etc/ecs/ecs.config
IAM ProfileecsECS agent
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
AZContainer InstanceCluster
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
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
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
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
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
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" ] }
32
Task
2 ECS
aws ecs run-task
aws ecs start-task --container-instances xxx
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" } ] } ] }
34
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" } ] } ] }
36
(as of preview)
ECS describe-container-instances, describe-tasks,
start-task ECS
37
Task
mypc:tmp ohtani$ aws ecs stop-task --task 33357683-a636-46e9-98fe-c72330e2b106 --cluster my --region us-east-1
38
mypc:tmp ohtani$ aws ecs deregister-container-instance --cluster my --container-instance 077e74e6-bffe-407a-bdc4-07d0dd0e3828 --region us-east-1
39
AMI(CoreOS) https://coreos.com/docs/running-coreos/cloud-providers/ecs/
CloudFormationECS ELB CloudWatch
CloudWatch CloudWatch Logs
Elastic IP
40
Just getting started
41
ECSEC2DockerContainer as a Service
Docker AWS
http://aws.amazon.com/ecs/preview/ AWS
42