AWS Step FuntionsでAmazonステートメント言語入門

AWS Step FuntionsでAmazonステートメント言語入門

Step Functionsを使うにはAmazonステートメント言語というJSON形式の言語を勉強しておく必要があります。

と言ってもすごく簡単です。以下は一番簡単なAmazonステートメント言語です。

{
  "StartAt": "HelloWorlds", // この値と
  "States": {
    "HelloWorlds": { // この値は同じにする
      "Type": "Pass", // Typeは必須
      "Result": "Hello World!",
      "End": true
    }
  }
}

ビジュアルワークフローはこんな感じになります。

AWS Step FuntionsでAmazonステートメント言語入門

type:passにすると単純にインプットに対してアウトプットするだけになります。

実行するとこんな感じで成功失敗などがわかります。

AWS Step FuntionsでAmazonステートメント言語入門

Lambdaを呼び出す

type:taskにすることによってLambdaを呼び出すことが出来ます。AWS Step FuntionsでAmazonステートメント言語入門

{
  "StartAt": "Lambda",
  "States": {
    "Lambda": {
      "Type": "Task", // TaskにしたらResourceは必須
      "Resource": "arn:aws:lambda:xxxx:xxxx:function:sample-lambda:$LATEST",
      "End": true
    }
  }
}

ビジュアルワークフローはこんな感じになります。

AWS Step FuntionsでAmazonステートメント言語入門

実行します。

AWS Step FuntionsでAmazonステートメント言語入門

こんな感じでLambdaを実行することが出来ました。

Lambdaの後続処理でLambdaを実行する

Step FunctionsではLambdaをパラレルで実行したり、Lambdaが終わった結果によって後続の処理を分岐したりと、処理をいろいろと記述する事が可能です。

ここでは単純にLambdaの次にLambdaを直列実行する例をAmazonステートメント言語で書いてみます。

{
  "StartAt": "Lambda-A",
  "States": {
    "Lambda-A": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:xxx:xxx:function:sample-lambda-a:$LATEST",
      "Next":"Lambda-B" // Nextで次のタスクを指定する
    },
    "Lambda-B": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:xxx:xxx:function:sample-lambda-b:$LATEST",
      "End": true
    }
  }
}

“Next”では、現在の状態が終了するときに実行される次の状態の名前を指定します。

ビジュアルワークフローはこんな感じになります。

AWS Step FuntionsでAmazonステートメント言語入門

実行します。

AWS Step FuntionsでAmazonステートメント言語入門

こんな感じでLambdaを実行することが出来ました。

パラレルでLambdaを実行する

Step Functionsではパラレル処理も定義する事が可能です。

"Type": "Parallel"とします。

{
  "StartAt": "Lambda-Parallel",
  "States": {
    "Lambda-Parallel": {
    "Type": "Parallel",
    "Next": "Final",
    "Branches": [
      {
        "StartAt": "Lambda-A",
        "States":{
          "Lambda-A":{
            "Type": "Task",
            "Resource": "arn:aws:lambda:xxx:xxxx:function:sample-lambda1:$LATEST",
            "End": true
          }
        }
      },
      {
        "StartAt": "Lambda-B",
        "States":{
          "Lambda-B":{
          "Type": "Task",
          "Resource": "arn:aws:lambda:xxx:xxxx:function:sample-lambda:$LATEST",
          "End": true
        }
      }
    }
    ]
  },
    "Final": {
      "Type":"Pass",
      "End": true
    }
  }
}

ビジュアルワークフローはこんな感じになります。

AWS Step FuntionsでAmazonステートメント言語入門

実行します。

AWS Step FuntionsでAmazonステートメント言語入門

リトライ回数を設定する

Step FunctionsではTaskにリトライ回数などを指定することができます。

{
  "StartAt": "Error-Lambda",
  "States": {
    "Error-Lambda": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:xxx:xxxx:function:error-sample:$LATEST",
      "Retry": [
        {
          "ErrorEquals": [
            "States.ALL"
          ],
          "IntervalSeconds": 1,
          "MaxAttempts": 2,
          "BackoffRate": 2.0
        }
      ],
      "End": true
    }
  }
}

以下、エラー処理の各フィールドの意味です。

 フィールド  意味
ErrorEquals  エラー名に一致する空でない文字列の配列です
IntervalSeconds  最初の再試行前の秒数を表す整数
MaxAttempts  再試行の最大回数を表す正の整数
BackoffRate  各試行間で再試行間隔が増加する乗数

エラー処理

リトライさせて、処理中の動きを見てみます。

AWS Step FuntionsでAmazonステートメント言語入門

コメント

タイトルとURLをコピーしました