使用 AWS Step Functions 開發 Serverless 服務

Post on 19-Jan-2017

63 views 5 download

Transcript of 使用 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

What to Expect from the Session

進到無伺服器時代

AWS Step Functions

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

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

Live Demo

進到無伺服器時代

region

Availability Zone A

Web Tier Application Tier Master DB

Standby DB

Availability Zone B

Web Tier Application Tier

Traditional 3-Tier Web App

region

Static

Content

Dynamic

Content

API Gateway Lambda DynamoDB

S3

Serverless Website

而價格呢?

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.

Bustle.com

• 52 million monthly users

• 100 million events daily

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

Bustle.com

• 52 million monthly users

• 100 million events daily

• 84% cost savings

• 0 servers

• 0 operating system patches

• Automatic scaling

λλ

λDBMS

λλ

λλ

λ

λ λ

λ

λ

Queue

Modern

Serverless

app

Modern

Serverless

app

“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”

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.

Coordination by method call

λ λ

λ

λ

λλ

λ

Coordination by function chaining

λ

λλ

λλλ

λ

Coordination by database

λλ

λ

λ

λλ

λ

Coordination by queues

λ

λ

λ

λ λλ

λ

Coordination must-haves

• Scales out

• Doesn’t lose state

• Deals with errors/timeouts

• Easy to build & operate

• Auditable

AWS Step Functions

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

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

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

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

}

}

}

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

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

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

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

運作的細節監看與稽核

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

AWS Step Functions

可以幫我做什麼事?

“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

“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

“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.

{

"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

}

}

}

“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.“

“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

13 AWS Lambda Task States

6 Choice States

1 Fail State

“I want try/catch/finally”

"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" }

]

},

“I have code that runs for hours”

We need to gather data from our

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

"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"

}

“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”

Live Demo

Thank you!

yianhan@amazon.com

Remember to complete

your evaluations!