44
© 2016, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Yi-an Han, Senior Business Development Manager December 12, 2016 Serverless Apps with AWS Step Functions

使用 AWS Step Functions 開發 Serverless 服務

Embed Size (px)

Citation preview

Page 1: 使用 AWS Step Functions 開發 Serverless 服務

© 2016, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

Yi-an Han,

Senior Business Development Manager

December 12, 2016

Serverless Apps with

AWS Step Functions

Page 2: 使用 AWS Step Functions 開發 Serverless 服務

What to Expect from the Session

進到無伺服器時代

AWS Step Functions

為什麼我需要使用AWS Step Functions?

AWS Step Functions可以幫我做什麼事?

Live Demo

Page 3: 使用 AWS Step Functions 開發 Serverless 服務

進到無伺服器時代

Page 4: 使用 AWS Step Functions 開發 Serverless 服務

region

Availability Zone A

Web Tier Application Tier Master DB

Standby DB

Availability Zone B

Web Tier Application Tier

Traditional 3-Tier Web App

Page 5: 使用 AWS Step Functions 開發 Serverless 服務

region

Static

Content

Dynamic

Content

API Gateway Lambda DynamoDB

S3

Serverless Website

Page 6: 使用 AWS Step Functions 開發 Serverless 服務

而價格呢?

Page 7: 使用 AWS Step Functions 開發 Serverless 服務

The serverless compute manifesto

Functions are the unit of deployment and scaling.

No machines, VMs, or containers visible in the programming model.

Permanent storage lives elsewhere.

Scales per request. Users cannot over- or under-provision capacity.

Never pay for idle (no cold servers/containers or their costs).

Implicitly fault-tolerant because functions can run anywhere.

BYOC – Bring your own code.

Metrics and logging are a universal right.

Page 8: 使用 AWS Step Functions 開發 Serverless 服務

Bustle.com

• 52 million monthly users

• 100 million events daily

Page 9: 使用 AWS Step Functions 開發 Serverless 服務

Amazon

API GatewayAWS Lambda Amazon Kinesis AWS Lambda

Redis

Amazon Mobile

Analytics

Amazon CloudWatch

Amazon Elasticsearch

Service

Amazon S3

Amazon RedshiftAmazon QuickSightEngineering

Marketing & Operations

Design

Bustle.com users

Bustle.com event stream processing

Page 10: 使用 AWS Step Functions 開發 Serverless 服務

Bustle.com

• 52 million monthly users

• 100 million events daily

• 84% cost savings

• 0 servers

• 0 operating system patches

• Automatic scaling

Page 11: 使用 AWS Step Functions 開發 Serverless 服務

λλ

λDBMS

λλ

λλ

λ

λ λ

λ

λ

Queue

Modern

Serverless

app

Page 12: 使用 AWS Step Functions 開發 Serverless 服務

Modern

Serverless

app

Page 13: 使用 AWS Step Functions 開發 Serverless 服務

“I want to sequence functions”

“I want to select functions based on data”

“I want to retry functions”

“I want try/catch/finally”

Functions into apps

“I have code that runs for hours”

“I want to run functions in parallel”

Page 14: 使用 AWS Step Functions 開發 Serverless 服務

Twelve-factor processes are stateless and share-nothing. Any data that needs to

persist must be stored in a stateful backing service, typically a database.

Page 15: 使用 AWS Step Functions 開發 Serverless 服務

Coordination by method call

λ λ

λ

λ

λλ

λ

Page 16: 使用 AWS Step Functions 開發 Serverless 服務

Coordination by function chaining

λ

λλ

λλλ

λ

Page 17: 使用 AWS Step Functions 開發 Serverless 服務

Coordination by database

λλ

λ

λ

λλ

λ

Page 18: 使用 AWS Step Functions 開發 Serverless 服務

Coordination by queues

λ

λ

λ

λ λλ

λ

Page 19: 使用 AWS Step Functions 開發 Serverless 服務

Coordination must-haves

• Scales out

• Doesn’t lose state

• Deals with errors/timeouts

