Configuración de las funciones duraderas de Lambda - AWS Lambda

Configuración de las funciones duraderas de Lambda

Para habilitar una ejecución duradera de la función de Lambda, debe configurar ajustes específicos que controlen cuánto tiempo puede ejecutarse la función, cuánto tiempo se retienen los datos de estado y qué permisos se requieren.

Habilitación de la ejecución duradera

Para habilitar la ejecución duradera de la función de Lambda, configúrela en DurableConfig en la configuración de la función. Esta configuración controla el tiempo de espera de la ejecución, la retención del estado y el comportamiento del control de versiones.

AWS CLI
aws lambda update-function-configuration \ --function-name my-durable-function \ --durable-config '{ "ExecutionTimeout": 3600, "RetentionPeriodInDays": 30, "AllowInvokeLatest": true }'
CloudFormation
Resources: MyDurableFunction: Type: AWS::Lambda::Function Properties: FunctionName: my-durable-function Runtime: nodejs18.x Handler: index.handler Code: ZipFile: | // Your durable function code DurableConfig: ExecutionTimeout: 3600 RetentionPeriodInDays: 30 AllowInvokeLatest: true

Parámetros de configuración:

  • ExecutionTimeout: tiempo máximo de ejecución en segundos (hasta 31 536 000 en 1 año)

  • RetentionPeriodInDays: cuánto tiempo se retendrá el estado y el historial de ejecución (de 1 a 365 días)

  • AllowInvokeLatest: si se debe permitir la invocación de la versión $LATEST para una ejecución duradera.

Permisos de IAM para funciones duraderas

Las funciones duraderas requieren permisos de IAM adicionales a los de los roles de ejecución estándar de Lambda. El rol de ejecución de la función debe incluir permisos de administración de estados y ejecución duradera para las API.

Permisos mínimos necesarios:

{ "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:*:*:*" } ] }

Ejemplo de rol de ejecución de 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: '*'

Prácticas recomendadas de configuración

Siga estas prácticas recomendadas cuando configure funciones duraderas para uso en producción:

  • Establezca los tiempos de espera de ejecución adecuados: configure ExecutionTimeout en función de la duración máxima esperada de su flujo de trabajo. No establezca tiempos de espera innecesariamente prolongados, ya que afectan la asignación de costos y recursos.

  • Equilibre la retención con los costos de almacenamiento: configure RetentionPeriodInDays en función de sus requisitos de depuración y auditoría. Los períodos de retención más prolongados aumentan los costos de almacenamiento.

  • Utilice el control de versiones en producción: configure AllowInvokeLatest en false en entornos de producción y utilice versiones o alias de funciones específicas para lograr ejecuciones duraderas.

  • Supervise el tamaño del estado: los objetos de estado grandes aumentan los costos de almacenamiento y pueden afectar el rendimiento. Mantenga el estado mínimo y utilice almacenamiento externo para datos de gran tamaño.

  • Configure el registro adecuado: habilite el registro detallado para solucionar problemas de flujos de trabajo de larga duración, pero tenga en cuenta el volumen y los costos del registro.

Ejemplo de configuración de producción:

{ "ExecutionTimeout": 86400, "RetentionPeriodInDays": 7, "AllowInvokeLatest": false }