AWS入門ブログリレー2024 〜AWS Step Functions編〜
当エントリは弊社AWS事業本部による『AWS 入門ブログリレー 2024』の50日目のエントリです。
このブログリレーの企画は、普段 AWS サービスについて最新のネタ・深い/細かいテーマを主に書き連ねてきたメンバーの手によって、 今一度初心に返って、基本的な部分を見つめ直してみよう、解説してみようというコンセプトが含まれています。
AWS をこれから学ぼう!という方にとっては文字通りの入門記事として、またすでに AWS を活用されている方にとっても AWS サービスの再発見や 2024 年のサービスアップデートのキャッチアップの場となればと考えておりますので、ぜひ最後までお付合い頂ければ幸いです。
では、さっそくいってみましょう。今回のテーマはワークフローを制御する『AWS Step Functions』です。
AWS Step Functionsの概要
AWS Step Functionsは、 AWSの各種サービスやアプリケーションをピタゴラスイッチのように連携させるサーバーレスなサービスです。ビジュアルツールのWorkflow Studioを利用すると、ローコードでワークフローを構築できます。
ユースケース
Step Functionsは単体で完結して動作するものではなく、他のAWSサービスやアプリケーションと連携して動作します。そのため、Step Functionsのイメージを掴むには、どのように活用されるのか、ユースケースから入るのがおすすめです。
以下はStep Functionsの公式ドキュメントのチュートリアルにあるクレジットカード申請のワークフローです。
- まず与信をチェックします。十分な与信があれば次の処理へ遷移し、不十分な場合は人間が判断します。
- 与信チェックが完了後、IDと住所の確認が取れれば、クレジットカードを発行します。
このビジネスワークフローをStep Functionsに移植すると、以下のような流れになります。
AWS Step Functionsの公式ページでは以下のようなユースケースも紹介されています。
- マイクロサービスオーケストレーション
- IAM ポリシー作成のためのセキュリティインシデント対応のオーケストレーション
- ストリーミングデータのデータ処理パイプラインを構築
- 機械学習のETL ジョブの実行と機械学習モデルの構築、トレーニング、デプロイ
- PDFや画像からデータを抽出・処理
AWSコンソールでは、AWSアカウントにデプロイ可能な約30個のサンプルプロジェクトが用意されています。
気になったプロジェクトをデプロイして動作確認してみるのもよいでしょう。
正規表現はステートマシンからなる有限オートマトンと等価なため、正規表現エンジンを作成することもできます。
AWS Step Functionsのコンポーネント
Step Functionsでは、ワークフローのことをステートマシンと呼び、各ステップをステートと呼びます。これらのステートは、JSONベースのDSLであるASL(Amazon States Language)で定義します。
{ "Comment": "A simple minimal example of the States language", "StartAt": "Hello World", "States": { "Hello World": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:HelloWorld", "End": true } } }
Workflow Studioは、このASLをGUIで構築するツールです。
Step Functionsのステートには、フロー型とタスク型の2種類があります。
フロー型のステートには以下のものがあります。
- パス(Pass):何もしない
- 選択(Choice):入力に基づいて分岐
- 待機(Wait):指定時間待つ
- 成功(Succeed):成功性フロー
- 失敗(Fail):失敗系フロー
- 並行(Paralle):並列処理
- マッピング(Map):ループ処理
これらを組み合わせることで、下図のようなフローを制御できます。
※ 引用 https://catalog.workshops.aws/stepfunctions/ja-JP/introduction/common-patterns
タスク型のステートには以下のものがあります。
- DynamoDB、SNS、S3など、220以上のAWSサービス連携
- Lambda関数
- HTTPエンドポイントへのリクエスト
- アクティビティタスク:人間の承認のようなキューの処理完了を待つタスク
AWSサービス連携のおかげで、主要なAWSサービスのAPIをLambda関数の実装なしに呼び出せるのは大きなメリットです。
BedrockもLambda関数無しに呼べ出せます。
StandardとExpressの2種類のワークフロー。迷ったらStandard
Step Functionsには、一般的なワークフロー処理に適した高機能なStandardと、短時間で終わる大量のリクエスト・イベント処理に適したExpressの2種類のワークフローがあります。
デフォルトのStandardは、履歴や様々なタスクに対応し、"exactly once"な実行セマンティクスを持ち、一般的な「ワークフロー」のイメージにぴったりです。
Expressは、呼び出しやステート遷移の上限を非常に高く設定し、最大5分で終わる大量のリクエスト・イベント処理に最適化されています。
必ず5分以内に終わるステートマシンを大規模に実行しない限り、デフォルトのStandardで問題ありません。
詳細は公式ドキュメントを参照ください。
利用費
Step Functionsの料金体系はStandardとExpressで全く異なります。
- Standard:ステートマシンの実行ごとに利用費が発生します。
- Express:Lambda関数のように、割り当てたメモリ x 実行時間をベースに利用費が発生します。Expressは事前の試算が難しいため、まとまったワークロードをもとにシミュレートすると良いでしょう。
詳細は公式ページを参照ください。
開発者向けStep Functionsの学び方
まずは公式ワークショップ
Step Functionsには日本語化されたAWS公式の充実したワークショップがあり、以下の幅広いトピックを学べます。
- Step Functions概要
- 基本
- 応用(エラー処理、IaCなど)
- オブザーバビリティ
- Expressワークフロー
- ユースケース
Workflow Studioと戯れよう
ワークショップで学んだ後は、GUIでステートマシンを定義できるWorkflow Studioで様々なワークフローを組んでみましょう。直感的な操作で期待通りに動作する、非常に優れたオーサリングツールです。
Step Functionsは220以上のAWSサービスのAPIを直接呼び出せるため、Lambda関数の実装のようなアプリケーション開発能力がなくても問題ありません。
ベストプラクティス
サービスを使いこなすには、どう使われることを想定してサービス設計されているのか理解する事が重要です。
- タイムアウトを設定してステートマシンの実行がスタックする(詰まる)ことを回避する
- 大きなデータはペイロードで渡さずS3を参照させる
- ワークフローはデフォルトのStandardかExpressかどっちを使うべきか
- エラーハンドリングしやすいLambdaサービスの例外の投げ方
といったベストプラクティスを意識しましょう。
上級者向け大規模データ処理ワークショップ
英語限定ではありますが、大規模データ処理のための上級者向け公式ワークショップも存在します。
ジョブ管理システムとの違い
ジョブ管理システムやジョブスケジューラーなどと呼ばれるワークフローやスケジュールを定義できるアプリケーションとの比較や移行が求められるケースがあります。 この2つは似ている部分も多いですが、ジョブ管理システムは汎用的かつ重厚なのに対して、Step FunctionsはAWSプラットフォームでの実行を前提としており、220以上のAWSサービスとシームレスに連携できるのが特徴です。
Step Functions移行時に互換性を重要視して機能差を埋めすぎようとせず、本来の良さを活かしましょう。
おわりに
AWS Step Functionsは非常に高機能です。すべてを最初から知ろうとせず、以下の流れで少しずつ使い方を覚えていきましょう。
- 公式ワークショップを試す
- ユースケースを学ぶ
- Workflow Studioでステートマシンを組んでみる
- 困ったらリファレンスを確認
2016年からサービス提供されているAWS Step Functionsは現在も活発に開発され、過去半年でも、Amazon Bedrock連携、ステート単体のテスト実行、ステートマシン実行失敗時点からの再実行など、魅力的な新しい機能が次々とリリースされています。
以上、「AWS 入門ブログリレー 2024」の「AWS Step Functions」編でした。このブログがどなたかのご参考になれば幸いです。
次回、2024/5/23 は弊社 トクヤマシュン による『AWS Copilot』の予定です!