

# Lambda の耐久性のある関数におけるベストプラクティス
<a name="durable-best-practices"></a>

耐久性のある関数には、従来の Lambda 関数とは異なるプログラミングプラクティスを必要とする再生ベースの実行モデルが使用されます。耐久性のあるワークフローコードを記述およびテストする方法のガイダンスについては、「AWS Durable Execution SDK デベロッパーガイド」の「[ベストプラクティス](https://docs.aws.amazon.com/durable-execution/patterns/best-practices/)」を参照してください。

以下の推奨事項は、Lambda の耐久性のある関数のデプロイ、呼び出し、モニタリングを行うためのベストプラクティスです。

## 関数のバージョンとエイリアス
<a name="durable-versioning"></a>

バージョン番号またはエイリアスを使用して関数を呼び出し、実行を特定のコードバージョンに固定します。新しいコードバージョンが古いバージョンの状態を処理できることを確認してください。再生を中断する原因となるステップの名前変更や動作の変更をしないでください。

## モニタリング
<a name="durable-monitoring-best-practices"></a>

実行 ID およびステップ名で構造化ログ記録を有効にします。エラー率および実行期間に CloudWatch アラームを設定します。トレースを使用してボトルネックを特定します。詳細なガイダンスについては、「[モニタリングとデバッグ](durable-monitoring.md)」を参照してください。

## エラー処理
<a name="durable-error-handling-best-practices"></a>

一時的な障害の再試行戦略を設定することに加えて、永続的に失敗した実行からのイベントをキャプチャするように、耐久性のある関数でデッドレターキュー (DLQ) を設定します。耐久性のある実行が非同期呼び出しの後に終了状態 (FAILED、STOPPED、または TIMED\_OUT) に遷移すると、Lambda は元のトリガーイベントを DLQ に送信します。これにより、失敗したイベントを失うことなく検査、デバッグ、再処理 (オプション) を行うことができます。

DLQ を設定するには、関数の `DeadLetterConfig` プロパティを Amazon SQS キューまたは Amazon SNS トピック ARN に設定します。詳細については、「[デッドレターキュー](invocation-async-retain-records.md#invocation-dlq)」を参照してください。

耐久性のある関数でのエラー処理については、次のベストプラクティスに従ってください。
+ **非同期呼び出し用に DLQ を設定する** – 耐久性のある関数を非同期的に呼び出すときは、必ずデッドレターキューをアタッチします。標準の Lambda 関数とは異なり、耐久性のある実行は失敗しても自動的に再試行されないため、DLQ は実行が完全に失敗したイベントをキャプチャするためのセーフティネットです。
+ **ステップ内で再試行戦略を使用する** – 一時的な障害に対する適切なバックオフで明示的な再試行戦略を設定します。再試行の設定に関するガイダンスについては、「[Retries for durable functions](durable-execution-sdk-retries.md)」を参照してください。
+ **DLQ と EventBridge 通知を組み合わせる** – EventBridge ルールを使用して FAILED、STOPPED、および TIMED\_OUT のステータス変更をアラートしてリアルタイムで可視化し、DLQ を使用して元のイベントペイロードを保持し、後で分析または再処理できるようにします。
+ **DLQ 深度をモニターする** – DLQ の `ApproximateNumberOfMessagesVisible` メトリクスに CloudWatch アラームを作成して、障害が蓄積されるタイミングを検出します。

## 関連リソース
<a name="durable-additional-resources"></a>
+ [AWS Durable Execution SDK デベロッパーガイド](https://docs.aws.amazon.com/durable-execution/)
+ [Lambda の耐久関数のモニタリング](durable-monitoring.md)
+ [Lambda の耐久関数の再試行](durable-execution-sdk-retries.md)
+ [Lambda の耐久関数のテスト](durable-testing.md)