ecs for docker meetup #4
TRANSCRIPT
-
Amazon EC2 Container Service(ECS) (@shot6, [email protected])
-
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