• Easy to build & operate

• Auditable

Page 20: 使用 AWS Step Functions 開發 Serverless 服務
Page 21: 使用 AWS Step Functions 開發 Serverless 服務

AWS Step Functions

生產力:迅速建立應用程式AWS Step Functions 包含視覺化主控台與常用工作流程的藍圖,讓您將分散式應用程式的元件協調成平行和/或連續步驟的工作變得更加容易。您可以在幾分鐘內建立應用程式,然後加以視覺化並追蹤每個步驟的執行,以協助確保應用程式如預期運作。

彈性:可靠地擴展和復原AWS Step Functions 會自動觸發每個步驟,讓您的應用程式能如預期依序執行。它可以同時處理上百萬個步驟,以協助確保應用程式即使在需求增加時也可供使用。無論步驟要花幾秒或幾個月來完成,Step Functions 都會追蹤每個步驟的狀態,並透過內建的重試與撤回功能來處理錯誤。

靈活性:輕鬆開發應用程式AWS Step Functions 可讓變更工作流程和編輯步驟順序變得更容易,而不需要修改整個應用程式。您可以重複使用元件和步驟,甚至無須變更程式碼,以進行實驗和加速創新。您的工作流程可以支援上千個獨立的元件與步驟,方便您自由建立越來越複雜的應用程式。

Page 22: 使用 AWS Step Functions 開發 Serverless 服務

Define in JSON{

"Comment": "An Amazon States Language example using a Choice

state.",

"StartAt": "FirstState",

"States": {

"FirstState": {

"Type": "Task",

"Resource": "arn:aws:lambda:us-east-

1:123456789012:function:FUNCTION_NAME",

"Next": "ChoiceState"

},

"ChoiceState": {

"Type" : "Choice",

"Choices": [

{

"Variable": "$.foo",

"NumericEquals": 1,

"Next": "FirstMatchState"

},

{

"Variable": "$.foo",

"NumericEquals": 2,

"Next": "SecondMatchState"

}

],

"Default": "DefaultState"

},

"FirstMatchState": {

"Type" : "Task",

"Resource": "arn:aws:lambda:us-east-

1:123456789012:function:OnFirstMatch",

"Next": "NextState"

},

"SecondMatchState": {

"Type" : "Task",

"Resource": "arn:aws:lambda:us-east-

1:123456789012:function:OnSecondMatch",

"Next": "NextState"

},

"DefaultState": {

"Type": "Fail",

"Cause": "No Matches!"

},

"NextState": {

"Type": "Task",

"Resource": "arn:aws:lambda:us-east-

1:123456789012:function:FUNCTION_NAME",

"End": true

}

}

}

Page 23: 使用 AWS Step Functions 開發 Serverless 服務

視覺化方式將您的應用程式定義成一系列步驟

以視覺化方式將您的應用程式工作流程定義成一系列步驟。視覺化主控台會以執行順序自動顯示每一步驟的圖片,讓設計多步驟應用程式的複雜工作流程變得更加輕鬆。下表提供的範例,是一個相片分享應用程式的步驟流程,包含連續、分支與平行步驟。

Page 24: 使用 AWS Step Functions 開發 Serverless 服務

視覺化方式確認一切如預期運作

主控台會用不同顏色顯示每個步驟的即時狀態,並提供每個執行的詳細歷史記錄。

Page 25: 使用 AWS Step Functions 開發 Serverless 服務

運作的細節監看與稽核

Page 26: 使用 AWS Step Functions 開發 Serverless 服務

為什麼我需要使用AWS Step Functions?

Page 27: 使用 AWS Step Functions 開發 Serverless 服務

AWS Step Functions

可以幫我做什麼事?

Page 28: 使用 AWS Step Functions 開發 Serverless 服務

“I want to sequence functions”

AWS Step Functions, we can easily change and iterate on the application workflow of our food delivery service in order to optimize operations and continually improve delivery times. AWS Step Functions lets us dynamically scale the steps in our food delivery algorithm so we can manage spikes in customer orders and meet demand.

