From 4b200a22d9327484fb71d9af9c38d9c6f13eff70 Mon Sep 17 00:00:00 2001 From: Ruben Bartelink Date: Tue, 31 May 2022 12:49:08 +0100 Subject: [PATCH] Use net6.0 Lambda hosting --- src/Propulsion.DynamoStore.Lambda/Function.fs | 31 ++++++++++++++++--- .../Propulsion.DynamoStore.Lambda.fsproj | 4 ++- .../aws-lambda-tools-defaults.json | 2 +- 3 files changed, 31 insertions(+), 6 deletions(-) diff --git a/src/Propulsion.DynamoStore.Lambda/Function.fs b/src/Propulsion.DynamoStore.Lambda/Function.fs index 5f9373b9..0d5e7bce 100644 --- a/src/Propulsion.DynamoStore.Lambda/Function.fs +++ b/src/Propulsion.DynamoStore.Lambda/Function.fs @@ -1,7 +1,7 @@ -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 +67,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" }