![見出し画像](https://assets.st-note.com/production/uploads/images/154485697/rectangle_large_type_2_009089baa36af2c0e2fdb5564c44ee92.png?width=1200)
AWS_Step Functionsの並行処理とかエラーハンドリングとか #494
Step Functionsの設定に関するアプトプットの続きです。
こちらの2つの記事でメインのTask処理の部分については触れました。
今回は並行処理やエラーハンドリングについて簡単にコード例を示します。
並列処理
複数のLambda関数を並列に実行したり、配列に対して繰り返し処理を行う場合には、ParallelステートやMapステートを使います。
Parallelステート
複数のステートを同時に並列実行できるステートです。Branchesフィールドに複数のステートを定義できます。
各ステートは独立して処理され、全てのブランチが完了するまで次のステップには進みません。Parallelステートを使うと、並列実行の結果を1つのオブジェクトにまとめて次のステップに渡すことができます。
{
"StartAt": "ParallelState",
"States": {
"ParallelState": {
"Type": "Parallel",
"Branches": [
{
"StartAt": "FirstBranchTask",
"States": {
"FirstBranchTask": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:123456789012:function:FirstLambda",
"End": true
}
}
},
{
"StartAt": "SecondBranchTask",
"States": {
"SecondBranchTask": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:123456789012:function:SecondLambda",
"End": true
}
}
}
],
"Next": "FinalTask"
},
"FinalTask": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:123456789012:function:FinalLambda",
"End": true
}
}
}
Mapステート
配列に対して繰り返し処理を行うステートです。
指定された配列の各要素に対して指定した処理を行い、その結果を1つの配列として返します。例えば、複数のデータに対してECSタスクやLambda関数を一括実行するような処理に向いています。
{
"StartAt": "MapState",
"States": {
"MapState": {
"Type": "Map",
"ItemsPath": "$.inputArray",
"MaxConcurrency": 2,
"Iterator": {
"StartAt": "ProcessItem",
"States": {
"ProcessItem": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:123456789012:function:ProcessLambda",
"End": true
}
}
},
"End": true
}
}
}
以下のようなデータがinputArrayに格納されているとしたら、この各要素が渡されます。
{
"inputArray": [
{ "id": 1, "name": "Item1" },
{ "id": 2, "name": "Item2" },
{ "id": 3, "name": "Item3" }
]
}
エラーハンドリング
Step Functionsは、エラーハンドリングのメカニズムも提供しています。例えば、特定のエラーが発生した場合にリトライを行ったり、特定のステップに遷移させることができます。
リトライの設定
{
"StartAt": "FirstLambda",
"States": {
"FirstLambda": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:123456789012:function:FirstLambda",
"Retry": [
{
"ErrorEquals": ["Lambda.ServiceException"],
"IntervalSeconds": 2,
"MaxAttempts": 3,
"BackoffRate": 2.0
}
],
"Next": "SecondLambda"
},
"SecondLambda": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:123456789012:function:SecondLambda",
"End": true
}
}
}
この設定では、Lambda.ServiceExceptionが発生した場合、2秒後にリトライし、最大3回まで試行します。
ここまでお読みいただきありがとうございました!!