ecs for docker meetup #4

42
Amazon EC2 Container Service(ECS) アマゾン データサービス ジャパン株式会社 晋平(@shot6, [email protected])

Upload: shinpei-ohtani

Post on 13-Jul-2015

1.891 views

Category:

Technology


0 download

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