レック・テクノロジー・コンサルティング株式会社TECH BLOG

【AWS】Step Functionsで込み入った処理を簡単実装

AWS上で処理を実行する...というと Lambda が思い浮かびますが、Step Functions という非常に便利なサービスがあります。Step Functions は名前の通り、複数の処理を繋げて段階的に実行することができるサービスです。

Step Functions は様々なサービスと連携でき、EC2を起動したり、DynamoDBからデータをエクスポートしたり、Lambda を実行したり、別の Step Functions を実行したり...などいろいろなことができます。ただ実行するだけでなく、条件分岐やエラーハンドリング機能まで備えている優れものです。

今回はそんな Step Functions について、実際の使用例をもとにご紹介していきます。

ステートマシン作成

コンソールで「Step Functions」の管理画面を開き、「ステートマシンの作成」をクリックします。

image.png

以下のような作成画面が開きます。今回は一から作るため「空白から作成」、ステートマシンのタイプは「標準」としています。

image-1.png

「続行」をクリックすると、ステートマシンの編集画面が開きます。

image-2.png

画面中央部に表示されているのが視覚化されたワークフローで、ここに左側のメニューのアクションやフローをドラッグ&ドロップして処理を構築していきます。簡単にご紹介すると、それぞれ以下のような内容です。

今回は、DynamoDB にある社内のナレッジデータを S3 にエクスポートする処理を作成します。DynamoDB から S3 へのエクスポートを実行し、10分おきにエクスポート状況を確認して完了していれば正常終了とします。

作成したワークフローの完成形がこちら。

image-3.png

ひとつひとつ詳しく見ていきます。

DynamoDB からのエクスポート部分は、アクションで「DynamoDB: ExportTableToPointInTime」を選択しています。

image-4.png

「引数と出力」タブで、エクスポートAPIに渡す引数を設定します。TableArnS3Bucketなどを設定しています。

image-5.png

どういう項目が設定できるの?と疑問に思われるかもしれません。引数欄に「""」を入力すると候補が出てくるので、それをヒントに設定することができます。より詳細な情報については、こちらのようなAPIリファレンスが参考になります。

image-6.png

次はWaitの設定です。Waitは処理を一定時間待機させることができます。今回の場合、10分毎にエクスポート状況の確認をしたいので「一定の時間間隔を待機」で600秒としています。

image-7.png

次は「DynamoDB: ListExports」によるエクスポート状況の監視です。maxResults1TableArnに対象テーブルを指定することで、最新のエクスポート状況を取得することができます。

image-8.png

ここで注目いただきたいのが「変数」部分です。今回、エクスポート状況をもとに監視を継続するか終了するかを決定したいので、後続の条件分岐で使うための変数を設定しています。

image-9.png

今回はexportStatusという変数を設定し、$states.result.ExportSummaries[0].ExportStatusの値を割り当てるようにしました。

$states.resultというのは成功したAPIの応答を表すものであり、JSON形式のレスポンスからExportStatusの値を取り出すようにしています。{% ... %}はJSONata式といい、ワークフロー内の変数を参照するためのものです。

レスポンスの内容などは、右上の「テスト状態」をクリックして確認することができます。

image-10.png

image-11.png

※APIのレスポンスは、公式ドキュメントで確認可能です。例えば、DynamoDB のエクスポートステータスの値を知りたい場合、こちらに記載があります。

上記で定義した変数exportStatusは、後続の任意のノードで参照することができます。

次が監視の継続判断を行う条件分岐です。フローから「Choice」を選び、条件を設定しています。

image-12.png

今回設定した条件は以下の通りです。

  • デフォルト:Fail
  • exportStatusCOMPLETEDの場合:Success
  • exportStatusIN_PROGRESSの場合:Wait1に戻る

上記により、10分毎にエクスポート状態を確認して完了なら正常終了、実行中なら継続監視、エラーが発生した場合は異常終了という処理が実現できます。

動作確認

ステートマシンの作成が完了したら、「実行を開始」で実行できます。

image-13.png

実行が開始すると、実行履歴に記録が追加されます。

まとめ

Step Functions の使い方についてご紹介しました。

Step Functions は多くのサービスと連携しており、複数の処理を繋げて段階的に実行することができます。単純なタスクから条件分岐やポーリングを伴う複雑なタスクまで幅広く対応しており、様々なユースケースに適用可能です。

今回は詳しく触れませんでしたが、エラー発生時のリトライや例外処理、タイムアウトやハートビートの設定なども処理ごとに細かく設定することができます。

特別な要件がなければ Lambda を使わずともたいていの処理はできてしまうので、今まで Step Functions を使ったことがなかったという方はぜひ試してみてください。

参考

この記事をシェアする

  • Facebook
  • X
  • Pocket
  • Line
  • Hatena
  • Linkedin

資料請求・お問い合わせはこちら

ページトップへ戻る