Open15
Step Functions 学習メモ

AWS Step Functions とは - AWS Step Functions
2つのワークフロー
- 標準
- 一般的なやつ
- 状態移行ごとの価格設定
- 最大1年間実行可能
- Express
- ストリーミングデータ処理やIoT向け
- 最大5分間実行
- 実行回数、実行期間での課金
ユースケース
- 分岐
- エラー処理(Retry, Catch)
- ヒューマンインザループ
- コールバックとタスクトークンを使用して、ワークフローに人を挟んだりできる
- 並列処理(Parallel)
- 動的並列処理(Map)
サービス統合
- 色々あるよ!

ユースケース - AWS Step Functions
マイクロサービスのオーケストレーション - AWS Step Functions
- 即時の対応が必要な場合、同期Express ワークフローが理想的
- 同期ワークフロー、リアルタイムワークフロー
ITとセキュリティの自動化 - AWS Step Functions
- ソフトウェアのアップデート、パッチ適応など

標準ワークフローと Express ワークフロー - AWS Step Functions
- 2つのワークフローの違いについて
- 標準ワークフロー(Standard)
- 長時間実行可能、耐久性高い、監査可能
- 実行履歴は最大90日保存
- at-most-onceモデル:タスクは複数回実行されない(Retryは除く)
- 冪等ではないアクション向け
- Expressワークフロー
- 最大5分間の実行
- at-least-onceモデル:タスクは冪等に調整するのが理想
- ジョブ実行パターン、コールバックパターンはサポートしない
同期および非同期の Express ワークフロー - AWS Step Functions
- 非同期:完了するまで待機しない
- StartExecution
- 同期:完了を待ってから結果を返す
- API Gatewayから呼び出し可能
- StartSyncExecution
- VPCエンドポイントはサポートされていない
実行の保証 - AWS Step Functions
- 標準
- 一度だけワークフローを実行
- 同じ名前のワークフローが実行中の場合、冪等応答(?)を返し、新しいワークフローは実行されない
- 90日後にワークフローのデータが削除されると、名前を再利用できる
- 非同期Express
- 最高1回の実行
- 複数回開始しようと複数のワークフローが同時に開始
- ワークフローは最初から自動的に再開
- 同期Express
- 例外発生時、最初から再起動しない

States - AWS Step Functions
- 状態(States)はステートマシンの要素
- 名前で参照される。ステートマシン全体の範囲で一意である必要がある
- Nextフィールドで次の状態を指定する or Endフィールドで終了状態にする
- 状態の種類によって、必要なフィールドが違う
- 標準ワークフロー:各状態に関する情報はコンソールの「実行の詳細」でアクセス可能
Amazon ステートメント言語 - AWS Step Functions

Choice - AWS Step Functions
- Endフィールドは指定できない
- 入力にtypeフィールドが必須
- これは例で参照しているから必要ってことなのか?

Succeed - AWS Step Functions
- 正常に停止するための状態
- Choiceで実行を停止したい場合に便利

Parallel - AWS Step Functions
- 並列実行
- 入力は全ての並列タスクに対して同じものを、出力は全ての出力をまとめた配列になる
Map - AWS Step Functions
- 入力は配列(またはItemsPathで入力の配列部分を指定)で、配列の要素ごとにIteratorフィールドに定義したタスクを実行
- 出力は配列

ステートマシンデータ - AWS Step Functions
- 入出力はJSONテキスト
- 入力のデフォルトは空オブジェクト
- 入力はJSON.parseされた状態で来るが、出力はJSON.parseが必要

Step Functions の入出力処理 - AWS Step Functions
- InputPath = 入力の一部をタスクに渡すときに使う
- Parameters = タスクに渡すパラメーターの定義
- パスを使って値を動的に設定する場合はキー名を
.$
で終わる必要がある
- パスを使って値を動的に設定する場合はキー名を
- ResultSelector = 出力の一部を選択
- Map, Task, Parallelで利用できる
- ResultPath = 出力を入力とどのように組み合わせるか
- 状態の出力 = 入力のコピー + 生成される結果
- 入力に出力をマージするときにどこに差し込むか
-
"ResultPath": null
で出力の破棄 -
"ResultPath": "$"
で入力を破棄(代わりに出力を次の入力とする) - 入力のフィールドをResultPathで上書きできる
- OutputPath = 出力の一部を選択する

Context オブジェクト - AWS Step Functions
- Parametersフィールドで
$$.~
でアクセスできる - タスクに関連する情報
- Mapの場合、インデックス、値が取れる

Step Functions での実行 - AWS Step Functions
- 実行の開始方法
- StartExecution API, コンソール, CloudWatch Events, API Gateway経由, ネストされたワークフローから
タスク状態からワークフロー実行を開始する - AWS Step Functions
- TaskのResourceを
"arn:aws:states:::states:startExecution"
にするとワークフローからワークフローを実行できる - 入力に
AWS_STEP_FUNCTIONS_STARTED_BY_EXECUTION_ID
という特別なパラメタを使うことで、ワークフローの紐付けが可能"AWS_STEP_FUNCTIONS_STARTED_BY_EXECUTION_ID.$": "$$.Execution.Id"

Step Functions エラー処理 - AWS Step Functions
- デフォルトでは、状態でエラーが報告されると、AWS Step Functions の実行全体が失敗
- エラー名:
States.
がprefixで色々定義されている- States.Runtime = InputPath等のエラーで実行できなかった、States.TaskFailed = タスクの実行中のエラー
- リトライについて(Retry)
- フォールバック状態(Catch)
ErrorEquals、throwしたエラーの名前でも行けるっぽい?
例えば、throw new HogeError
した場合、"ErrorEquals": ["HogeError"]
で行けるのかな?
CustomError
というのをthrowしてて、それをErrorEquals
で参照している

チュートリアル
多いので面白そうなのをピックアップ
Lambda を使用してループを反復する - AWS Step Functions
- ループを作る話
新しい実行としての続行 - AWS Step Functions
- 一度の実行のクォータを超えないように、再実行して継続する話
人間による承諾プロジェクト例をデプロイする - AWS Step Functions
- contextにtaskTokenが入ってくるので、それをAPI Gatewayに投げるURLを作ってメールで送る
- API Gatewayに紐付いてるLambdaからsendTaskSuccessを実行
- Statusに成功か失敗かの情報、メールアドレスが含まれている
Step Functions の X-Ray - AWS Step Functions
- X-Rayを有効にして実行すると各状態でどのくらい時間がかかったかなど分かる

を使用してStep Functions 用の Lambda 状態マシンの作成AWS CDK - AWS Step Functions
- AWS CDKでステートマシンを定義する話
作成者以外のコメントは許可されていません