Step Functionsワークフローの書き方

はじめに

FundastA Inc.の鈴木です。

StepFunctionsのワークフローをyamlファイルで書く場面があり、理解するのに時間がかかったため、備忘録として記載します。

StepFunctionsとは?

AWSの機能でLambdaやSNSなどのサービスを用いて、ワークフローを作成し、定期的な実行を行うことができる機能です。

例えば1日1回定期的にDynamoDBからデータを取得し、ログを出すことなどができます。

ドキュメント:AWS Step Functions とは?

書き方

yamlファイルでStepFunctionsを記載する方法を記載します。

Type

こちらにはType(State)の種類を記載します。

Stateの種類

フィールド 内容
Task ひとつの処理単位
Wait 処理をストップする時間
Pass 入力値をそのまま出力する
Parallel 並列処理
Choice 条件分岐
Map 配列の要素ごとに処理を実行
Fail 実行結果を失敗とする
Succeed 実行結果を成功とする

主に使用したStateで、どのように使用したか記載します。

Task:Lambda実行時に使用していました。

Wait:Wait前の処理(データ取得や加工)に時間がかかる場合、処理をストップすることに使用したりしました。

Fail:Lambda失敗時の分岐に使用していました。

Map:配列で取得した値をそれぞれの要素ごとに同じ処理(Lambda)でデータを加工するのに使用していました。

Taskの詳細内容

TypeにTaskを選択するとフィールドで名前やARNの記載をする必要があります。

どのようなフィールドがあるのかを記載します。

フィールド 内容
Name Tags
Resource URIを呼び出すサービスのARN
InputPath 値をStateに渡す
Parameters JSON形式でStateに値を渡す
ResultPath Stateの実行結果をどのようなフィールド名で受け取るかを指定
OutputPath 次のStateに渡す値を指定する
Retry Stateでランタイムエラーが発生した場合の再試行
Catch Retryが定義されていない場合に実行される処理
TimeoutSeconds 処理をタイムアウトさせる時間
HeartbeatSeconds ハートビートの間隔が指定した時間を超えた場合に失敗させる

主にLambdaを実行する際に使用していたのはInputPath、ResultPath、Catchを主に使用していました。

Lambdaの場合データを取得し、加工することが多かったので、インプット(InputPath)は何かやLambdaを処理した結果値は何が出力(ResultPath)されるかを記載することが多かったです。

Catchは、Lambda処理でエラーが起こった際に使用しました。

下記に記載例を載せます。

Lambdaで生じるエラーを網羅してあげて、エラーが起こっても再度リトライさせてあげるような形にしています。

※StartAtは開始点となっているので、書き出しはStartAtになるかと思います。

 

おわりに

yamlファイルでStepFunctionsを記載する方法は、細かい話をすると他にも色々あります。

全てを記載すると長くなってしまうので、実務の中で使用したフィールドなどを中心に記載しました。

少しでも参考にしていただければ、幸いです。

参考サイト

以下、下記のサイトがyamlファイルで記載するメリットや図で分かりやすく記載されています。

また上記以外の使用方法なども記載されているので、参考にさせていただきました。

AWS SAMがStep Functionsに対応しました!

Step Functionsのステータス(State)用語についての説明と使い方についてまとめてみました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA