[アップデート]Step Functionsに高パフォーマンス低コストのExpressワークフローが追加されました! #reinvent

re:Invent 2019にてStep Functionsのアップデートがあり、高パフォーマンス低コストのExpressワークフローが登場しました!これにより、1秒あたり100,000イベントを超える呼び出しレートがサポートされるため、短期間で大量処理が行えるステートマシンの作成が可能になりそうです。
2019.12.04

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Step Functionsにアップデートがあり、短期間で大量な処理が行えるExpressワークフローが新機能として登場しました!

1秒あたり100,000イベントを超える呼び出しレートをサポートするよう設計されており、従来のステートマシン(以下、標準タイプ)の毎秒2,000イベントを大幅に超えるパフォーンスが出せそうです。

標準タイプとは異なる料金体系で、実行回数、実行時間、メモリ消費量に基づく料金が設定されています。その他についても異なる点がありますので、詳細については以下ドキュメントをご確認ください。

本エントリで高パフォーマンスの側面をガッツり検証したいところではありますが、秒間10万を投げるようなイベントがサクッとできそうになかったので、負荷はかけずExpressワークフローの作成から実行までをやってみたいと思います。

やってみた

ステートマシン定義

StepFunctionsコンソールにてステートマシンの作成をクリックすると、項目にタイプが追加されておりExpressが選択できるようになっています。

ステートマシン定義自体は、アクティビティタスクを除き、標準ワークフローの多くがサポートされていますので、大きな違いは見当たりません。 ここではLambda関数を起動するだけのステートマシンを定義しました。

いちおう定義も貼っておきます。

{
  "Comment": "Test Express workflow",
  "StartAt": "StartState",
  "States": {
    "StartState": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:ap-northeast-1:XXXXXXXXXXXX:function:TestFunc",
      "End": true
    }
  }
}

CloudWatch Logs

標準ワークフローのようにStepFunctions内で実行履歴が記録されないため、Expressワークフローでは、CloudWatch Logsへのロギング設定が必要となります。定義はこれだけなので、ステートマシンを作成します。

これで、StepFunctions Expressワークフローの準備が整いましたので、呼び出しもととなるイベントソースを作成します。

EventBridge

ここでは、S3に対するすべてのイベントをトリガーにExpressワークフローを実行してみたいと思います。EventBridgeのコンソールより、以下のイベントルールを作成します。 下記枠内にて、先程作成したExpress ワークフローとしてイベントターゲットとして選択しています。

イベントルールが作成できましたので、Expressワークフロー実行の準備が整いました。

Expressワークフロー実行(S3イベント)

任意のバケットにオブジェクトをプットしましたので、実行結果を見てみたいと思います。

ステートマシンの詳細画面を開くと標準タイプと少々異なっていました。

標準タイプ

Expressワークフロー

Expressワークフローでは、StepFunctions内で実行履歴が確認できないので、CWLがリンクされていました。

少々ごにょごにょしていたので、多数ログストリームが作成されてしまいました。

出力はこのような感じでExpressワークフローのインプットイベント等が確認できました。

また、CloudWatch メトリクスも確認することができました。

さいごに

現在、re:Inventナウでアップデートが大量にきており、その中の一つにStep Functionsのアップデートがありました。明後日にWernerによるKeynoteが控えているので、ワンちゃんStepFunctionsの他のアップデートにも期待してみたいと思います。

参考