Amazon EC2 Container Service€¦ ·  · 2016-10-03Amazon EC2 Container Service (AKA EC2 ECS) (AKA...

34
Amazon EC2 Container Service (AKA EC2 ECS) (AKA ECS) Brian Nuszkowski @nuszkowski Github: broamski

Transcript of Amazon EC2 Container Service€¦ ·  · 2016-10-03Amazon EC2 Container Service (AKA EC2 ECS) (AKA...

Page 1: Amazon EC2 Container Service€¦ ·  · 2016-10-03Amazon EC2 Container Service (AKA EC2 ECS) (AKA ECS) Brian Nuszkowski @nuszkowski Github: broamski. Amazon EC2 Container Registry

Amazon EC2 Container Service(AKA EC2 ECS)

(AKA ECS)

Brian Nuszkowski @nuszkowski

Github: broamski

Page 2: Amazon EC2 Container Service€¦ ·  · 2016-10-03Amazon EC2 Container Service (AKA EC2 ECS) (AKA ECS) Brian Nuszkowski @nuszkowski Github: broamski. Amazon EC2 Container Registry

Amazon EC2 Container Registry(AKA EC2 ECR)

(AKA ECR)

Page 3: Amazon EC2 Container Service€¦ ·  · 2016-10-03Amazon EC2 Container Service (AKA EC2 ECS) (AKA ECS) Brian Nuszkowski @nuszkowski Github: broamski. Amazon EC2 Container Registry

The Problem Statements

• How do I orchestrate and schedule them?

• Where do I store them?

Page 4: Amazon EC2 Container Service€¦ ·  · 2016-10-03Amazon EC2 Container Service (AKA EC2 ECS) (AKA ECS) Brian Nuszkowski @nuszkowski Github: broamski. Amazon EC2 Container Registry

ECS Building Blocks

EC2 Container Instance

Task Definition

Service

Container Definition(s)

Scheduling

RunTask StartTask

ECS Cluster

Page 5: Amazon EC2 Container Service€¦ ·  · 2016-10-03Amazon EC2 Container Service (AKA EC2 ECS) (AKA ECS) Brian Nuszkowski @nuszkowski Github: broamski. Amazon EC2 Container Registry

ECS Building Blocks

ECS Cluster

Page 6: Amazon EC2 Container Service€¦ ·  · 2016-10-03Amazon EC2 Container Service (AKA EC2 ECS) (AKA ECS) Brian Nuszkowski @nuszkowski Github: broamski. Amazon EC2 Container Registry

ECS Cluster

Page 7: Amazon EC2 Container Service€¦ ·  · 2016-10-03Amazon EC2 Container Service (AKA EC2 ECS) (AKA ECS) Brian Nuszkowski @nuszkowski Github: broamski. Amazon EC2 Container Registry

ECS Building Blocks

EC2 Container Instance

ECS Cluster

Page 8: Amazon EC2 Container Service€¦ ·  · 2016-10-03Amazon EC2 Container Service (AKA EC2 ECS) (AKA ECS) Brian Nuszkowski @nuszkowski Github: broamski. Amazon EC2 Container Registry

ECS Cluster

EC2 Container Instances

Page 9: Amazon EC2 Container Service€¦ ·  · 2016-10-03Amazon EC2 Container Service (AKA EC2 ECS) (AKA ECS) Brian Nuszkowski @nuszkowski Github: broamski. Amazon EC2 Container Registry

ECS Cluster

EC2 Instance

EC2 Container Instance Criteria

1. Linux2. Docker Daemon3. ECS Agent

Page 10: Amazon EC2 Container Service€¦ ·  · 2016-10-03Amazon EC2 Container Service (AKA EC2 ECS) (AKA ECS) Brian Nuszkowski @nuszkowski Github: broamski. Amazon EC2 Container Registry

ECS Cluster - Building a Container Instance Fleet

Amazon ECS-optimized AMI (amzn-ami-2016.03.i-amazon-ecs-optimized) consists:

• The latest minimal version of the Amazon Linux AMI• The latest version of the Amazon ECS container agent (1.12.2)• The recommended version of Docker for the latest Amazon ECS container agent (1.11.2)

• The latest version of the ecs-init package to run and monitor the Amazon ECS agent (1.12.2-1)

Page 11: Amazon EC2 Container Service€¦ ·  · 2016-10-03Amazon EC2 Container Service (AKA EC2 ECS) (AKA ECS) Brian Nuszkowski @nuszkowski Github: broamski. Amazon EC2 Container Registry

ECS Cluster - Building a Container Instance Fleet

#!/bin/bash# install docker# do your other thingsdocker run --name ecs-agent \

--detach=true \--restart=on-failure:10 \--volume=/var/run/docker.sock:/var/run/docker.sock \--volume=/var/log/ecs/:/log \--volume=/var/lib/ecs/data:/data \--net=host \--env=ECS_LOGFILE=/log/ecs-agent.log \--env=ECS_LOGLEVEL=info \--env=ECS_DATADIR=/data \--env=ECS_CLUSTER=<cluster_name> \--env=ECS_ENABLE_TASK_IAM_ROLE=true \--env=ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST=true \amazon/amazon-ecs-agent:<version or latest>

Page 12: Amazon EC2 Container Service€¦ ·  · 2016-10-03Amazon EC2 Container Service (AKA EC2 ECS) (AKA ECS) Brian Nuszkowski @nuszkowski Github: broamski. Amazon EC2 Container Registry

ECS Cluster - Building a (Bespoke) Container Instance Fleet

Mix and Match

Page 13: Amazon EC2 Container Service€¦ ·  · 2016-10-03Amazon EC2 Container Service (AKA EC2 ECS) (AKA ECS) Brian Nuszkowski @nuszkowski Github: broamski. Amazon EC2 Container Registry

ECS Cluster - Building a (Robust) Container Instance Fleet

Auto Scaling group

Page 14: Amazon EC2 Container Service€¦ ·  · 2016-10-03Amazon EC2 Container Service (AKA EC2 ECS) (AKA ECS) Brian Nuszkowski @nuszkowski Github: broamski. Amazon EC2 Container Registry

ECS Cluster - Task Definition

• 1 or many Container Definitions per Task Definition

• Each container definition defines typical container parameters: volumes, ports exposed, metadata, etc.

• Task Definitions are immutable

Task Definition: WebApp

nginx:1.10.1

Container Definition

yourpythonapp:2.6.9

Container Definition

Page 15: Amazon EC2 Container Service€¦ ·  · 2016-10-03Amazon EC2 Container Service (AKA EC2 ECS) (AKA ECS) Brian Nuszkowski @nuszkowski Github: broamski. Amazon EC2 Container Registry

ECS Cluster - Task Definition

• 1 or many Container Definitions per Task Definition

• Each container definition defines typical container parameters: volumes, ports exposed, metadata, etc.

• Task Definitions are immutable

Task Definition: WebApp

nginx:1.10.1

Container Definition

redis:latest

Container Definition

yourpythonapp:2.6.9

Container Definition

Page 16: Amazon EC2 Container Service€¦ ·  · 2016-10-03Amazon EC2 Container Service (AKA EC2 ECS) (AKA ECS) Brian Nuszkowski @nuszkowski Github: broamski. Amazon EC2 Container Registry

Task Definitions

Task Definition: WebApp:X (Family:Revision)

nginx:1.10.1

Container Definition

redis:latest

Container Definition

yourpythonapp:2.6.9

Container Definition

Task Definition: Cache:X

redis:latest

Container Definition

nginx:1.10.1

Container Definition

yourpythonapp:2.6.9

Container Definition

Task Definition: API:X(container linking)

(sorry, no cross-task linking)

Page 17: Amazon EC2 Container Service€¦ ·  · 2016-10-03Amazon EC2 Container Service (AKA EC2 ECS) (AKA ECS) Brian Nuszkowski @nuszkowski Github: broamski. Amazon EC2 Container Registry

Task Definitions

Task Definition: nginx:1

nginx:1.10.1

Container Definition

Task Definition: app:1

pythonapp:2.4.3

Container Definition

Task Definition: redis:1

redis:latest

Container Definition

Page 18: Amazon EC2 Container Service€¦ ·  · 2016-10-03Amazon EC2 Container Service (AKA EC2 ECS) (AKA ECS) Brian Nuszkowski @nuszkowski Github: broamski. Amazon EC2 Container Registry

Task Definitions

Task Definition: WebApp:1

nginx:1.10.1

Container Definition

redis:latest

Container Definition

yourpythonapp:2.6.9

Container Definition

Task Definition: WebApp:2

yourpythonapp:2.7.0

(container linking)

nginx:1.10.1

Container Definition

redis:latest

Container Definition

Container Definition

(container linking)

Page 19: Amazon EC2 Container Service€¦ ·  · 2016-10-03Amazon EC2 Container Service (AKA EC2 ECS) (AKA ECS) Brian Nuszkowski @nuszkowski Github: broamski. Amazon EC2 Container Registry

Scheduling Tasks

EC2 Instance

Task Definition

ECS Cluster

. . . . .

Task

Page 20: Amazon EC2 Container Service€¦ ·  · 2016-10-03Amazon EC2 Container Service (AKA EC2 ECS) (AKA ECS) Brian Nuszkowski @nuszkowski Github: broamski. Amazon EC2 Container Registry

Scheduling Tasks

EC2 Instance EC2 Instance

Continuous(Service)

Service: WebApp

ECS Cluster

Scheduler

Task Def: WebApp:1Desired #: 2Deploy Options: 50% minimumLoad Balancer: X

Service: Cache

Task Def: Cache:1Desired #: 1Deploy Options: 50% minimumLoad Balancer: X

Page 21: Amazon EC2 Container Service€¦ ·  · 2016-10-03Amazon EC2 Container Service (AKA EC2 ECS) (AKA ECS) Brian Nuszkowski @nuszkowski Github: broamski. Amazon EC2 Container Registry

Scheduling Tasks

More On Services….• Continuously attempting to achieve desired count • Balance system capacity and Availability Zone considerations • Deployment Strategies

• Optional • Control how many tasks run during the deployment and the ordering of stopping and starting tasks • maximumPercent - max # of running tasks = desiredCount * maximumPercent/100 • minimumHealthyPercent - max # of running tasks = desiredCount * minimumHealthyPercent/100

• AutoScaling • Scale Service • Scale EC2 Instaces

Page 22: Amazon EC2 Container Service€¦ ·  · 2016-10-03Amazon EC2 Container Service (AKA EC2 ECS) (AKA ECS) Brian Nuszkowski @nuszkowski Github: broamski. Amazon EC2 Container Registry

ECS Cluster - Deployment

WebApp:1 WebApp:1 WebApp:1 WebApp:1

minimumHealthyPercent: 50maximumPercent: 100

WebApp:2 WebApp:2WebApp:2 WebApp:2

Page 23: Amazon EC2 Container Service€¦ ·  · 2016-10-03Amazon EC2 Container Service (AKA EC2 ECS) (AKA ECS) Brian Nuszkowski @nuszkowski Github: broamski. Amazon EC2 Container Registry

ECS Cluster - Deployment

WebApp:1 WebApp:1 WebApp:1 WebApp:1

minimumHealthyPercent: 100maximumPercent: 200

WebApp:2 WebApp:2 WebApp:2 WebApp:2

Page 24: Amazon EC2 Container Service€¦ ·  · 2016-10-03Amazon EC2 Container Service (AKA EC2 ECS) (AKA ECS) Brian Nuszkowski @nuszkowski Github: broamski. Amazon EC2 Container Registry

Scheduling Tasks

Even More On Services: Load Balancing

Application ELB (443) -> Dynamic

Classic ELB (443) -> 9999

nginx:1.10.1 0:80

nginx:1.10.1 0:80

nginx:1.10.1 9999:80

1:1 ELB to Service Ratio!

Page 25: Amazon EC2 Container Service€¦ ·  · 2016-10-03Amazon EC2 Container Service (AKA EC2 ECS) (AKA ECS) Brian Nuszkowski @nuszkowski Github: broamski. Amazon EC2 Container Registry

Scheduling Tasks

EC2 Instance EC2 Instance

One-Time

Task Definition: BatchProcessor

ECS Cluster

SchedulerTask Def: WebApp:1Desired #: 2

Randomly distributed via RunTaskor intentionally distributed via

StartTask

Page 26: Amazon EC2 Container Service€¦ ·  · 2016-10-03Amazon EC2 Container Service (AKA EC2 ECS) (AKA ECS) Brian Nuszkowski @nuszkowski Github: broamski. Amazon EC2 Container Registry

Service / Task Definition Design Patterns

ELB

EC2 Instance EC2 Instance EC2 Instance

nginx

app

nginx

app

nginx

apptask task task

Page 27: Amazon EC2 Container Service€¦ ·  · 2016-10-03Amazon EC2 Container Service (AKA EC2 ECS) (AKA ECS) Brian Nuszkowski @nuszkowski Github: broamski. Amazon EC2 Container Registry

Service / Task Definition Design Patterns

ELB

EC2 Instance EC2 Instance EC2 Instance

nginx

app

nginx

app

nginx

appservice service service

Page 28: Amazon EC2 Container Service€¦ ·  · 2016-10-03Amazon EC2 Container Service (AKA EC2 ECS) (AKA ECS) Brian Nuszkowski @nuszkowski Github: broamski. Amazon EC2 Container Registry

Service / Task Definition Design Patterns

ELB

EC2 Instance EC2 Instance EC2 Instance

nginx

dev-app

prod-app

nginx

dev-app

prod-app

nginx

dev-app

prod-app

Page 29: Amazon EC2 Container Service€¦ ·  · 2016-10-03Amazon EC2 Container Service (AKA EC2 ECS) (AKA ECS) Brian Nuszkowski @nuszkowski Github: broamski. Amazon EC2 Container Registry

Service / Task Definition Design Patterns

EC2 Instance

nginx

appA

EC2 Instance

nginx

EC2 Instance

nginx

appB

ELB

appAELB

ELB

Page 30: Amazon EC2 Container Service€¦ ·  · 2016-10-03Amazon EC2 Container Service (AKA EC2 ECS) (AKA ECS) Brian Nuszkowski @nuszkowski Github: broamski. Amazon EC2 Container Registry

Service / Task Definition Design Patterns

EC2 Instance

nginx

prod

EC2 Instance

nginx

EC2 Instance

nginx

dev

ELB

prodELB

ELB

Page 31: Amazon EC2 Container Service€¦ ·  · 2016-10-03Amazon EC2 Container Service (AKA EC2 ECS) (AKA ECS) Brian Nuszkowski @nuszkowski Github: broamski. Amazon EC2 Container Registry

ECS Cluster - IAM

• Container Instance IAM Role (EC2)• ecs-agent uses this

• ECS Service Scheduler• ECS Service operating on your behalf; ELB register/deregister

• ECS Autoscaling Role• Make system adjustments on your behalf

• Per task IAM Roles!!!

Page 32: Amazon EC2 Container Service€¦ ·  · 2016-10-03Amazon EC2 Container Service (AKA EC2 ECS) (AKA ECS) Brian Nuszkowski @nuszkowski Github: broamski. Amazon EC2 Container Registry

• logging w/CloudWatch Logs

• garbage collection

• deploying same task def doesn’t do anything (if using same container tag), must create new version

• comparing task definitions

• sharing data: s3? persistent backend? partitioned? EFS?

Misc Notes

Page 33: Amazon EC2 Container Service€¦ ·  · 2016-10-03Amazon EC2 Container Service (AKA EC2 ECS) (AKA ECS) Brian Nuszkowski @nuszkowski Github: broamski. Amazon EC2 Container Registry

ECR

• you need to run aws ecr get-login —region us-east-1 | bash - which is good for 12 hours

• acs-agent can use instance metadata to pull from ecr, so 3rd party registry credentials can be provided

• There are complaints about the repository naming convention

Page 34: Amazon EC2 Container Service€¦ ·  · 2016-10-03Amazon EC2 Container Service (AKA EC2 ECS) (AKA ECS) Brian Nuszkowski @nuszkowski Github: broamski. Amazon EC2 Container Registry

Amazon API

GatewayAWS

Lambda

Amazon ECS