44
AWS Lambda meets Continuous Delivery Alex Krause [email protected] @alex0ptr Andreas Mohrhard [email protected] @amohrhard

AWS meets Continuous Delivery

Embed Size (px)

Citation preview

Page 1: AWS meets Continuous Delivery

AWS Lambda meets Continuous Delivery

Alex Krause [email protected]

@alex0ptr

Andreas Mohrhard [email protected]

@amohrhard

Page 2: AWS meets Continuous Delivery

src: https://twitter.com/jeffbarr/status/805175000906928128

Page 3: AWS meets Continuous Delivery

👔💪 💻$

Page 4: AWS meets Continuous Delivery

👔💪 💻$💡

Page 5: AWS meets Continuous Delivery

👔💪 💻🤑💡

Page 6: AWS meets Continuous Delivery

🤑

Page 7: AWS meets Continuous Delivery

😕Ops

Page 8: AWS meets Continuous Delivery

😟Ops Scale

Page 9: AWS meets Continuous Delivery

😩Ops Scale High Availability

Page 10: AWS meets Continuous Delivery

😰Ops Scale High Availability Saturation

Page 11: AWS meets Continuous Delivery

😱Ops Scale High Availability Saturation 💸

Page 12: AWS meets Continuous Delivery

🎉 Serverless Architektur 🎊

🤔

Page 13: AWS meets Continuous Delivery

AWS Lambda

Function as a Service (FaaS)

Page 14: AWS meets Continuous Delivery

😎Ops Scale High Availability Saturation

*costs: serverlesscalc.com

💰*

Page 15: AWS meets Continuous Delivery

Demo

Page 16: AWS meets Continuous Delivery

😍

Page 17: AWS meets Continuous Delivery

😭

🏋❓

Page 18: AWS meets Continuous Delivery
Page 19: AWS meets Continuous Delivery

Commit stage Compile Unit test Analysis

Build Installers

Automated acceptance

testing

Automated capacity testing

Manual Testing Showcases Exploratory

testing

Release

(🤓📙)

CI “keep team in sync and get fast feedback”

CD “be confident and get code to production”

Page 20: AWS meets Continuous Delivery

🏋Configuration

Serverless Build

Limits

Unit Tests

Integration Tests

Versioning

Rollback

Stress TestingEvents / Triggers

Deployment

Complex Infrastructure

Page 21: AWS meets Continuous Delivery

Pipeline 🔨📈🚀, where to run? 🤔

✅ Drone, SnapCI, Travis❗ need comprehensive rights for AWS

, Code{Pipeline,Build}🔥

Page 22: AWS meets Continuous Delivery

Demo Pipeline

Page 23: AWS meets Continuous Delivery

Unit Tests? 🤔

Page 24: AWS meets Continuous Delivery

src: serverless.com

Page 25: AWS meets Continuous Delivery

@Override public LambdaProxyResponse handleRequest(LambdaProxyRequest request, Context context) { val query = request.getQueryStringParameters();

List<User> results; if (query != null && query.containsKey("usernames")) { val idAsString = Splitter.on(",").splitToList(query.get("usernames")); val usersForQuery = idAsString.stream() .map(s -> User.builder().username(s).build()) .collect(Collectors.toList());

val userTableKeysAndAttributes = new TableKeysAndAttributes(dynamodbAdapter.userTableName); usersForQuery.forEach( u -> userTableKeysAndAttributes .addHashOnlyPrimaryKey(DynamodbAdapter.UserTable.USERNAME, u.getUsername()));

results = dynamodbAdapter.dynamodb .batchGetItem(userTableKeysAndAttributes) .getTableItems().get(dynamodbAdapter.userTableName).stream() .map(dynamodbAdapter ::itemToUser) .collect(toList()); } else { [ ...] } return wrapInResponse(results); }

Page 26: AWS meets Continuous Delivery

