Open10
AWS Step Functions キャッチアップ
資料
デベロッパーガイド
ワークショップ
ASL ドキュメント
AWS Step Functionsとは
- ローコード
- ビジュアルワークフローサービス
- AWSサービスのオーケストレーション
- 基本的なワークフローパターン
ワークフロー
- Amazon State Langage(ASL)で記載
- ステートマシンとして定義
- ステートと呼ばれるステップで構成
- 複数のAWSサービスのオーケストレーションに利用可能
Step Functionsのステート
- Choice
- Parallel
- Map
- Pass
- Wait
- Success
- Fail
ワークフローの種類
- 標準ワークフロー
- Expressワークフロー
作成後に変更することはできない
タスク
リクエストレスポンス
Step Functionsがサービスを呼び出し、すぐに次のステートに進む。基礎となるジョブ完了を待たない。
ジョブ実行(.sync)
AWS BatchやAmazon ECSなど特定の統合サービスの場合、タスク完了を待機して次のステートに進むことができる。(.sync)
最適化されたインテグレーションドキュメント
ジョブ実行のハイパフォーマンス参考ブログ
タスクトークンによるコールバック(.waitForTaskToken)
タスクトークンが返されるまでワークフローを無期限に一時停止できる。例えば人間が承認するタスクが必要な場合など。
AWS SDKサービスの統合
Step Functionsは多くのサービスをSDKで統合できる。インテグレーションを利用sルウにはサービス名とAPIコールを指定する。ARMで指定
arn:aws:states:::aws-sdk:serviceName:apiAction.[serviceIntegrationPattern]
例
EC2インスタンス
arn:aws:states:::aws-sdk:ec2:describeInstances
S3バケット一覧
arn:aws:states:::aws-sdk:s3:listBuckets
フローとデータ操作
Step Functionsにはデータの処理の流れをフローで表現し実行できる。
- Choice
- Parallel
- Map
- Fail or Success
- Pass
- Wait
ドキュメント
Choice
ステートマシンに分岐ロジックを追加する。
Map
配列の各要素に対して一連のステップを実行する。
Parallel
並列で処理を実行する。
API Gatewayとの統合
アクション名をStartExecutionにすると非同期。StartSyncExecutionにすると同期処理になる
Expressワークフローの監視
ExpressワークフローではCloudWatchで監視が必要
入出力
Step Functionsでは入出力はJsonでやり取りされる。ステートからステートへのやり取りはフィルタリングできる。
- InputPath
- OutputPath
- ResultPath
- Parameters
- ResultSelector
ドキュメント
フィルタしている内容を可視化できるデータフローシュミレーターもある
組み込み関数
ASLにはタスクステートを利用せずにデータ処理を実行できる組み込み関数がある。
例
## 算術演算
States.MathAdd
## ユニークIDの作成
States.UUID
## Jsonオブジェクトのマージ
States.JsonMerge
エラー処理
Step Functionsはデフォルトではエラーを完全に失敗させる。エラーハンドリングを行うことでリトライなどの処理が可能となる。
Retry
"Retry": [
{
"ErrorEquals": [
"CustomError" // エラー名と一致する空白でないの時列の配列
],
"IntervalSeconds": 1, // 再試行までの時間
"MaxAttempts": 2, // 再志向の最大数
"BackoffRate": 2 // 志向ごとに再試行期間が増加する乗数
}
],
Catch
特定のエラーをキャッチすることができる。組み込みキャッチャーもある。
組み込みキャッチャー
- States.ALL - 既知のエラー名と一致するワイルドカード
- States.DataLimitExceeded - 出力がクォータを超えている
- States.Runtime - 実行時例外を処理できなかった
- States.HeartbeatTimeout - タスクステートがハートビートの送信に失敗した
- States.Timeout - タスクステートがタイムアウトした
- States.TaskFailed - 実行中にタスクステートが失敗した
States.Permissions - タスクステートの権限が不十分
RetryとCatchの両方がある場合はRetryをしてからCatchの制御となる。
標準とExpressワークフローの違い
項目 | 標準 | Express |
---|---|---|
課金 | ステートの遷移 | 実行時間 |
実行モデル | exactly once | at least once |
実行時間 | 365日 | 5分 |
sync | 可 | 不可 |
waitForTaskTOken | 可 | 不可 |
ドキュメント