amazon ec2 container service in action
TRANSCRIPT
Amazon EC2 Container Service in Action
Channy Yun ‒ AWS Technical Evangelist Sangpill Kim – AWS Solutions Architect
Docker Seoul Meetup
Benefits of ContainersPortable Flexible Fast Efficient
Server
Guest OS
Bins/Libs Bins/Libs
App2 App1
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
But…
Cluster management
Configuration management
Scaling
Security Availability Container sprawl
Image: RaSeLaSeD - ll Pinguino
Elastic Load Balancing
ENIs
Auto Scaling
Security Groups
IAM
Image: xmatt
Tagging
Multi-AZ
Amazon EBS
Docker 콘테이너 제작 및 배포
EC2 인스턴스를 클러스터 구성 가능
실행 시 지속적인 볼륨 유지 가능
사설 Docker 레포지터리 운영
Amazon EC2 Container Service “Docker기반 확장성과 고성능 콘테이너 관리 서비스”
주요 구성 요소
• Container Instance• Cluster • Task Definitions • Tasks• Service
Container Instance
Container Instance
…
Container Instance
Cluster
Task definition
Task
Service
주요 구성 요소
• Container Instance• Cluster • Task Definitions • Tasks• Service
! Amazon EC2 인스턴스 ! Docker 데몬 ! Amazon ECS 에이전트
https://github.com/aws/amazon-ecs-agent
주요 구성 요소
• Container Instance• Cluster • Task Definitions • Tasks• Service
! 리전 단위 (Multi-AZ) ! 자원 풀 ! Container Instances 그룹 ! 최소 시작, 동적 확장
주요 구성 요소
• Container Instance• Cluster • Task Definitions • Tasks• Service
Volume definitions
Container definitions
Shared data volume
PHP App Time of day App
Task Definition{ “family” : “my-website”,
“version” : “1.0”
“containers” : [
<<CONTAINER DEFINTIONS>>
]
}
Container Definition{ “name” : “webServer”,
“image” : “nginx:latest”
“cpu” : 512,
“memory” : 128,
“portMappings” :
[ { “containerPort” : 9443,
“hostPort” : 443 }],
“links” : [“rails”],
“essential” : true
}
!!!!!!{! "environment": [],! "name": "simple-demo",! "image": "my-demo",! "cpu": 10,! "memory": 500,! "portMappings": [! {! "containerPort": 80,! "hostPort": 80! }! ],! "mountPoints": [! {! "sourceVolume": "my-vol",! "containerPath": "/var/www/my-vol"! }! ],! "entryPoint": [! "/usr/sbin/apache2",! "-D",! "FOREGROUND"! ],! "essential": true! },!
[! {! "image": "mysql",! "name": "db",! "cpu": 10,! "memory": 500,! "essential": true,! "entryPoint": [! "/entrypoint.sh"! ],! "environment": [! {! "name": "MYSQL_ROOT_PASSWORD",! "value": "pass"! }! ],! "portMappings": []! }!]!
Essential to our Task
Create and mount volumes
Expose port 80 in container to port 80 on host
10 CPU Units (1024 is full CPU), 500 Megabytes of Memory
[! {! "image": "tutum/wordpress-stackable",! "name": "wordpress",! "cpu": 10,! "memory": 500,! "essential": true,! "links": [! "db"! ],! "entryPoint": [! "/bin/sh",! "-c"! ],! "environment": [! …! ],! "portMappings": [! {! "containerPort": 80,! "hostPort": 80! }! ]! },! ]!
From Docker Hub
Mount volume from other container
Command to exec
! !{! "name": "busybox",! "image": "busybox",! "cpu": 10,! "memory": 500,! "volumesFrom": [! {! "sourceContainer": "simple-demo"! }! ],! "entryPoint": [! "sh",! "-c"! ],! "command": [! "/bin/sh -c \"while true; do /bin/date > /var/www/my-vol/date; sleep 1; done\""! ],! "essential": false! }!
주요 구성 요소
• Container Instance• Cluster • Task Definitions • Tasks• Service
! 서비스를 위한 단위 ! 연관된 콘테이너들의 그룹 ! 콘테이너 인스턴스에서 실행
Nginx Web Server
Rails Application
MySQL Database
Log Collector
주요 구성 요소
• Container Instance• Cluster • Task Definitions • Tasks• Service
! 지속적 애플리케이션 ! 로드 밸런싱 및 상태 관리 ! 스케일-아웃 ! 신규 버전 배포/업데이트
Elastic Load Balancing
CLI를 이용한 관리 가능
$"aws"ecs"list+container+instances"–c"default"arn:aws:ecs:us*west*2:956941867282:container*instance/01be44c0*4d45*4c1f*b2ae*1fce16c35ab6<
arn:aws:ecs:us*west*2:956941867282:container*instance/1c81279b*4b39*4985*b76d*224e0385b219<
$"aws"ecs"create+cluster"default""{<<<"cluster_arn":<"arn:aws:ecs:us*west*2:956941867282:cluster/c1a329a8*ec8a*41dc*82f6*294434861bd1",<<<"cluster_name":<"default",<<<"status":<"ACTIVE"<}<
$"cat"wordpress.json"{<
<"containers"<:<[<< <{<< < <"image"<:<"tutum/wordpress*stackable",<< < <"name"<:<"wordpress",<< < <"cpu"<:<10,<< < <"memory"<:<50,<< < <"links"<:<["db"],<< < <"environment"<:<[{<"name"<:<"DB_USER",<"value"<:<"root"},<{<"name"<:<"DB_PASS",<"value"<:<
"pass"<}],<< < <"portMappings"<:<[{<"containerPort"<:<80,<"hostPort"<:<<80}]<< <},<< <{<< < <"image"<:<"mysql",<< < <"name"<:<"db",<< < <"cpu"<:<10,<< < <"memory"<:<50,<< < <"environment"<:<[{<"name"<:<"MYSQL_ROOT_PASSWORD",<"value"<:<"pass"}],<< <}<<]<
}<
$"aws"register+task+definition"wordpress:1.0"–+file"wordpress.json""{<<<<<<“family”<:<“wordpress”,<
<<<<<“version”<:<“1.0”,<<"containers"<:<[<< <{<< < <"image"<:<"tutum/wordpress*stackable",<< < <"name"<:<"wordpress",<< < <"cpu"<:<100,<
< < <"memory"<:<100,<< < <"links"<:<["db"],<< < <"environment"<:<[{<"name"<:<"DB_USER",<"value"<:<"root"},<{<"name"<:<"DB_PASS",<"value"<:<"pass"<}],<< < <"portMappings"<:<[{<"containerPort"<:<80,<"hostPort"<:<<80}]<< <},<
< <{<< < <"image"<:<"mysql",<< < <"name"<:<"db",<< < <"cpu"<:<100,<< < <"memory"<:<100,<
< < <"environment"<:<[{<"name"<:<"MYSQL_ROOT_PASSWORD",<"value"<:<"pass"}],<< <}<<]<
}<
$"aws"ecs"run+task"wordpress:1.0"{<<<"tasks":<[<<<<<{<<<<<<<"task_arn":<"arn:aws:ecs:us*west*2:956941867282:task/29da33da*1d71*454f*b036*df0da0284266",<<<<<<<"task_definition_arn":<"arn:aws:ecs:us*west*2:956941867282:task*definition/7fc71808*5102*47d3*9f76*0bded26a932b",<<<<<<<"container_instance_arn":<"arn:aws:ecs:us*west*2:956941867282:container*instance/01be44c0*4d45*4c1f*b2ae*1fce16c35ab6",<<<<<<<"overrides":<{},<<<<<<<"last_status":<"PENDING",<<<<<<<"desired_status":<"RUNNING",<<<<<<<"containers":<[<<<<<<<<<{<<<<<<<<<<<"arn":<"arn:aws:ecs:us*west*2:956941867282:container/1b33848e*1933*43b5*b9c7*4581efb70504",<<<<<<<<<<<"task_arn":<"arn:aws:ecs:us*west*2:956941867282:task/29da33da*1d71*454f*b036*df0da0284266",<<<<<<<<<<<"name":<"wordpress",<<<<<<<<<<<"last_status":<"PENDING",<<<<<<<<<<<"exit_code":<0<<<<<<<<<}<<<<<<<<]<<<<<}<<<]<}<
http://aws.amazon.com/solutions/case-studies/coursera-ecs/
“ Amazon ECS enabled Coursera to focus on releasing new software rather than spending time managing clusters.” Frank Chen Software Engineer
• Docker containers on Amazon EC2 Container Service (ECS) enabled Coursera to easily move to a microservices -based architecture.
• Each job is created as a container and Amazon ECS schedules the container across the Amazon EC2 instance cluster.
• Amazon ECS handles all the cluster management and container orchestration, and containers provide the necessary resource isolation.
http://www.slideshare.net/nathariel/microservices-and-elastic-resource-pools-with-amazon-ec2-container-service
AWS 자원의 변경 이벤트 변화 인식
Node.js 및 자바를 지원하는 클라우드 함수
서버 없이도 고 확장성 기반 실행
AWS Lambda“이벤트 기반 확장성 높은 클라우드 코드 실행 서비스”
Photo bucket S3
Metadata DynamoDB
Trending DynamoDB
Extract metadata
Cloud Function
Trending Cloud
Function
NotifyCloud Function
""
SNS Push notification
When to Use ECS and Lambda
ECSLong-running jobs Manage your event triggering Any language, any dependency Resources are your own - use Spot, RIs
LambdaShort-lived jobs Triggered on specific events Supports specific environments No infrastructure to manage
다양한 AWS 서비스와 빌딩 블럭
Elastic Load Balancing Amazon Elastic Block Store Amazon Virtual Private Cloud AWS Identity and Access Management AWS CloudTrail …. AWS Elastic Beanstalk & Opsworks AWS Lambda