@Override public LambdaProxyResponse handleRequest(LambdaProxyRequest request, Context c) { val query = request.getQueryStringParameters(); List<User> results; if (query != null && query.containsKey("usernames")) { List<User> usersForQuery = extractUsernamesFromQuery(query); results = dynamodbAdapter.retrieveUsers(usersForQuery); } else { results = dynamodbAdapter.retrieveUsers(); }

return wrapInResponse(results); }

Page 27: AWS meets Continuous Delivery

Unit Tests? 🤔

✅ focus on application code✅ no 🍝, keep your 🎩

Page 28: AWS meets Continuous Delivery

Integration Tests? 🤔

✅ disposable environments✅ LambCI, Serverless Offline Plugin ✅ DynamoDBLocal.jar $ docker run -v "$PWD":/var/task lambci/lambda \ index.myHandler '{"some": "event"}'

Page 29: AWS meets Continuous Delivery

Complex Infrastructure? 🤔

✅ 🤖 Infrastructure as Code

Page 30: AWS meets Continuous Delivery

A lot of configuration, deploy scripts? 🤔

✅ Serverless, APEX, Chalice, AWS SAM🔥

Page 31: AWS meets Continuous Delivery

service: serverless-peer-reward provider: name: aws runtime: java8 memorySize: 512 timeout: 10 stage: dev region: eu-central-1 environment:

TBL_PREFIX: ${self:provider.stage}-devopscon iamRoleStatements: - Effect: "Allow" Action: - "dynamodb:*" Resource: "*" package: artifact: target/peer-rewards.jar

functions: users: handler: biz.cosee…UserHandler events: - http: path: users method: get cors: true

rewards: handler: biz.cosee…RewardHandler events: - http: path: rewards method: any cors: true

generate: handler: biz.cosee…RandomRewardHandler events: - schedule: rate: rate(1 minute) enabled: false

Page 32: AWS meets Continuous Delivery

popularity verbositylanguagesupport

completeness

Serverless ⭐⭐⭐ 📝 👽🐍🤖☕ 🍰🍰🍰

AWS SAM 🔥 📝📝 👽🐍🤖☕ 🍰🍰

Chalice ⭐⭐ 📝 🐍 🍰

Apex ⭐ 📝 👽🐍🤖☕ 🍰🍰

🍧🍒

Page 33: AWS meets Continuous Delivery

How to do versioning? 🤔

Page 34: AWS meets Continuous Delivery

𝝺 lambda ⚙ config

⚓ deployment #latest

⚓ deployment

⚓ deployment #dev

Page 35: AWS meets Continuous Delivery

How to do versioning? 🤔

✅ Lambda built-in Labels and Versioning ✅ API Gateway Stages (dev/prod)

Page 36: AWS meets Continuous Delivery

What if I want to roll back? 🤔

✅ e.g. Serverless, there’s a plugin for that

Page 37: AWS meets Continuous Delivery

What’s the catch? 🎣 🤔

❗50MB per function ❗75GB per region

✅ careful with dependencies, try ProGuard✅ automate cleanups / just overwrite ✅ monitoring artifacts in pipeline

Page 38: AWS meets Continuous Delivery

Interesting things to share 👑✅ goad, artillery ✅ Lambda for CI/CD tasks

Page 39: AWS meets Continuous Delivery

The Big Picture

Page 40: AWS meets Continuous Delivery

Keep your manners.🍴🎩

Know your tools.🛠

Page 41: AWS meets Continuous Delivery
Page 42: AWS meets Continuous Delivery

Keep your manners.🍴🎩

Know your tools.🛠

Don’t be afraid.😌

Page 43: AWS meets Continuous Delivery

Wie Cloud-Technologien das Unternehmen verändern <Konstantin Diener/> CUVILLIES - morgen 15:00

Page 44: AWS meets Continuous Delivery

> blog.cosee.biz

> talks.cosee.biz> jobs.cosee.biz

⁉🍫R

> github.com/cosee/devopscon.2016