Skip to content

Integrate [DurableExecution] with the Annotations source generator#2410

Draft
GarrettBeatty wants to merge 1 commit into
feature/durablefunctionfrom
gcbeatty/durable-annotations
Draft

Integrate [DurableExecution] with the Annotations source generator#2410
GarrettBeatty wants to merge 1 commit into
feature/durablefunctionfrom
gcbeatty/durable-annotations

Conversation

@GarrettBeatty

@GarrettBeatty GarrettBeatty commented Jun 8, 2026

Copy link
Copy Markdown
Contributor

Add a [DurableExecution] attribute (in Amazon.Lambda.Annotations) and source generator support so a method annotated with [LambdaFunction] + [DurableExecution] generates:

  • a typed-envelope handler wrapper delegating to DurableFunction.WrapAsync<TInput[,TOutput]>
  • a DurableConfig block on the function resource in the generated CFN/SAM template
  • lambda:CheckpointDurableExecution / lambda:GetDurableExecutionState IAM permissions (per-function inline policy; skipped when an explicit Role is set)

Validation gates (AWSLambda0140-0143) require durable functions to be executable (OutputKind), Zip-packaged, and have the (TInput, IDurableContext) -> Task/Task signature; combining with another event attribute reuses the existing AWSLambda0102.

The generated WrapAsync call emits explicit generic type arguments because method-group arguments cannot be inferred for the Func<,,> parameter (CS0411).

Issue #, if available:
#2216
Description of changes:

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

Add a [DurableExecution] attribute (in Amazon.Lambda.Annotations) and source
generator support so a method annotated with [LambdaFunction] + [DurableExecution]
generates:
- a typed-envelope handler wrapper delegating to DurableFunction.WrapAsync<TInput[,TOutput]>
- a DurableConfig block on the function resource in the generated CFN/SAM template
- lambda:CheckpointDurableExecution / lambda:GetDurableExecutionState IAM permissions
  (per-function inline policy; skipped when an explicit Role is set)

Validation gates (AWSLambda0140-0143) require durable functions to be executable
(OutputKind), Zip-packaged, and have the (TInput, IDurableContext) -> Task/Task<TOutput>
signature; combining with another event attribute reuses the existing AWSLambda0102.

The generated WrapAsync call emits explicit generic type arguments because method-group
arguments cannot be inferred for the Func<,,> parameter (CS0411).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant