Add lambda.DurableFunction blueprint (vs2026)#2445
Conversation
Adds a new 'dotnet new' template (shortName: lambda.DurableFunction) under Blueprints/BlueprintDefinitions/vs2026 that scaffolds a Lambda durable execution workflow using the Annotations class-library programming model on the managed dotnet10 runtime. The sample workflow demonstrates the core durable primitives: StepAsync, a step with an exponential RetryStrategy and AtMostOncePerRetry semantics, WaitAsync (suspend timer), and RunInChildContextAsync. The generated serverless.template includes DurableConfig and the AWSLambdaBasicDurableExecutionRolePolicy managed policy. A test project drives the workflow locally via Amazon.Lambda.DurableExecution.Testing. Also registers the template in Blueprints/README.md.
| <PackageReference Include="Amazon.Lambda.Core" Version="3.1.1" /> | ||
| <PackageReference Include="Amazon.Lambda.Serialization.SystemTextJson" Version="3.0.0" /> | ||
| <PackageReference Include="Amazon.Lambda.Annotations" Version="2.0.1" /> | ||
| <PackageReference Include="Amazon.Lambda.DurableExecution" Version="0.1.1-preview" /> |
There was a problem hiding this comment.
will update to ga version once released
| <ItemGroup> | ||
| <PackageReference Include="Amazon.Lambda.Core" Version="3.1.1" /> | ||
| <PackageReference Include="Amazon.Lambda.TestUtilities" Version="4.1.0" /> | ||
| <PackageReference Include="Amazon.Lambda.DurableExecution.Testing" Version="0.0.1-preview" /> |
There was a problem hiding this comment.
since this pr isnt merged yet, i tested with local nuget feed.
# 1. Pack the three required packages into a local feed
FEED=/tmp/durable-feed && mkdir -p "$FEED"
cd Libraries/src/Amazon.Lambda.Annotations && dotnet pack -c Release -o "$FEED"
cd ../Amazon.Lambda.DurableExecution && dotnet pack -c Release -o "$FEED"
cd ../Amazon.Lambda.DurableExecution.Testing && dotnet pack -c Release -o "$FEED"
# 2. Install the template from the blueprint folder
cd <repo>/Blueprints/BlueprintDefinitions/vs2026/DurableFunction/template/src/BlueprintBaseName.1
dotnet new install . # or install from the .template.config location
# 3. Instantiate into a scratch dir
mkdir /tmp/dtest && cd /tmp/dtest
dotnet new lambda.DurableFunction --name MyOrders
# 4. Build + test against the local feed
dotnet test --source "$FEED" --source https://api.nuget.org/v3/index.json
| @@ -0,0 +1,39 @@ | |||
| { | |||
There was a problem hiding this comment.
intentionally only added to vs2026. didnt feel like it was worth adding to 2024 folder since dotnet8 will be end of life soon
|
The test project isn't actually bundled when doing a new project (same with other projects) but adding here to be consistent |
normj
left a comment
There was a problem hiding this comment.
The pattern of the template library is templates that start with the lambda. prefix deploy directory to Lambda. For example using the dotnet lambda deploy-function command. For templates that deploy via CloudFormation start with serverless. and you would deploy via the dotnet lambda deploy-serverless command.
I suggest we have 2 templates. One that goes directly to Lambda and uses the static wrapper method instead of annotations so it can be deploy straight to Lambda. Then a second serverless.* template that is what you have here.
The test project is still useful when you create the template via Visual Studio. |
philasmar
left a comment
There was a problem hiding this comment.
approving assuming you address norm's feedback
Summary
Adds a new
dotnet newtemplate —lambda.DurableFunction— underBlueprints/BlueprintDefinitions/vs2026that scaffolds a Lambda durable execution workflow.[LambdaFunction]+[DurableExecution]) on the managed dotnet10 runtime (durable execution requires dotnet10).ProcessOrderworkflow demonstrates the core durable primitives:StepAsync— checkpointed stepStepAsync+RetryStrategy.ExponentialwithStepSemantics.AtMostOncePerRetryWaitAsync— suspend timer (no compute charge while suspended)RunInChildContextAsync— grouping related stepsserverless.templateincludesDurableConfigand theAWSLambdaBasicDurableExecutionRolePolicymanaged policy (kept in sync by the source generator).Amazon.Lambda.DurableExecution.Testing(no AWS resources needed).Blueprints/README.md.vs2026 only for now (matches the existing vs2026 layout convention).
Testing
Validated locally (durable preview packages packed into a local NuGet feed):
dotnet buildof the function project succeeds on net10.0; source generator emitsFunction_ProcessOrder_Generated::ProcessOrder, matching the handler inserverless.template.dotnet test— both unit tests pass, no warnings.dotnet new lambda.DurableFunction --name <X>instantiates correctly and the shortName resolves.Notes
Amazon.Lambda.DurableExecution.Testingis not yet published to NuGet; the template references0.0.1-preview. The test project will restore once that package is published (or via a local feed in the meantime)..autoverchange file needed (autover tracksLibraries/srcprojects only).