Upload
shuji-kikuchi
View
602
Download
1
Embed Size (px)
Citation preview
AWS Step Functions 実践
AWS Premeir Night #3
クラスメソッド株式会社菊池 修治
• 菊池 修治(きくち しゅうじ)–クラスメソッド AWS事業
– Solutions Architect
– AWS Certified in All 5!
– SIer à 製造業 à クラスメソッド
–好きなAWSサービス• VPC、S3、Step Functions
⾃⼰紹介
Agenda
• AWS Step Functions とは
• Amazon State Language
• Step Functions の実⾏– State Machine の実⾏⽅法
– Activity Task の実⾏
Agenda
• AWS Step Functions とは
• Amazon State Language
• Step Functions の実⾏– State Machine の実⾏⽅法
– Activity Task の実⾏
AWS Step Functions
re:Invent 2016 にて発表!
AWS Step Functions• 「Step Functionsやってみた」ブログ公開中
– http://dev.classmethod.jp/referencecat/aws-step-functions/
AWS Step Functions
• 分散されたアプリケーションをビジュアルにコーディネート– Lambdaなどの複数アプリケーションを⼀連の
ワークフローとして定義・実⾏
–処理の流れ・ステップをビジュアル化
AWS Step Functions
AWS Step Functions
• ユースケース–シーケンシャルなアプリケーションの実⾏
–タスクの並列化
–処理の条件分岐
–エラーハンドリング
–⻑時間の実⾏
AWS Step Functions
• 利点–アプリケーション間を疎結合に
–汎⽤性・再利⽤性の向上
–実⾏結果の管理
AWS Step Functions
• コンポーネント– State Machine:定義された⼀連のフロー
– State Language:State Machineを定義する⾔語
Agenda
• AWS Step Functions とは
• Amazon State Language
• Step Functions の実⾏– State Machine の実⾏⽅法
– Activity Task の実⾏
Amazon State Language• JSONで記述
{
"Comment": "A Retry example of the Amazon States Language using an AWS Lambda Function",
"StartAt": "HelloWorld",
"States": {
"HelloWorld": {
"Type": "Task",
"Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:FUNCTION_NAME",
"Retry": [
{
"ErrorEquals": ["HandledError"],
"IntervalSeconds": 1,
"MaxAttempts": 2,
"BackoffRate": 2.0
},
{
"ErrorEquals": ["States.TaskFailed"],
"IntervalSeconds": 30,
"MaxAttempts": 2,
"BackoffRate": 2.0
},
{
"ErrorEquals": ["States.ALL"],
"IntervalSeconds": 5,
"MaxAttempts": 5,
"BackoffRate": 2.0
}
],
"End": true
}
}
}
Amazon State Language• State (= Step)をつなげてフロー(State Machine)
を作成
• ⼀度作成したState Machineは変更・修正できない
Amazon State Language• 7つの State– Task :アプリケーションの実⾏– Choice :分岐条件– Parallel :Taskの並列実⾏– Wait :待ち– Fail :異常終了– Succeed :正常終了– Pass :なにもしない
Amazon State Language• 7つの State– Task :アプリケーションの実⾏– Choice :分岐条件– Parallel :Taskの並列実⾏– Wait :待ち– Fail :異常終了– Succeed :正常終了– Pass :なにもしない
Amazon State Language• Task"TaskState": {
"Comment": "Task State example",
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:123456789012:function:HelloFunction"
"Next": "NextState",
"TimeoutSeconds": 300,
"Retry": [
{
"ErrorEquals": [ "ErrorA", "ErrorB" ],
"IntervalSeconds": 1,
"BackoffRate": 2,
"MaxAttempts": 2
}
]
}
Amazon State Language• Task"TaskState": {
"Comment": "Task State example",
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:123456789012:function:HelloFunction"
"Next": "NextState",
"TimeoutSeconds": 300,
"Retry": [
{
"ErrorEquals": [ "ErrorA", "ErrorB" ],
"IntervalSeconds": 1,
"BackoffRate": 2,
"MaxAttempts": 2
}
]
}
Amazon State Language• Task"TaskState": {
"Comment": "Task State example",
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:123456789012:function:HelloFunction"
"Next": "NextState",
"TimeoutSeconds": 300,
"Retry": [
{
"ErrorEquals": [ "ErrorA", "ErrorB" ],
"IntervalSeconds": 1,
"BackoffRate": 2,
"MaxAttempts": 2
}
]
}
Amazon State Language• Task"TaskState": {
"Comment": "Task State example",
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:123456789012:function:HelloFunction"
"Next": "NextState",
"TimeoutSeconds": 300,
"Retry": [
{
"ErrorEquals": [ "ErrorA", "ErrorB" ],
"IntervalSeconds": 1,
"BackoffRate": 2,
"MaxAttempts": 2
}
]
}
Amazon State Language• Choice
"ChoiceState": {"Type" : "Choice","Choices": [{"Variable": "$.foo","NumericEquals": 1,"Next": "FirstMatchState"
},{"Variable": "$.foo","NumericEquals": 2,"Next": "SecondMatchState”
}],"Default": "DefaultState"
},
• StringEquals• StringLessThan• StringGreaterThan• StringLessThanEquals• StringGreaterThanEquals• NumericEquals• NumericLessThan• NumericGreaterThan• NumericLessThanEquals• NumericGreaterThanEquals• BooleanEquals• TimestampEquals• TimestampLessThan• TimestampGreaterThan• TimestampLessThanEquals• TimestampGreaterThanEquals
Amazon State Language• Choice "ChoiceStateX": {
"Type" : "Choice","Choices": [{"Not": {"Variable": "$.type","StringEquals": "Private”
},"Next": "Public”
},{"And": [{"Variable": "$.value","NumericGreaterThanEquals": 20
},{"Variable": "$.value","NumericLessThan": 30}
],"Next": "ValueInTwenties”
}],"Default": "DefaultState”},
• Not• Or• And
Amazon State Language• Choice "ChoiceStateX": {
"Type" : "Choice","Choices": [{"Not": {"Variable": "$.type","StringEquals": "Private”
},"Next": "Public”
},{"And": [{"Variable": "$.value","NumericGreaterThanEquals": 20
},{"Variable": "$.value","NumericLessThan": 30}
],"Next": "ValueInTwenties”
}],"Default": "DefaultState”},
• Not• Or• And
Amazon State Language• Choice "ChoiceStateX": {
"Type" : "Choice","Choices": [{"Not": {"Variable": "$.type","StringEquals": "Private”
},"Next": "Public”
},{"And": [{"Variable": "$.value","NumericGreaterThanEquals": 20
},{"Variable": "$.value","NumericLessThan": 30}
],"Next": "ValueInTwenties”
}],"Default": "DefaultState”},
• Not• Or• And
Amazon State Language• Parallel–全ての分岐が完了
してから次のStateへ進む
"Parallel": {"Type": "Parallel","Next": "Final State","Branches": [{"StartAt": "Wait 20s","States": {"Wait 20s": {"Type": "Wait","Seconds": 20,"End": true
}}
},{"StartAt": "Wait 10s","States": {"Wait 10s": {"Type": "Wait","Seconds": 10,"End": true
}}
}]
},
Amazon State Language• Wait– Seconds– SecondsPath– Timestamp– TimestampPath
"wait_ten_seconds" : {"Type" : "Wait","Seconds" : 10,"Next": "NextState”
}
"wait_until" : { "Type": "Wait", "Timestamp": "2016-03-14T01:59:00Z", "Next": "NextState”}
"wait_until" : {"Type": "Wait","TimestampPath": "$.expirydate","Next": "NextState”
}
Agenda
• AWS Step Functions とは
• Amazon State Language
• Step Functions の実⾏– State Machine の実⾏⽅法
– Activity Task の実⾏
State Machine の実⾏• start-execution API
Step FunctionsState Machine
start-execution
State Machine の実⾏• start-execution API
Lambda Step FunctionsState Machine
start-execution
State Machine の実⾏• start-execution API
APIGateway
S3
SNS
Cloud WatchEvent
Lambda Step FunctionsState Machine
start-execution
State Machine の実⾏• 実⾏結果– State Machine ごとに管理
State Machine の実⾏• 実⾏結果– State Machine の実⾏毎に管理
State Machine の実⾏• 実⾏結果– State 毎に管理
Agenda
• AWS Step Functions とは
• Amazon State Language
• Step Functions の実⾏– State Machine の実⾏⽅法
– Activity Task の実⾏
Activity Taskの実⾏
• Lambda以外のアプリケーションの実⾏–EC2
–オンプレミス
• Pull型の実⾏–アプリケーションからポーリング
– LambdaはPush型
Activity Taskの実⾏• Activityの作成
Activity Taskの実⾏• Activityの作成
設定項⽬は名前だけARNが作成される
Activity Taskの実⾏• State Machineの作成{
"Comment": "An example using a Task state.",
"StartAt": "getGreeting",
"Version": "1.0",
"TimeoutSeconds": 300,
"States":
{
"getGreeting": {
"Type": "Task",
"Resource": "arn:aws:states:eu_central-1:123456789012:activity:get-greeting",
"End": true
}
}
}
Activity Taskの実⾏• アプリケーションからポーリング– Get-Activity-Task API
Polling
Get-Activity-Task--Activity ARN
--Worker Name (Option)
Worker
State Machine
Activity Taskの実⾏• State Machine実⾏
InputTaskToken
In progress
Get-Activity-Task--Activity ARN
--Worker Name (Option)
Worker
State Machine
Activity Taskの実⾏• 実⾏完了
Success
Send-Task-Success--Task-Token
--Output
Worker
State Machine
Activity Taskの実⾏• 分散アプリケーション
Workers
State Machines
まとめ• Step Functionsを使うことで分散アプリケーション
による複雑な処理を簡単に定義・実⾏・管理
• マイクロサービス化、サーバレス化
• Lambdaだけでなくサーバ上のアプリケーションも組み込み可能
classmethod.jp44