耐久性のある実行 SDK
耐久性のある実行 SDK は、耐久性のある関数を構築するための基盤です。進行状況のチェックポイント、再試行の処理、実行フローの管理を行うためのプリミティブが提供されます。SDK によってチェックポイントの管理および再生の複雑さが抽象化されるため、自動的に耐障害性になるシーケンシャルコードを記述できます。
SDK は、JavaScript、TypeScript、Python、Java で利用できます。API ドキュメント、クイックスタートチュートリアル、言語固有のガイドの詳細については、「AWS Durable Execution SDK デベロッパーガイド」を参照してください。
SDK の動作
チェックポイント管理: 関数が耐久性のあるオペレーションを実行すると、SDK によってチェックポイントが自動的に作成されます。各チェックポイントでは、オペレーションタイプ、入力、結果が記録されます。関数がステップを完了すると、SDK によって続行される前にチェックポイントが保持されます。関数が中断された場合、完了したすべてのオペレーションから再開できます。
再生の調整: 一時停止または中断の後に関数が再開されると、SDK によって再生が実行されます。コードを最初から実行しますが、再実行せずに保存されたチェックポイント結果が使用されて、完了したオペレーションがスキップされます。SDK は、再生が決定的であることを保証します。入力とチェックポイントログが同じ場合、関数は同じ結果を生成します。
状態の分離: SDK により、ビジネスロジックとは別に実行状態が維持されます。耐久性のある各実行には、他の実行ではアクセスできない独自のチェックポイントログがあります。SDK によって保管中のチェックポイントデータが暗号化され、再生間で状態の一貫性が維持されます。
チェックポイントの仕組みと再生動作の詳細については、「AWS Durable Execution SDK デベロッパーガイド」の「主な概念」を参照してください。
永続オペレーション
SDK は、お客様の関数に DurableContext オブジェクトを提供します。このコンテキストは標準 Lambda コンテキストを置き換えて、チェックポイントの作成、実行フローの管理、外部システムとの調整に関する方法を説明します。
DurableContext には、耐久性の高いワークフローを構築するための次のオペレーションが用意されています。
| 運用 | 説明 |
|---|---|
| [ステップ] | 設定可能な再試行戦略と実行セマンティクスを使用して、作業単位の実行とチェックポイントを行います。 |
| 待機 | コンピューティングリソースを消費せずに、指定された期間に実行が一時停止されます。 |
| 条件を待機する | 試行間に自動チェックポイントを適用した条件によるポーリング。 |
| コールバック | 実行を一時停止し、外部システムが Lambda API を介して入力を提供するのを待ちます。 |
| Invoke | 別の Lambda 関数を呼び出し、自動チェックポイントを使用してその結果を待ちます。 |
| 並行 | 設定可能な完了ポリシーを使用し、複数のオペレーションを同時に実行します。 |
| マッピング | コレクション内の各項目を、オプションの同時実行制御と同時に処理します。 |
| 子コンテキスト | 複数オペレーションをグループ化するための、分離された実行コンテキストが作成されます。 |
耐久性のある各オペレーションによってチェックポイントが自動的に作成され、関数はどの時点からでも再開できます。API リファレンス、コード例、言語固有の使用方法の詳細については、「AWS Durable Execution SDK デベロッパーガイド」の「SDK リファレンス」を参照してください。
耐久性のあるオペレーションの計測方法
DurableContext を通じて呼び出す耐久性のあるすべてのオペレーションによってチェックポイントが作成され、実行の進行状況が追跡されて状態データが保存されます。これらのオペレーションは使用状況に基づいて料金が発生し、チェックポイントにはデータの書き込みおよび保持コストに寄与するデータが含まれる場合があります。保存データには、呼び出しイベントデータ、ステップから返されたペイロード、コールバックの完了時に渡されたデータが含まれます。耐久性のあるオペレーションの計測方法を理解することで、実行コストを見積もってワークフローを最適化できます。料金の詳細については、「Lambda の料金ページ
ペイロードサイズとは、耐久性のあるオペレーションが保持されるシリアル化されたデータのサイズを指します。データはバイト単位で測定され、サイズはオペレーションで使用されるシリアライザーによって異なります。オペレーションのペイロードは、正常な完了による結果自体であるか、オペレーションが失敗した場合はシリアル化されたエラーオブジェクトの可能性があります。
基本的なオペレーション
基本的なオペレーションは、耐久性のある関数の基礎的な構成要素です。
| 運用 | チェックポイントのタイミング | オペレーション数 | 継続したデータ |
|---|---|---|---|
| 実行 | 起動済み | 1 | 入力ペイロードのサイズ |
| 実行 | 完了 (成功/失敗/停止) | 0 | 出力ペイロードのサイズ |
| [ステップ] | 再試行/成功/失敗 | 1 + N 回の再試行 | 各試行から返されるペイロードのサイズ |
| 待機 | 起動済み | 1 | 該当なし |
| WaitForCondition | 各ポーリング試行 | 1 + N ポーリング | 各ポーリング試行から返されるペイロードサイズ |
| 呼び出しレベルの再試行 | 起動済み | 1 | エラーオブジェクトのペイロード |
コールバックオペレーション
コールバックオペレーションは、関数が一時停止して外部システムが入力するまで待てるようにします。これらのオペレーションは、コールバックの作成時および完了時にチェックポイントを作成します。
| 運用 | チェックポイントのタイミング | オペレーション数 | 継続したデータ |
|---|---|---|---|
| CreateCallback | 起動済み | 1 | 該当なし |
| API コールによるコールバック完了 | 完了 | 0 | コールバックペイロード |
| WaitForCallback | 起動済み | 3 + N 回の再試行 (コンテキスト + コールバック + ステップ) | 送信者ステップの試行によって返されるペイロード、ならびにコールバックペイロードの 2 つのコピー |
複合オペレーション
複合オペレーションでは複数の耐久性のあるオペレーションを組み合わせて、並列実行、配列処理、ネストされたコンテキストなどの複雑な調整パターンが処理されます。
| 運用 | チェックポイントのタイミング | オペレーション数 | 継続したデータ |
|---|---|---|---|
| 並行 | 起動済み | 1 + N ブランチ (1 親コンテキスト + N 子コンテキスト) | 各ブランチから返されたペイロードサイズの最大 2 コピー、ならびに各ブランチのステータス |
| マッピング | 起動済み | 1 + N ブランチ (1 親コンテキスト + N 子コンテキスト) | 各イテレーションから返されたペイロードサイズの最大 2 コピー、ならびに各イテレーションのステータス |
| 約束ヘルパー | 完了 | 1 | 約束から返されたペイロードサイズ |
| RunInChildContext | 成功/失敗 | 1 | 子コンテキストから返されるペイロードサイズ |
runInChildContext から、または複合オペレーションによって内部的に使用されるコンテキストなどの場合、256 KB 未満の結果は直接チェックポイントされます。大規模な結果は保存されずに、コンテキストのオペレーションが再処理されることでリプレイ中に再構築されます。