LoginSignup
1
0

Stepfunctionのステートマシンでコールバック設定をする

Last updated at Posted at 2023-10-25

概要

AWSのStepfunctionで、人による承認作業や何らかの処理を待ちたい要件があった場合、「コールバック」というのを利用できる。コールバック設定をするとタスクトークンがAWSの何らかのサービスに出力され、待ちたい処理が終わったらそのトークンを取り出し、Stepfunctionに投げ返すと処理が再開するといった仕組みである。

AWSの公式ドキュメントではSQSを利用した例があったが、他にはLambda/SNS/DynamoDB/S3/Stepfunctionといったものにもタスクトークンを出力させられることが可能であった。(おそらく他にもあると思われる。)

Stepfunction ステートマシンのフロー図

Stepfunctionフロー図2.png
DynamoDB PutItemでコールバック設定をしており、ここでフローを停止することができる。
タスクトークンをsend-task-successで返すとCodebuild StartBuildに進み、
SendTaskFailureで返すとSNS Publishに進むフロー図。

コールバック設定の方法

  1. タスクトークン出力できるAWSサービスを選ぶ。(以下は例)
    SQS:SendMessage
    Lambda:Invoke
    SNS:Publish
    DynamoDB:PutItem
    S3:Putobject
     

  2. Wait for callbackオプションにチェックを入れる。
    Stepfunction設定画面.png
    ※DynamoDBのときはIntegration typeをAWS SDKにするとWait for callbackを選択できるようになります。

 
3. エラーハンドリングのフローを追加する。(設定しなくても大丈夫)
Stepfunctionフロー図エラー.png
※上記はエラーのすべての場合はSNS Publishに進むように設定している例です。

タスクトークンの出力例

ステートマシンを保存して実行すると、
サービスにより出力形式が異なるがおおよそ以下のJSON形式で出力されます。
S3だとファイルに出力、SQSはキューの中に、DynamoDBはテーブル内に出力されます。

{
	"MessageTitle": "Task started by Step Functions. Waiting for callback with task token.",
	"TaskToken": "AQCEAAAAKgAAAAMAAAAAAAAAAeRy・・・・・・・・・・・・・・・Khis5Rsx0ONGo2"
}

タスクトークンの返却方法

AWS CLIで返す場合の例は以下です。

aws stepfunctions send-task-success --task-token AQCEAAAAKgAAAAMAAAAAAAAAAeRy・・・ --task-output {} --region ap-northeast-1

TaskTokenの文字列"AQCEAAAAKgAAAAMAAAAAAAAAAeRy・・・"を抜き出して「send-task-success」を実行するとStepfunctionにトークンが返されフローが再開する。
処理を失敗とさせたい場合は「SendTaskFailure」を呼び出す形になると思う。

DynamoDBへのタスクトークン出力設定方法

手探りでやった結果、API Parametersに以下json投入する形になります。

{
  "TableName": "XXXXTableXXXX",
  "Item": {
    "XXXXtasktokenXXXX": {
      "S": {
        "MyTaskToken.$": "$$.Task.Token"
      }
    }
  }
}

変更箇所
・XXXXTableXXXXは自身で作成されたDynamoDBのテーブル名に置き換えてください。
・XXXXtasktokenXXXX(Item直下の4行目のところ)は作成したテーブルのカラム名に置き換えてください。

1
0
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
1
0