SPECIALIST

多様な専門性を持つNRIデジタル社員のコラム、インタビューやインサイトをご紹介します。

BACK

AWS Step Functions 待望の「リドライブ」機能がGAされました

こんにちは、NRIデジタルの島です。

「AWS Step Functions(以下 Step Functions)」に、ついに待望の「リドライブ機能」がリリースされました。
AWS Step Functions が失敗からのワークフローの再開をサポート開始

過日掲載した以下ブログの中で、Step Functionsをバッチジョブワークフローの実行環境として利用する上での課題の一つに「失敗したジョブから再実行が出来ない」ことを挙げ、その回避方法として、外部のデータストア(記事では「Amazon DynamoDB」を利用)にステートを持たせる方法を紹介しました。
AWS Step Functionsでバッチジョブワークフローの実行基盤を構築する | TECH | NRI Digital

ただ、上記ブログの回避策では構成やフローが煩雑になることが懸念されます。リドライブ機能により、ステート管理の為の余計なリソースは不要で、シンプルに失敗したジョブから再実行できるようになります。

リドライブ機能を試す

では、リドライブ機能を試しながら、前述したブログで紹介したバッチジョブワークフローがどのようにシンプルになるか確認していきます。

以下が回避策として組み立てたバッチジョブワークフローになります。

実行したいジョブは「GeneralRandomintValue」と「GeneralRandomintValue2」という2つのジョブのみですが、実行結果を判断する処理が必要となる為、このように煩雑なフローになっていました。そこで、リドライブ機能を前提としたフローにすると、実行結果のステート保存(RegisterResult/RegisterResult2)、ステート取得(GetStatus/GetStatus2)、ステートチェック(ChoiceState/ChoiceState2)が不要となり、以下のように非常にシンプルなものになります。

上記バッチジョブワークフローにて、リドライブ機能を確認してみます。

① 「GeneralRandomintValue2」ジョブを失敗させる

② 「GeneralRandomintValue2」ジョブを再実行

③ 正常終了

以上のように、失敗したジョブから再実行できることが確認できました。

リドライブ機能は未処理の予期しないエラーを想定した再実行機能です。想定されるエラーに対して明示的にエラーハンドリング(エラーをキャッチしてリトライしたり、別タスクを実行したり、Failステートにルーティングしたりなど)しているフローはリドライブ対象外になります。また、イミュータブルな設計思想になっており、失敗したタスク以外のタスクから再実行したり、エラー時のInputを変更して再実行することはできません。仮にInput自体がエラー原因である場合、何度再実行してもエラーとなるので注意してください。
この辺りの話は、以下AWS公式ブログにわかりやすく記載されておりますので是非ご覧ください。
Introducing AWS Step Functions redrive to recover from failures more easily | Amazon Web Services

また、前述したブログの最後に紹介した非同期方式含めた最終形のバッチジョブワークフローについても、親ジョブネットから呼ばれる子ジョブが、以下のようにシンプルに実装できるようになります。



以上の通り、「リドライブ」機能のリリースにより、かなりシンプルにワークフローが実装できることが確認できました。是非活用していきたいと思います。

以上