microservices on aws using aws lambda and docker containers

23
Microservices on AWS using AWS Lambda and Docker Containers Danilo Poccia AWS Technical Evangelist @danilop

Upload: danilo-poccia

Post on 15-Jul-2015

668 views

Category:

Internet


8 download

TRANSCRIPT

Page 1: Microservices on AWS using AWS Lambda and Docker Containers

Microservices on AWS usingAWS Lambda and Docker ContainersDanilo Poccia ‒ AWS Technical Evangelist

@danilop

Page 2: Microservices on AWS using AWS Lambda and Docker Containers

Why AWS Lambda?

Page 3: Microservices on AWS using AWS Lambda and Docker Containers

AWS Lambda

Event driven,fully managed compute

Page 4: Microservices on AWS using AWS Lambda and Docker Containers

AWS Lambda

Focus on business logic,not infrastructure

Customer uploads code, AWS Lambda handles:

Capacity Scaling

Deployment Fault tolerance

Monitoring Logging

. . .

Page 5: Microservices on AWS using AWS Lambda and Docker Containers

AWS Lambda

Automatic scaling

Customers pay only for what they use,

no over/under provisioning

Page 6: Microservices on AWS using AWS Lambda and Docker Containers

AWS Lambda

Fine-grained pricing

Price compute time by 100ms, even short jobs make sense

Low request charge No hourly, daily, or monthly minimums

Free tier

Page 7: Microservices on AWS using AWS Lambda and Docker Containers

Events come in many different shapes & sizes

S3 event notifications

DynamoDB Streams

Kinesis events Custom events

Page 8: Microservices on AWS using AWS Lambda and Docker Containers

Why Docker?

Page 9: Microservices on AWS using AWS Lambda and Docker Containers

Virtual Machine Container

Page 10: Microservices on AWS using AWS Lambda and Docker Containers

Docker on AWS

AmazonLinux

A supported and maintained Linux

image provided by Amazon Web Services

Amazon EC2 Container Service

Highly scalable, high performance container management service

AWSElastic

BeanstalkFor deploying and

scaling web applications and

services

Page 11: Microservices on AWS using AWS Lambda and Docker Containers

Amazon EC2 Container Service

Key Components

Container InstancesClusters

Tasks Task Definitions

Amazon EC2 instances

Docker daemon

Amazon ECS agent

Page 12: Microservices on AWS using AWS Lambda and Docker Containers

https://github.com/aws/amazon-ecs-agent

Page 13: Microservices on AWS using AWS Lambda and Docker Containers

Amazon EC2 Container Service

Key Components

Container Instances Clusters

Tasks Task Definitions

Regional

Resource pool

Grouping of Container Instances

Start empty, dynamically scalable

Page 14: Microservices on AWS using AWS Lambda and Docker Containers

Amazon EC2 Container Service

Key Components

Container Instances Clusters Tasks

Task Definitions

Unit of work

Grouping of related Containers

Run on Container Instances

Page 15: Microservices on AWS using AWS Lambda and Docker Containers

Amazon EC2 Container Service

Key Components

Container Instances Clusters

Tasks Task Definitions

[ { "image": "mysql", "name": "db", "cpu": 10, "memory": 500, …

Page 16: Microservices on AWS using AWS Lambda and Docker Containers

Tasks are defined via Task Definitions[ { "image": "tutum/wordpress-stackable", "name": "wordpress", "cpu": 10, "memory": 500, "essential": true, "links": [ "db" ], "entryPoint": [ "/bin/sh", "-c" ], "environment": [ … ], "portMappings": [ { "containerPort": 80, "hostPort": 80 } ] },

{ "image": "mysql", "name": "db", "cpu": 10, "memory": 500, "essential": true, "entryPoint": [ "/entrypoint.sh" ], "environment": [ { "name": "MYSQL_ROOT_PASSWORD", "value": "pass" } ], "portMappings": [] }]

Page 17: Microservices on AWS using AWS Lambda and Docker Containers

[ { "image": "tutum/wordpress-stackable", "name": "wordpress", "cpu": 10, "memory": 500, "essential": true, "links": [ "db" ], "entryPoint": [ "/bin/sh", "-c" ], "environment": [ … ], "portMappings": [ { "containerPort": 80, "hostPort": 80 } ] }, ]

{ "image": "mysql", "name": "db", "cpu": 10, "memory": 500, "essential": true, "entryPoint": [ "/entrypoint.sh" ], "environment": [ { "name": "MYSQL_ROOT_PASSWORD", "value": "pass" } ], "portMappings": [] }]

From Docker Hub

10 CPU Units (1024 is full CPU), 500 Megabytes of Memory

Environment Variables

No external ports exposed

Tasks are defined via Task Definitions

Page 18: Microservices on AWS using AWS Lambda and Docker Containers

[ { "image": "tutum/wordpress-stackable", "name": "wordpress", "cpu": 10, "memory": 500, "essential": true, "links": [ "db" ], "entryPoint": [ "/bin/sh", "-c" ], "environment": [ … ], "portMappings": [ { "containerPort": 80, "hostPort": 80 } ] },

[ { "image": "mysql", "name": "db", "cpu": 10, "memory": 500, "essential": true, "entryPoint": [ "/entrypoint.sh" ], "environment": [ { "name": "MYSQL_ROOT_PASSWORD", "value": "pass" } ], "portMappings": [] }]

Essential to our TaskDocker link to mysql container

Expose port 80 in container to port 80 on host

Tasks are defined via Task Definitions

Page 19: Microservices on AWS using AWS Lambda and Docker Containers

Amazon EC2 Containers AWS LambdaOn-Premises

Weeks Minutes Seconds Milliseconds

Page 20: Microservices on AWS using AWS Lambda and Docker Containers

Demo Architecture

Content Management System Prototype

Page 21: Microservices on AWS using AWS Lambda and Docker Containers

Lambda Function

S3 Bucket#1

S3 Bucket#2

DynamoDBTable

ECSTask

ECSCluster

Images +

Medatada

Upload Object + Metadata

Event Notification

Thumbnail

Write Metadata

Run

Schedule

Read Metadata

Write “index.html”

1

2

3

Page 22: Microservices on AWS using AWS Lambda and Docker Containers

<demo> …

</demo>

Page 23: Microservices on AWS using AWS Lambda and Docker Containers

@danilop