![]() |
VOOZH | about |
MinimalLambda.Envelopes.Kinesis
Additional DetailsThis package has been renamed to MinimalLambda.Envelopes.Kinesis. Please migrate to the new package: MinimalLambda.Envelopes.Kinesis
dotnet add package AwsLambda.Host.Envelopes.Kinesis --version 1.3.1
NuGet\Install-Package AwsLambda.Host.Envelopes.Kinesis -Version 1.3.1
<PackageReference Include="AwsLambda.Host.Envelopes.Kinesis" Version="1.3.1" />
<PackageVersion Include="AwsLambda.Host.Envelopes.Kinesis" Version="1.3.1" />Directory.Packages.props
<PackageReference Include="AwsLambda.Host.Envelopes.Kinesis" />Project file
paket add AwsLambda.Host.Envelopes.Kinesis --version 1.3.1
#r "nuget: AwsLambda.Host.Envelopes.Kinesis, 1.3.1"
#:package AwsLambda.Host.Envelopes.Kinesis@1.3.1
#addin nuget:?package=AwsLambda.Host.Envelopes.Kinesis&version=1.3.1Install as a Cake Addin
#tool nuget:?package=AwsLambda.Host.Envelopes.Kinesis&version=1.3.1Install as a Cake Tool
Strongly-typed Kinesis event handling for the AwsLambda.Host framework.
This package provides KinesisEnvelope<T>, which extends the base
KinesisEvent
class with a generic Records collection that deserializes Kinesis data streams into strongly-typed
objects. Instead of manually decoding and parsing base64 data from record.Kinesis.Data, you access
deserialized payloads directly via record.Kinesis.DataContent.
| Envelope Class | Base Class | Use Case |
|---|---|---|
KinesisEnvelope<T> |
KinesisEvent |
Kinesis event with deserialized stream records |
Define your record type and handler:
using Amazon.Lambda.KinesisEvents;
using AwsLambda.Host.Builder;
using AwsLambda.Host.Envelopes.Kinesis;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
var builder = LambdaApplication.CreateBuilder();
var lambda = builder.Build();
// KinesisEnvelope<StreamRecord> provides access to the Kinesis event and deserialized StreamRecord payloads
lambda.MapHandler(
([Event] KinesisEnvelope<StreamRecord> envelope, ILogger<Program> logger) =>
{
foreach (var record in envelope.Records)
{
logger.LogInformation(
"Stream Record: {EventName} at {Timestamp}",
record.Kinesis.DataContent?.EventName,
record.Kinesis.DataContent?.Timestamp
);
}
}
);
await lambda.RunAsync();
// Your record payload - will be deserialized from base64-encoded Kinesis data stream
internal record StreamRecord(string EventName, DateTime Timestamp);
To implement custom deserialization logic, extend KinesisEnvelopeBase<T> and override the
ExtractPayload method:
// Example: Custom XML deserialization
public sealed class KinesisXmlEnvelope<T> : KinesisEnvelopeBase<T>
{
private static readonly XmlSerializer Serializer = new(typeof(T));
public override void ExtractPayload(EnvelopeOptions options)
{
foreach (var record in Records)
{
using var reader = new StreamReader(
record.Kinesis.Data,
Encoding.UTF8,
leaveOpen: true
);
var base64String = reader.ReadToEnd();
var xmlBytes = Convert.FromBase64String(base64String);
using var xmlReader = XmlReader.Create(
new MemoryStream(xmlBytes),
options.XmlReaderSettings
);
record.Kinesis.DataContent = (T)Serializer.Deserialize(xmlReader)!;
}
}
}
This pattern allows you to support multiple serialization formats while maintaining the same envelope interface.
When using .NET Native AOT, register both the envelope and payload types in your
JsonSerializerContext:
[JsonSerializable(typeof(KinesisEnvelope<StreamRecord>))]
[JsonSerializable(typeof(StreamRecord))]
internal partial class SerializerContext : JsonSerializerContext;
Register the serializer and configure envelope options to use the context:
builder.Services.AddLambdaSerializerWithContext<SerializerContext>();
builder.Services.ConfigureEnvelopeOptions(options =>
{
options.JsonOptions.TypeInfoResolver = SerializerContext.Default;
});
The context must be registered as the type resolver for both the envelope options and the Lambda serializer because the Lambda event and envelope payload are deserialized at different steps: the Lambda serializer deserializes the raw event, and the envelope options deserialize the envelope content into your payload type.
Additional packages in the aws-lambda-host framework for abstractions, observability, and event source handling.
This project is licensed under the MIT License. See for details.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 net8.0 is compatible. net8.0-android net8.0-android was computed. net8.0-browser net8.0-browser was computed. net8.0-ios net8.0-ios was computed. net8.0-maccatalyst net8.0-maccatalyst was computed. net8.0-macos net8.0-macos was computed. net8.0-tvos net8.0-tvos was computed. net8.0-windows net8.0-windows was computed. net9.0 net9.0 is compatible. net9.0-android net9.0-android was computed. net9.0-browser net9.0-browser was computed. net9.0-ios net9.0-ios was computed. net9.0-maccatalyst net9.0-maccatalyst was computed. net9.0-macos net9.0-macos was computed. net9.0-tvos net9.0-tvos was computed. net9.0-windows net9.0-windows was computed. net10.0 net10.0 is compatible. net10.0-android net10.0-android was computed. net10.0-browser net10.0-browser was computed. net10.0-ios net10.0-ios was computed. net10.0-maccatalyst net10.0-maccatalyst was computed. net10.0-macos net10.0-macos was computed. net10.0-tvos net10.0-tvos was computed. net10.0-windows net10.0-windows was computed. |
This package is not used by any NuGet packages.
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|