アジェンダ
- Amazon States Language とは
- 共通 State フィールド
- Task
- Choice
- Wait
- Succeed
- Fail
- Parallel
- Map
- Pass
1. Amazon States Language 란
ステートマシンを定義するのに使用されるJSONベースの構造化された言語
2. 共通 State フィールド
定義
- Type(必須)
- Task, Choice, Wait などのステータスを定義するときに使用する
- Next
- 現在のステータスを終了し、次のステータスに移動する
- End
- Comment
- InputPath
- OutputPath
例
{
"Comment": "An example of the Amazon States Language using wait states",
"StartAt": "FirstState",
"States": {
"FirstState": {
"Type": "Pass",
"Result": "FirstState",
"Next": "LambdaFunctionState"
},
"LambdaFunctionState": {
"Type": "Task",
"Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:FUNCTION_NAME",
"End": true
}
}
}
3. Task
定義
- 実行される単一作業単位
- 直接 Lambda 関数を呼び出して作業
- 次のフィールドを使用可能
- Resource(必須)
- Parameters
- ResultPath
- Retry
- Catch
- TimeoutSeconds
- HeartbeatSeconds
例
{
"Comment": "An example of the Amazon States Language using a Task state.",
"StartAt": "TaskState",
"States": {
"TaskState": {
"Type": "Task",
"Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:FUNCTION_NAME",
"End": true
}
}
}
4. Choice
定義
- 分岐処理が可能で、And や Or などの比較演算子が利用可能
- 次のフィールドを使用可能
例
{
"Comment": "An example of the Amazon States Language using a choice state.",
"StartAt": "ChoiceState",
"States": {
"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:REGION:ACCOUNT_ID:function:OnFirstMatch",
"Next": "ReultState"
},
"SecondMatchState": {
"Type" : "Task",
"Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:OnSecondMatch",
"Next": "ReultState"
},
"DefaultState": {
"Type" : "Task",
"Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:OnSecondMatch",
"Next": "ReultState"
},
"ReultState": {
"Type": "Task",
"Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:FUNCTION_NAME",
"End": true
}
}
}
5. Wait
定義
- 続行を指定された時間遅延させる
- 相対時間 (状態が開始してからの秒数で指定) と絶対時間 (タイムスタンプで指定) のいずれかを選択可能
- 次のフィールドを使用可能で、どちらかを指定すべき
- Seconds
- Timestamp
- SecondsPath
- TimestampPath
例
{
"Comment": "An example of the Amazon States Language using wait states",
"StartAt": "wait_seconds",
"States": {
"wait_seconds": {
"Type": "Wait",
"Seconds": 10,
"Next": "wait_timestamp"
},
"wait_timestamp": {
"Type": "Wait",
"Timestamp": "2015-09-04T01:59:00Z",
"Next": "wait_timestamp_path"
},
"wait_timestamp_path": {
"Type": "Wait",
"TimestampPath": "$.expirydate",
"Next": "wait_seconds_path"
},
"wait_seconds_path": {
"Type": "Wait",
"SecondsPath": "$.expiryseconds",
"End": true
}
}
}
6. Succeed
定義
- 実行を正常に中止
- 処理が終了した状態になるため、 End フィールドや Next フィールドは必要ない
例
{
"Comment": "An example of the Amazon States Language using Succeed states",
"StartAt": "Process1",
"States": {
"Process1": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:XXXXXXXXXXXX:function:Process1",
"Next": "ChoiceStep"
},
"ChoiceStep": {
"Type": "Choice",
"Choices": [{
"Variable": "$.processResult",
"StringEquals": "SuccessProcess",
"Next": "SuccessProcess"
}, {
"Variable": "$.processResult",
"StringEquals": "Process2",
"Next": "Process2"
}]
},
"SuccessProcess": {
"Type": "Succeed"
},
"Process2": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:XXXXXXXXXXXX:function:Process2",
"Catch": [{
"ErrorEquals": [
"HandledError"
],
"Next": "FailedProcess"
}],
"Next": "Process3"
},
"FailedProcess": {
"Type": "Fail"
},
"Process3": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:XXXXXXXXXXXX:function:Process3",
"End": true
}
}
}
7. Fail
定義
- エラーにより実行を中止
- エラーにより処理が終了した状態になるため、 End フィールドや Next フィールドは必要ない
- 次のフィールドを使用可能
例
{
"Comment": "An example of the Amazon States Language using Succeed states",
"StartAt": "Process1",
"States": {
"Process1": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:XXXXXXXXXXXX:function:Process1",
"Next": "ChoiceStep"
},
"ChoiceStep": {
"Type": "Choice",
"Choices": [{
"Variable": "$.processResult",
"StringEquals": "SuccessProcess",
"Next": "SuccessProcess"
}, {
"Variable": "$.processResult",
"StringEquals": "Process2",
"Next": "Process2"
}]
},
"SuccessProcess": {
"Type": "Succeed"
},
"Process2": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:XXXXXXXXXXXX:function:Process2",
"Catch": [{
"ErrorEquals": [
"HandledError"
],
"Next": "FailedProcess"
}],
"Next": "Process3"
},
"FailedProcess": {
"Type": "Fail"
},
"Process3": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:XXXXXXXXXXXX:function:Process3",
"End": true
}
}
}
8. Parallel
定義
- 並列処理が可能
- 次のフィールドを使用可能
- Branches (必須)
- ResultPath
- Retry
- Catch
例
{
"Comment": "An example of the Amazon States Language using a parallel state to execute two branches at the same time.",
"StartAt": "Parallel",
"States": {
"Parallel": {
"Type": "Parallel",
"Next": "Final State",
"Branches": [
{
"StartAt": "Wait 10s",
"States": {
"Wait 10s": {
"Type": "Wait",
"Seconds": 10,
"End": true
}
}
},
{
"StartAt": "Pass State",
"States": {
"Pass State": {
"Type": "Pass",
"Next": "Wait 5s"
},
"Wait 5s": {
"Type": "Wait",
"Seconds": 5,
"End": true
}
}
}
]
},
"Final State": {
"Type": "Pass",
"End": true
}
}
}
9. Map
定義
- 動的並列処理が可能
- 入力配列の各要素に対して同じ段階で実行可能
- 次のフィールドを使用可能
- Iterator (必須)
- ItemsPath
- MaxConcurrency
- ResultPath
- Retry
- Catch
例
{
"Comment": "An example of the Amazon States Language using Map states",
"StartAt": "MapState",
"States": {
"MapState": {
"Type": "Map",
"End": true,
"Iterator": {
"StartAt": "Customer",
"States": {
"Customer": {
"Type": "Parallel",
"End": true,
"Branches": [
{
"StartAt": "CustomerA",
"States": {
"CustomerA": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:XXXXXXXXXXXX:function:CustomerA",
"End": true
}
}
},
{
"StartAt": "CustomerB",
"States": {
"CustomerB": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:XXXXXXXXXXXX:function:CustomerB",
"End": true
}
}
}
]
}
}
}
}
}
}
10. Pass
定義
- ワークフローを構築、デバッグする際に使用
- 入力を処理せずに出力に伝達
- 次のフィールドを使用可能
- Result
- ResultPath
- Parameters
例
{
"Comment": "An example of the Amazon States Language using a pass state.",
"StartAt": "ChoiceState",
"States": {
"ChoiceState": {
"Type" : "Choice",
"Choices": [
{
"Variable": "$.foo",
"NumericEquals": 1,
"Next": "TaskState"
},
{
"Variable": "$.foo",
"NumericEquals": 2,
"Next": "PassState"
}
]
},
"TaskState": {
"Type" : "Task",
"Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:FUNCTION_NAME",
"Next": "ReultState"
},
"PassState": {
"Type" : "Pass",
"Result": "just pass",
"Next": "ReultState"
},
"ReultState": {
"Type": "Task",
"Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:FUNCTION_NAME",
"End": true
}
}
}