見出し画像

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回まで試行します。


ここまでお読みいただきありがとうございました!!

いいなと思ったら応援しよう!