Lambda の耐久性のある関数の設定
Lambda 関数の耐久性のある実行を有効にするには、関数を実行できる期間、状態データを保持する期間、必要なアクセス許可を制御する特定の設定を構成する必要があります。
耐久性のある実行を有効にする
Lambda 関数の耐久性のある実行を有効にするには、関数設定で DurableConfig を設定します。この設定は実行タイムアウト、状態保持、バージョニング動作を制御します。
設定パラメータ:
ExecutionTimeout– 秒単位での最大実行時間 (1 年間で最大 31,536,000)RetentionPeriodInDays– 実行状態および履歴を保持する期間 (1 ~ 365 日)AllowInvokeLatest– 耐久性のある実行に $LATEST バージョンを呼び出す許可の可否
耐久性のある関数の IAM アクセス許可
耐久性のある関数には、標準の Lambda 実行ロール以外に追加の IAM アクセス許可が必要です。関数の実行ロールには、状態管理および耐久性のある実行 API のアクセス許可が含まれている必要があります。
必要最小限のアクセス許可:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lambda:InvokeFunction", "lambda:GetFunction", "lambda:ManageDurableState", "lambda:GetDurableExecution", "lambda:ListDurableExecutions" ], "Resource": "arn:aws:lambda:*:*:function:*" }, { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:*:*:*" } ] }
CloudFormation の実行ロールの例:
DurableFunctionRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: Service: lambda.amazonaws.com Action: sts:AssumeRole ManagedPolicyArns: - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole Policies: - PolicyName: DurableFunctionPolicy PolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Action: - lambda:ManageDurableState - lambda:GetDurableExecution - lambda:ListDurableExecutions Resource: '*'
設定のベストプラクティス
本番稼働用に耐久性のある関数を設定する際、次のベストプラクティスに従ってください。
-
適切な実行タイムアウトの設定 – ワークフローの最大予想期間に基づいて
ExecutionTimeoutを設定します。コストおよびリソースの割り当てに影響するため、不要に長いタイムアウトを設定しないでください。 -
ストレージコストで保持のバランスを取る – デバッグおよび監査の要件に基づいて
RetentionPeriodInDaysを設定します。保持期間を長くすると、ストレージコストが増加します。 -
本番稼働でバージョニングの使用 – 本番環境で
AllowInvokeLatestをfalseに設定し、耐久性のある実行に特定の関数バージョンまたはエイリアスを使用します。 -
状態サイズのモニタリング – 大規模な状態オブジェクトはストレージコストを増加させ、パフォーマンスに影響する可能性があります。状態を最小限に抑えて、大容量データには外部ストレージを使用します。
-
適切なログ記録の設定 – 長時間のワークフローをトラブルシューティングするため、詳細なログ記録を有効にしますが、ログの量とコストには注意してください。
本番稼働設定の例
{ "ExecutionTimeout": 86400, "RetentionPeriodInDays": 7, "AllowInvokeLatest": false }