

# 基本概念
<a name="durable-basic-concepts"></a>

この AWS Durable Execution SDK は耐久性のある関数を構築するための基盤であり、進行状況のチェックポイント、再試行の処理、実行フローの管理に必要なプリミティブが提供されます。SDK は、JavaScript/TypeScript、Python、Java で利用できます。API リファレンス、クイックスタートチュートリアル、言語固有のガイドを含む完全な SDK ドキュメントについては、「[AWS Durable Execution SDK デベロッパーガイド](https://docs.aws.amazon.com/durable-execution/)」を参照してください。

## 耐久性のある実行
<a name="durable-execution-concept"></a>

**耐久性のある実行**は Lambda の耐久性のある関数における完全なライフサイクルを表し、チェックポイントおよび再生メカニズムを使用してビジネスロジックの進行状況を追跡し、実行を停止し、障害から復旧します。関数が停止または中断の後に再開すると、以前に完了したチェックポイントが再生されて、関数は実行を続行します。

ライフサイクルには、実行を完了するために Lambda 関数の複数の呼び出しが含まれる場合があります (特に停止または障害復旧の後)。このアプローチにより、中断しても信頼性の高い進行状況を維持しながら、関数を長期間 (最大 1 年) 実行できるようになります。

**再生の仕組み**  
関数の実行時に、Lambda はすべての耐久性のあるオペレーション (ステップ、待機、その他のオペレーション) の実行ログを保持します。関数を一時停止する必要がある場合、または中断が発生した場合、Lambda によってこのチェックポイントログが保存されて実行が停止されます。再開すると、Lambda は最初から関数を再度呼び出し、チェックポイントログを再生し、保存された値を完了したオペレーションに置き換えます。つまり、コードが再度実行されますが、以前に完了したステップは再実行されません。代わりに保存された結果が使用されます。

この再生メカニズムは、耐久性のある関数を理解するために不可欠です。コードは再生中に決定的である必要があります。つまり、同じ入力で同じ結果が生成されます。副作用 (ランダムな数値の生成や現在の時刻の取得など) を伴う操作は、再生中に異なる値を生成し、非決定的な動作を引き起こす可能性があるため、ステップ外では避けてください。

## DurableContext
<a name="durable-context-concept"></a>

**DurableContext** は、耐久性のある関数が受け取るコンテキストオブジェクトです。チェックポイントを作成して実行フローを管理するステップや待機など、耐久性のあるオペレーションの方法を提供します。

耐久性のある関数は、デフォルトの Lambda コンテキストではなく、`DurableContext` を受け取ります。

------
#### [ TypeScript ]

```
import {
  DurableContext,
  withDurableExecution,
} from "@aws/durable-execution-sdk-js";

export const handler = withDurableExecution(
  async (event: any, context: DurableContext) => {
    const result = await context.step(async () => {
      return "step completed";
    });
    return result;
  },
);
```

------
#### [ Python ]

```
from aws_durable_execution_sdk_python import (
    DurableContext,
    durable_execution,
    durable_step,
)

@durable_step
def my_step(step_context, data):
    # Your business logic
    return result

@durable_execution
def handler(event, context: DurableContext):
    result = context.step(my_step(event["data"]))
    return result
```

------

`DurableContext` を通じて、関数はチェックポイントの進行と作業の調整を行う耐久性のあるオペレーションにアクセスできます。
+ **ステップ**は、組み込みの再試行および自動チェックポイントでビジネスロジックを実行します。各ステップは結果を保存し、中断後に完了した最後のステップから関数を再開できるようにします。
+ **待機**は、継続する時間になるまで関数の実行が停止する (さらに課金を停止する) 計画された一時停止です。期間、外部コールバック、特定の条件を待機するために使用します。
+ **呼び出し**は、他の Lambda 関数を呼び出し、結果をチェックポイントします。呼び出される関数は、標準関数または高耐久性の関数のいずれかです。クロスアカウントの呼び出しはサポートされていません。

使用可能なすべての永続的なオペレーションの完全な言語リファレンスについては、「AWS Durable Execution SDK デベロッパーガイド」の「[SDK リファレンス](https://docs.aws.amazon.com/durable-execution/sdk-reference/)」を参照してください。

## 耐久性のある関数の設定
<a name="durable-configuration-basic"></a>

耐久性のある関数には、実行動作およびデータ保持を制御する特定の構成設定があります。これらの設定は標準の Lambda 関数設定とは別で、耐久性のある実行ライフサイクルの全体に適用されます。

**DurableConfig** オブジェクトは、耐久性のある関数の設定を定義します。

```
{
  "ExecutionTimeout": Integer,
  "RetentionPeriodInDays": Integer
}
```

### 実行タイムアウト
<a name="durable-execution-timeout"></a>

**実行タイムアウト**は、耐久性のある実行を開始から完了まで実行できる期間を制御します。単一の関数の呼び出しが実行可能な時間を制御する Lambda 関数のタイムアウトとは異なります。

耐久性のある実行はチェックポイント、待機、再生を進行しながら、複数の Lambda 関数の呼び出しをまたくことがあります。実行タイムアウトは、個々の関数の呼び出しではなく、耐久性のある実行の合計経過時間に適用されます。

**違いを理解する**  
Lambda 関数のタイムアウト (最大 15 分) は、関数の個々の呼び出しを制限します。耐久性のある実行タイムアウト (最大 1 年) は、実行の開始から完了、障害発生、タイムアウトまでの合計時間を制限します。この期間中、関数がステップを処理し、待機し、障害から復旧するとき、複数回呼び出されることがあります。

例えば、耐久性のある実行タイムアウトを 24 時間に設定して、Lambda 関数タイムアウトを 5 分に設定した場合、次の条件が該当します。
+ 各関数の呼び出しは 5 分以内に完了する必要があります
+ 耐久性のある実行全体は最大 24 時間実行できます
+ この 24 時間の期間中に関数を何度も呼び出すことができます
+ 待機オペレーションは Lambda 関数のタイムアウトにはカウントされませんが、実行タイムアウトにはカウントされます。

Lambda コンソール、AWS CLI、AWS SAM を使用して、耐久性のある関数を作成するときに実行タイムアウトを設定できます。Lambda コンソールで関数を選択したら [設定] を選択し、耐久性のある実行を選択します。実行タイムアウト値を秒単位で設定します (デフォルトで 86400 秒/24 時間、最小 60 秒、最大 31536000 秒/1 年)。

**注記**  
実行タイムアウトおよび Lambda 関数タイムアウトは設定が異なります。Lambda 関数のタイムアウトは、個々の呼び出しを実行できる時間を制御します (最大 15 分)。実行タイムアウトは、耐久性のある実行全体の合計経過時間を制御します (最大 1 年)。

### 保持期間
<a name="durable-retention-period"></a>

**保持期間**は、耐久性のある実行が完了した後に Lambda が実行履歴およびチェックポイントデータを保持する期間を制御します。このデータにはステップ結果、実行状態、完全なチェックポイントログが含まれます。

保持期間が終了したら、Lambda は実行履歴およびチェックポイントデータを削除します。実行の詳細を取得したり、実行を再生したりすることはできなくなりました。保持期間は、実行が終了状態 (SUCCEEDED、FAILED、STOPPED、TIMED\_OUT) に達したときに開始されます。

Lambda コンソール、AWS CLI、AWS SAM を使用して、耐久性のある関数を作成するときに保持期間を設定できます。Lambda コンソールで関数を選択したら [設定] を選択し、耐久性のある実行を選択します。保持期間の値を日数単位で設定します (デフォルトで 14 日、最小 1 日、最大 90 日)。

コンプライアンス要件、デバッグのニーズ、コストに関する考慮事項に基づいて、保持期間を選択してください。保持期間を長くすると、デバッグや監査の増加する時間に対応できますが、ストレージコストが増加します。

## 関連情報
<a name="durable-basic-concepts-see-also"></a>
+ [AWS Durable Execution SDK デベロッパーガイド](https://docs.aws.amazon.com/durable-execution/) – SDK リファレンス、クイックスタートチュートリアル、テストフレームワーク、言語固有のガイドを完了します。
+ [耐久性のある関数か Step Functions か](durable-step-functions.md) – 耐久性のある関数と Step Functions を比較して、各アプローチがどのような場合に最も効果的かを明らかにします。