Step Functions:サーバーレスワークフローのオーケストレーション
Step Functionsでステートマシンとして複数ステップのワークフローを定義し、catchとretryブロックでエラーを処理して、ネイティブSDK統合を利用します。
「Step Functions:サーバーレスワークフローのオーケストレーション」はCoddyKit上の無料AWS Solutions Architectレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAWS Solutions Architect学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 AWS Solutions Architectコースには全4レッスンが含まれています。
AWS Step Functionsとは
AWS Step Functionsは、ステートマシンで定義した一連のステップとして分散アプリケーションを調整する、フルマネージドのワークフローオーケストレーションサービスです。ステートマシンの各ステップは状態であり、Lambdaの呼び出し、AWS SDKの呼び出し、待機時間、並列ブランチ、または選択(if/else)を表します。Step Functionsは状態を管理し、再試行を処理し、実行履歴を視覚的に提供するため、アプリケーションコードにオーケストレーションロジックを記述する必要がありません。
Amazon States Language(ASL)
ステートマシンは、JSONベースの言語であるAmazon States Language(ASL)で定義します。各状態にはType(Task、Choice、Wait、Parallel、Map、Pass、Succeed、Fail)があり、Next状態へ遷移するか、そこで終了します。Task状態のResourceフィールドには呼び出すAWSサービスを指定します。Lambdaの場合はARNを指定し、200を超えるAWSサービスでは、中間Lambdaなしで最適化されたサービス統合ARNを使用できます。
{
'Comment': 'Order processing workflow',
'StartAt': 'ValidateOrder',
'States': {
'ValidateOrder': {
'Type': 'Task',
'Resource': 'arn:aws:lambda:us-east-1:123456789012:function:ValidateOrder',
'Next': 'ChargePayment',
'Retry': [{'ErrorEquals': ['Lambda.ServiceException'], 'IntervalSeconds': 2, 'MaxAttempts': 3}]
},
'ChargePayment': {
'Type': 'Task',
'Resource': 'arn:aws:states:::dynamodb:putItem',
'Parameters': {'TableName': 'Orders', 'Item': {'orderId': {'S.$': '$.orderId'}}},
'End': true
}
}
}StandardワークフローとExpressワークフロー
Step Functionsには2種類のワークフローがあります。Standardワークフロー:最大1年間実行できる耐久性の高いワークフローで、exactly-once実行セマンティクスを持ち、完全な実行履歴を90日間保存します。長時間実行される業務プロセスに適しています。Expressワークフロー:毎秒100,000件を超える高スループット、最大5分間の実行、at-least-onceセマンティクスを備え、ログをCloudWatchに送信します。リアルタイムイベント処理やIoTデータパイプラインに適しています。実行時間、スループット、冪等性の要件に基づいて選択します。
# Create a Standard workflow state machine
aws stepfunctions create-state-machine \
--name OrderProcessing \
--definition file://order-state-machine.json \
--role-arn arn:aws:iam::123456789012:role/StepFunctionsRole \
--type STANDARD
# Create an Express workflow for high-throughput
aws stepfunctions create-state-machine \
--name ClickstreamProcess \
--definition file://click-state-machine.json \
--role-arn arn:aws:iam::123456789012:role/StepFunctionsRole \
--type EXPRESSTask状態とサービス統合
Step FunctionsのTask状態は、2種類の統合パターンをサポートします。Request-Response:AWSサービスを呼び出し、すぐに次へ進みます(fire-and-forget)。Sync Integration:サービスを呼び出し、完了するまで待ってから次の状態へ進みます(例:ECSタスクの終了、Glueジョブの完了、SageMakerトレーニングジョブの終了を待つ)。Sync IntegrationではリソースARNに:sync:2サフィックスを使用するため、ポーリングロジックが不要になります。
# Sync integration: start Glue job and wait for completion
'RunGlueETL': {
'Type': 'Task',
'Resource': 'arn:aws:states:::glue:startJobRun.sync:2',
'Parameters': {
'JobName': 'clean-sales'
},
'Next': 'RunAthenaQuery'
}分岐ロジックのためのChoice状態
Choice状態は、条件分岐を実装します。ワークフローにおけるif/elseまたはswitch文に相当します。条件の配列としてChoicesを定義し、最初に一致した条件によって次の状態を決定します。一致しない場合はDefault状態で処理します。Choice状態を使うと、条件分岐用のLambdaロジックを記述せずに、商品種別、顧客ランク、支払い状況に基づいて注文を異なるフルフィルメント経路へ振り分けられます。
'RouteByOrderType': {
'Type': 'Choice',
'Choices': [
{
'Variable': '$.orderType',
'StringEquals': 'DIGITAL',
'Next': 'FulfillDigital'
},
{
'Variable': '$.orderType',
'StringEquals': 'PHYSICAL',
'Next': 'FulfillPhysical'
}
],
'Default': 'HandleUnknownType'
}Parallel状態とMap状態
Parallel状態は複数のブランチを同時に実行し、すべての完了を待ってから次へ進みます。信用チェックと在庫チェックを同時に実行する場合など、並行タスクに便利です。Map状態は入力内の配列を反復処理し、同じ状態のセットを各要素に並列で適用します。前のステップから返された複数の項目を処理する場合に便利で、たとえばアップロードされた複数の画像のサイズ変更などに利用できます。
'ProcessImages': {
'Type': 'Map',
'ItemsPath': '$.imageKeys',
'MaxConcurrency': 10,
'Iterator': {
'StartAt': 'ResizeImage',
'States': {
'ResizeImage': {
'Type': 'Task',
'Resource': 'arn:aws:lambda:us-east-1:123:function:ResizeImage',
'End': true
}
}
},
'Next': 'NotifyComplete'
}エラー処理:CatchとRetry
Step FunctionsのすべてのTask状態には、回復力のあるエラー処理のためにRetryブロックとCatchブロックを設定できます。Retryでは、自動再試行を引き起こすエラーの種類と、IntervalSeconds、MaxAttempts、BackoffRate(指数バックオフの倍率)を設定します。Catchでは、回復不能なエラーが発生した場合のフォールバック先の状態を指定します。この宣言的なエラー処理により、Lambda関数内で繰り返しtry/catchブロックを記述する必要がなくなります。
'ChargeCard': {
'Type': 'Task',
'Resource': 'arn:aws:lambda:us-east-1:123:function:ChargeCard',
'Retry': [{
'ErrorEquals': ['Lambda.ServiceException', 'States.TaskFailed'],
'IntervalSeconds': 2,
'MaxAttempts': 3,
'BackoffRate': 2.0
}],
'Catch': [{
'ErrorEquals': ['PaymentDeclined'],
'Next': 'NotifyPaymentFailed',
'ResultPath': '$.error'
}],
'Next': 'FulfillOrder'
}Wait状態とコールバック
Wait状態は、指定した時間だけ、または特定のタイムスタンプになるまでワークフローの実行を一時停止します。Callbackパターン(.waitForTaskTokenを使用)では、外部システムがトークンを付けてSendTaskSuccessまたはSendTaskFailureを呼び出すまで実行を一時停止します。これは、Step Functionsで人による承認ステップをモデル化する方法です。タスクトークンを含むメールを送信し、人がメールクライアントで承認または拒否のリンクをクリックするとワークフローが再開されます。
# Callback pattern: wait for human approval
'RequestApproval': {
'Type': 'Task',
'Resource': 'arn:aws:states:::sqs:sendMessage.waitForTaskToken',
'Parameters': {
'QueueUrl': 'https://sqs.us-east-1.amazonaws.com/123/approvals',
'MessageBody': {
'taskToken.$': '$$.Task.Token',
'orderId.$': '$.orderId'
}
},
'Next': 'ProcessApproval'
}Step FunctionsとEventBridgeの統合
Step Functionsの実行はEventBridgeルールによって開始できるため、AWSサービスイベントに応じてワークフローを簡単に起動できます。たとえば、S3のObjectCreatedイベントによってEventBridgeルールがトリガーされ、Step Functionsの画像処理ワークフローが開始されます。また、Step Functionsは実行が成功または失敗したときに独自のイベントをEventBridgeへ発行できます。これにより、Step Functions APIをポーリングせずに、下流の監視やアラートを実現できます。
Step Functions実行の監視
Step Functionsのコンソールには、どの状態が成功し、実行中で、失敗したかをリアルタイムで色分けして示すワークフロー実行の視覚的なダイアグラムが表示されます。Standardワークフローでは、各実行の完全な入力と出力の履歴が保存されます(保持期間は90日間)。Expressワークフローでは、ログがCloudWatch Logsに送信されます。X-Rayトレースを使用すると、ワークフロー内で呼び出されるLambda関数やその他のサービスにまたがる、エンドツーエンドのリクエストレイテンシーを追跡できます。
# List recent executions and check status
aws stepfunctions list-executions \
--state-machine-arn arn:aws:states:us-east-1:123456789012:stateMachine:OrderProcessing \
--status-filter FAILED
# Describe a specific failed execution for debugging
aws stepfunctions describe-execution \
--execution-arn arn:aws:states:us-east-1:123456789012:execution:OrderProcessing:exec-001Step Functions、SQS、EventBridgeの比較
Step FunctionsとSQSまたはEventBridgeのどれを使うべきかを判断することは、試験でよく問われるポイントです。Step Functionsは、エラー処理や分岐を含む複数ステップのプロセスを、可視化されたステートフルなオーケストレーションで実行する場合に使用します。SQSは、可視性タイムアウトによる再試行を備えた、2つのサービス間の信頼性の高いポイントツーポイント非同期メッセージングに使用します。EventBridgeは、コンテンツパターンに基づいて複数のサブスクライバーへイベントをルーティングする場合に使用します。Step Functionsのワークフローでは、タスクトークンを使ってSQSメッセージを待機し、完了イベントをEventBridgeに発行し、LambdaとSDKの呼び出しを連鎖させるなど、3つすべてを統合できます。
理解度チェック
このレッスンで学んだ AWS Solutions Architect(SAA-C03)の概念について、理解度を確認します。
レッスンのまとめ
このレッスンでは、Step Functions が Task、Choice、Parallel、Map、Wait、Catch の各状態を持つステートマシンとしてワークフローをオーケストレーションすること、Standard Workflows は実行履歴を完全に保持したまま最大 1 年間実行でき、Express Workflows は 5 分未満の高スループットなワークロードに対応すること、そして タスクトークンを使用する Callback パターンによって、人間による承認をワークフローに組み込めることを学びました。次は、高スループットのリアルタイムイベント処理に使用する Kinesis Data Streams について学びます。
よくある質問
「Step Functions:サーバーレスワークフローのオーケストレーション」レッスンは無料ですか?
はい。「Step Functions:サーバーレスワークフローのオーケストレーション」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、AWS Solutions Architectコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 AWS Solutions Architectコースには全4レッスンが含まれています。
「Step Functions:サーバーレスワークフローのオーケストレーション」で何を学びますか?
Step Functionsでステートマシンとして複数ステップのワークフローを定義し、catchとretryブロックでエラーを処理して、ネイティブSDK統合を利用します。 ブラウザで直接実行するハンズオンコードでAWS Solutions Architectを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
AWS Solutions Architectを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのAWS Solutions Architectは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「Step Functions:サーバーレスワークフローのオーケストレーション」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このAWS Solutions Architectレッスンでコードを書いて実行できますか?
はい。すべてのAWS Solutions Architectレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- EventBridge:イベントバスとルール
- Step Functions:サーバーレスワークフローのオーケストレーション
- リアルタイムイベント処理向けKinesis Data Streams
- コレオグラフィーとオーケストレーションのパターン