0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

みなさん、こんにちは!

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

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

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

ステートマシン作成

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

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

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

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

種類 説明
アクション EC2やLambdaの起動、API呼び出し、DBからのデータエクスポート、通知など
フロー 条件分岐、並列実行、Wait設定、成功/失敗のステータス設定など
パターン S3のデータ処理やジョブポーリングの雛形

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

動作確認

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

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

まとめ

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

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

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

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

参考

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?