AWS Expert Online JAWS-UG: Step Functionsの本気
見せてやるよ、Step Functionsの本気ってやつをな
アマゾンウェブサービスジャパン toriはらさん、下川さん
www.slideshare.net
Step Functions のかゆいところと改善策
- JSON(ASL) でワークフロー書くのが大変?
- arn もドロップダウンで出ない
- Lambda が無いと先に枠(フロー)だけ書くことができない
- Workflow Studio でビジュアルツールでワークフローが書けるようになった
- ASL を抜き出せる
- CFn に ASL を埋め込む元にできる
- Python なれてたら Step Functions Data Science SDK で書ける
- Jpyter Notebook で作れる
- VSCode なら YAML で書けるようになった
- CDK にも対応
@aws-cdk/aws-stepfunctions
- オブジェクト指向ライクで書ける
Step Functions から呼ばれる Lambda のリポジトリ分け
- 答えはない
- Lambda の作成チームが別れているなら分ける
- 一連の流れとして Start から End までマイクロサービスとして成立しているなら一つ
- 切り分けのキーワード
- ドメイン駆動設計
- 境界づけられたコンテキスト
- コンテキストマップ
Step Functions から呼ばれる Lambda 関数のデバッグは?
- 昔なら CloudWatch Logs
- Step Functions も Lambda も X-Ray に対応しているので、X-Ray とか
- Local で先にテストしておく
- Lambda handler を直接テストすべきでない
- main.py も準備して事前確認できるようにする
- ピュアなビジネスロジック部分をテスト
- DynamoDB とかの Repository は、インターフェースにして切り離す
- Lambda からエラーハンドリングを取り除くために Step Functions を使う
- エラーやリトライは Step Functions で処理する
Step Functions の入出力処理の JSON path syntax はどうやって慣れる?
- ワークフローは可視化されているけど...
- Data flow simulator で、入出力をシミュレーションする
- 元の値と変える値は自分で作るので大変
- ブレークポイントがないので止めれないし値を書き換えれない
- 教材
- builders.flash の 「AWS Step Functions でサーバレス FizzBuzz を実現する」
- https://aws.amazon.com/jp/builders-flash/202104/stepfunctions-fizzbuzz/
SF で復元力のある Fargate Task 実行って?
- https://github.com/toricls/aws-fargate-with-step-functions
- Fargate が止まった理由をもとに SF でハンドリングすると、ビジネスロジックを汚さなくていい
オンプレミス/外部 SaaS などのジョブとどうやって連携する?
- Callback ワークフロー
- Task token を払い出して SQS に積んで処理する
- コンシューマーは SQS から Task token 入のメッセージを処理
- SF の API に Task token をパラメータとして渡して戻す
並列ジョブはどうする?
- SF に Map State があるので、配列の数だけジョブを呼び出せる
- 複数ジョブを同時に実行するパラレルもある
SF を API に使えるか?
- 軽量 ETL オーケストレーションとして使う
- APIG から呼び出して、同期的にワークフローをコールする
- APIG の29秒制限内で処理が終わるのであればできる
- APIG から呼び出して、同期的にワークフローをコールする
- BFF として使う
- APIG から BFF の処理を SF として作って呼び出す
- 非同期パターンとして使う
- WebSockets
デザインパターンの視点
- 自律的に処理をコントロールするには?
- コレオグラフィーパターン
- 振付師、一旦適宜したら自律的にサービスが動く
- SNS -> SQS -> Lambda
- コレオグラフィーパターン
- 中央で処理をコントロールするには?
- コレオグラフィーとオーケストレーション
- オーケストレーションパターン
- 呼び出し側が責務を持って終わらせる
- 1つのプロセスがワークフローの状態を管理し、適切なサービスを順に呼ぶ
- オーケストレーションパターン
- コレオグラフィーとオーケストレーション
- 長期トランザクションを管理するには?
コードフリーな世界観に浸りたい
- SF が AWS SDK との統合をサポート
- API 叩いたら AI サービスを実現など
- EventBridge のターゲットに API Destinations を指定可能に
- 任意のエンドポイントに HTTP リクエストを遅れる
まとめ
- SF はサーバーレスのワークフロー
- 利用した分課金
- マイクロサービスをオーケストレーションしたいときに可視化されたワークフローを体験可能
所感
Step Functions は、サンプル実装しかしてない状況です。
API のバックエンドとしても使えそうなので、その方向で試したりはしてたのですが、使い方として間違ってなさそうで良かった。
全然なれてないので、もっと触らないと使いこなせなさそうです。
時間が過ぎてたけど、懇親会に突入したらちゃんとやってました。
@tcsh さん、@98lerr さんありがとうございましたー!