diff --git a/src/Propulsion.DynamoStore.Lambda/Function.fs b/src/Propulsion.DynamoStore.Lambda/Function.fs index 5f9373b9..87045b73 100644 --- a/src/Propulsion.DynamoStore.Lambda/Function.fs +++ b/src/Propulsion.DynamoStore.Lambda/Function.fs @@ -1,7 +1,8 @@ -namespace Propulsion.DynamoStore.Lambda +module Propulsion.DynamoStore.Lambda.Program open Amazon.Lambda.Core open Amazon.Lambda.DynamoDBEvents +open Amazon.Lambda.RuntimeSupport open Equinox.DynamoStore open Propulsion.DynamoStore open Serilog @@ -67,5 +68,28 @@ type Function() = .CreateLogger() let service = DynamoStoreIndexer(log, conn.Context, cache, epochBytesCutoff = epochCutoffMiB * 1024 * 1024) // - member _.FunctionHandler(dynamoEvent : DynamoDBEvent, _context : ILambdaContext) = - DynamoStreamsLambda.ingest log service dynamoEvent |> Async.StartImmediateAsTask + // Warm up (pending https://github.com/aws/aws-lambda-dotnet/pull/1091) + member _.InitAsync() = + service.IngestWithoutConcurrency(AppendsTrancheId.wellKnownId, Array.empty) + + member _.Handle(dynamoEvent : DynamoDBEvent) = + DynamoStreamsLambda.ingest log service dynamoEvent + +let adaptInit f () = + async { + do! f () + return true + } |> Async.StartImmediateAsTask +let adaptHandler h x = + h x + |> Async.StartImmediateAsTask + :> System.Threading.Tasks.Task + +[] +let main _ = + let f = Function() + let serializer = Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer() + let t = LambdaBootstrapBuilder.Create<_>(adaptHandler f.Handle, serializer) + .UseBootstrapHandler(adaptInit f.InitAsync) + .Build().RunAsync().GetAwaiter() + let () = t.GetResult() in 0 diff --git a/src/Propulsion.DynamoStore.Lambda/Propulsion.DynamoStore.Lambda.fsproj b/src/Propulsion.DynamoStore.Lambda/Propulsion.DynamoStore.Lambda.fsproj index 433410ca..9241f519 100644 --- a/src/Propulsion.DynamoStore.Lambda/Propulsion.DynamoStore.Lambda.fsproj +++ b/src/Propulsion.DynamoStore.Lambda/Propulsion.DynamoStore.Lambda.fsproj @@ -23,8 +23,10 @@ - + + + diff --git a/src/Propulsion.DynamoStore.Lambda/aws-lambda-tools-defaults.json b/src/Propulsion.DynamoStore.Lambda/aws-lambda-tools-defaults.json index 21daed22..0448e7a2 100644 --- a/src/Propulsion.DynamoStore.Lambda/aws-lambda-tools-defaults.json +++ b/src/Propulsion.DynamoStore.Lambda/aws-lambda-tools-defaults.json @@ -12,5 +12,5 @@ "function-memory-size": 128, "function-timeout": 180, "function-architecture": "arm64", - "function-handler": "Propulsion.DynamoStore.Lambda::Propulsion.DynamoStore.Lambda.Function::FunctionHandler" + "function-handler": "Propulsion.DynamoStore.Lambda" }