Hardened.Amz.Function.DDB.Testing
0.17.0-rc1000
See the version list below for details.
dotnet add package Hardened.Amz.Function.DDB.Testing --version 0.17.0-rc1000
NuGet\Install-Package Hardened.Amz.Function.DDB.Testing -Version 0.17.0-rc1000
<PackageReference Include="Hardened.Amz.Function.DDB.Testing" Version="0.17.0-rc1000" />
<PackageVersion Include="Hardened.Amz.Function.DDB.Testing" Version="0.17.0-rc1000" />
<PackageReference Include="Hardened.Amz.Function.DDB.Testing" />
paket add Hardened.Amz.Function.DDB.Testing --version 0.17.0-rc1000
#r "nuget: Hardened.Amz.Function.DDB.Testing, 0.17.0-rc1000"
#:package Hardened.Amz.Function.DDB.Testing@0.17.0-rc1000
#addin nuget:?package=Hardened.Amz.Function.DDB.Testing&version=0.17.0-rc1000&prerelease
#tool nuget:?package=Hardened.Amz.Function.DDB.Testing&version=0.17.0-rc1000&prerelease
Hardened.Amz
Runs Hardened applications on AWS Lambda. The handlers, parameter binding, configuration and tests are the core framework's. This repository supplies what runs underneath: the Lambda runtimes, response streaming, the test harnesses, a DynamoDB client and CDK constructs.
AWS documentation: ipjohnson.github.io/Hardened.Docs/aws
Start here
The Framework templates generate Lambda projects directly:
dotnet new install Hardened.Templates
dotnet new hardened-web -n Todos --host aws-lambda # web API behind API Gateway
dotnet new hardened-function -n OrderQueue --trigger sqs # SQS batch processor
The first generates the same todo API the Kestrel host does, and a harness that runs it locally over HTTP. A Lambda application is an ordinary Hardened application with a runtime module on it, and the module is the only line that differs from the Kestrel bootstrap:
[HardenedModule]
[LambdaWebModule] // [KestrelRuntime] in the Kestrel host
[TodosLibrary]
public partial class Application;
No handler, service or test in the library project knows which of the two it is running under. That is the whole migration.
The function template is a different shape: a handler marked [HardenedFunction] rather than a
route, invoked with the message body bound to its parameter.
[HardenedModule]
[LambdaFunctionModule]
[SqsLambda]
public partial class Application;
public class OrderHandler(OrderLog log) {
[HardenedFunction]
public Task Process(Order order) {
log.Record(order);
return Task.CompletedTask;
}
}
The runtime module is not optional. An application without one compiles, then throws
'Application' is missing [LambdaFunctionModule] the moment it is constructed.
Lambda application types
covers the project shape, handler and test setup for each transport.
Pick your trigger
| You are handling | Module | Runtime package |
|---|---|---|
| HTTP behind API Gateway | [LambdaWebModule] |
Hardened.Amz.Web.Lambda.Runtime |
| Direct invocation | [LambdaFunctionModule] |
Hardened.Amz.Function.Lambda.Runtime |
| SQS batches | [LambdaFunctionModule] + [SqsLambda] |
Hardened.Amz.Function.Sqs.Runtime |
| DynamoDB Streams | [LambdaFunctionModule] + [DynamoStreamLambda] |
Hardened.Amz.Function.DDB.Runtime |
| Streaming web responses | [StreamingLambdaWebModule] |
Hardened.Amz.Web.Lambda.Streaming |
| Streaming function responses | [StreamingLambdaFunctionModule] |
Hardened.Amz.Function.Lambda.Streaming |
SQS and DynamoDB Streams take a second attribute because they are event sources layered on the direct-invoke path. The SQS runtime deserialises each message body into your handler's parameter type and reports partial batch failures, so a throwing handler fails one message rather than the batch.
The streaming modules drive the Lambda Runtime API directly and start writing the response as it is
produced. The function must be deployed with the RESPONSE_STREAM invoke mode, which
Hardened.Amz.Cdk does not configure for you today.
Testing without AWS
Each runtime has a matching harness that drives the real pipeline in-process. No deployed function, and no mocked SDK types:
LambdaTestApp(Hardened.Amz.Function.Lambda.Testing) invokes function handlers.TestSqsApp(Hardened.Amz.Function.Sqs.Testing) delivers batches and asserts partial failures.Hardened.Amz.Function.DDB.Testingfeeds stream records.[LocalDynamoDb](Hardened.Amz.DynamoDbClient.Testing) runs DynamoDB in Testcontainers.Hardened.Amz.Web.Lambda.Harnessputs the API Gateway pipeline behind a local HTTP listener.
See testing AWS handlers and testing conventions.
Clients and infrastructure
Hardened.Amz.DynamoDbClient provides IDynamoDbClientProvider and DynamoDB extensions
(docs). There is no SQS client package —
the SQS runtime consumes a queue; writing to one means taking a direct AWSSDK.SQS dependency.
Hardened.Amz.Cdk carries the CDK constructs
(docs).
All packages ship to nuget.org as Hardened.Amz.*, releasing in step with the Framework's version
line. The full list is in the
package reference.
Building from source
dotnet build Hardened.Amz.sln
dotnet test Hardened.Amz.sln
src/Directory.Build.targets prefers a sibling ../Hardened.Framework checkout over the pinned
packages when one exists, so the two repositories can be edited together. A checkout at an
incompatible commit fails the build with errors in the other repository's files. Force either side
explicitly:
dotnet build Hardened.Amz.sln -p:UseLocalHardenedFramework=false # pinned packages, as CI builds
dotnet build Hardened.Amz.sln -p:UseLocalHardenedFramework=true # sibling checkout
CI adds -p:ContinuousIntegrationBuild=true, which turns warnings into errors — run a build with
it set before opening a pull request. The DynamoDB client tests need a running Docker daemon, and
fail rather than skip without one — see testing conventions.
Related repositories
- Hardened.Framework — the core framework: contracts, routing, DI, testing
- Hardened.Docs — the documentation site
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net8.0
- Amazon.Lambda.DynamoDBEvents (>= 3.1.1)
- Hardened.Amz.Function.DDB.Runtime (>= 0.17.0-rc1000)
- Hardened.Amz.Function.Lambda.Testing (>= 0.17.0-rc1000)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.18.0-rc1000 | 35 | 9/2/2026 |
| 0.17.0-rc1000 | 47 | 8/31/2026 |
| 0.15.0-rc1000 | 46 | 8/30/2026 |
| 0.14.0-rc1000 | 67 | 8/28/2026 |
| 0.13.0-rc1000 | 56 | 8/25/2026 |
| 0.12.0-rc1000 | 61 | 8/21/2026 |
| 0.11.0-rc1000 | 69 | 8/20/2026 |
| 0.10.0-rc1000 | 60 | 8/19/2026 |
| 0.9.0-rc1000 | 68 | 8/19/2026 |
| 0.6.0-rc1000 | 65 | 8/18/2026 |
| 0.5.0-rc1000 | 69 | 8/17/2026 |
| 0.1.0-rc1 | 61 | 8/14/2026 |