Mathias Nitzsche, CTO, foodpanda

Page 29: 使用 AWS Step Functions 開發 Serverless 服務
Page 30: 使用 AWS Step Functions 開發 Serverless 服務

“I want to select functions based on data”

With AWS Step Functions, it was easy to build a multi-step product

updating system to ensure our database and website always have

the latest price and availability information.

AWS Step Functions let us replace a manual updating process with

an automated series of steps, including built-in retry conditions and

error handling, so we can reliably scale before a big show, and keep

pace with rapidly changing fashions.

Jared Browarnik, CTO, TheTake

Page 31: 使用 AWS Step Functions 開發 Serverless 服務
Page 32: 使用 AWS Step Functions 開發 Serverless 服務

“I want to retry functions”

We get transient errors from a RESTful

service we depend on, once every four

or five times we call it. But if we keep

retrying, it eventually works.

Page 33: 使用 AWS Step Functions 開發 Serverless 服務

{

"Comment": "Call out to a RESTful service",

"StartAt": "Call out",

"States": {

"Call out": {

"Type": "Task",

"Resource":

"arn:aws:lambda:eu-central-1:123456789012:function:RestCallout",

"Retry": [

{ "ErrorEquals": [ "HandledError" ], "MaxAttempts": 10 }

],

"End": true

}

}

}

Page 34: 使用 AWS Step Functions 開發 Serverless 服務

“I want to run functions in parallel”

We want to send the captured image to

three OCR providers and take the result

with the highest confidence value.“

Page 35: 使用 AWS Step Functions 開發 Serverless 服務
Page 36: 使用 AWS Step Functions 開發 Serverless 服務

“I want try/catch/finally”

AWS Step Functions makes it simple to coordinate information

from many different infrastructure systems using easy to design

workflows and create a more intelligent monitoring system for our

Platform as a Service (PaaS).

With AWS Step Functions, we can reliably automate monitoring

decisions and actions in order to reduce human intervention by

over 60%, which improves infrastructure operation productivity and

customer application availability on our platform.

Pedro Pimenta, VP R&D, OutSystems

Page 37: 使用 AWS Step Functions 開發 Serverless 服務

13 AWS Lambda Task States

6 Choice States

1 Fail State

“I want try/catch/finally”

Page 38: 使用 AWS Step Functions 開發 Serverless 服務

"Access Media": {

"Type": "Task",

"Resource": "arn:aws:lambda:eu-central-

1:123456789012:function:FindMedia",

"TimeoutSeconds": 2,

"Next": "Graceful Exit",

"Retry": [

{

"ErrorEquals": [ "States.Timeout" ],

"IntervalSeconds": 2, "MaxAttempts": 2, "BackoffRate": 1.5

}

],

"Catch": [

{ "ErrorEquals": [ "States.ALL" ], "Next": "Clean Up" }

]

},

Page 39: 使用 AWS Step Functions 開發 Serverless 服務

“I have code that runs for hours”

We need to gather data from our

production line, in units of 8-hour shifts.“

Page 40: 使用 AWS Step Functions 開發 Serverless 服務

"NextShift": {

"Type": "Wait",

"TimestampPath": "$.ShiftStart",

"Next": "Gather Plant Data"

},

"Gather Plant Data": {

"Type": "Task",

"Resource":

"arn:aws:states:ap-northeast-1:123456789012:activity:PlWatch",

"TimeoutSeconds": 30000,

"HeartBeatSeconds": 120,

"Next": "Clean up"

}

Page 41: 使用 AWS Step Functions 開發 Serverless 服務

“I want to sequence functions”

“I want to select functions based on data”

“I want to retry functions”

“I want try/catch/finally”

Is this you?

“I have code that runs for hours”

“I want to run functions in parallel”

Page 42: 使用 AWS Step Functions 開發 Serverless 服務

Live Demo

Page 43: 使用 AWS Step Functions 開發 Serverless 服務

Thank you!

[email protected]

Page 44: 使用 AWS Step Functions 開發 Serverless 服務

Remember to complete

your evaluations!