Table of Contents
はじめに
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で生じるエラーを網羅してあげて、エラーが起こっても再度リトライさせてあげるような形にしています。
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26  | 
						StartAt: TestRequest States:  TestRequest:   Type: Task   Resource: ${lambda_arn}   InputPath: $   Catch:   //リトライしたいエラーを定義    - ErrorEquals:       // 500エラーが起こった際のException       - LambdaServiceException        - Lambda.AWSLambdaException       - Lambda.SdkClientException      ResultPath: null //元の入力値を直接出力      Next: Failed    - ErrorEquals:       //Lambdaでの未処理エラー       - Lambda.Unknown      ResultPath: null      Next: Failed    - ErrorEquals:       // あらゆる既知のエラー(上記記載のエラー以外)       - States.ALL      ResultPath: null      Next: Failed   End: true  | 
					
※StartAtは開始点となっているので、書き出しはStartAtになるかと思います。
おわりに
yamlファイルでStepFunctionsを記載する方法は、細かい話をすると他にも色々あります。
全てを記載すると長くなってしまうので、実務の中で使用したフィールドなどを中心に記載しました。
少しでも参考にしていただければ、幸いです。
参考サイト
以下、下記のサイトがyamlファイルで記載するメリットや図で分かりやすく記載されています。
また上記以外の使用方法なども記載されているので、参考にさせていただきました。
                