/// <summary> /// Initializes the UserCodeLoader using the Function Handler and runs LambdaBootstrap asynchronously. /// </summary> public async Task RunLambdaBootstrap() { await _debugAttacher.TryAttachDebugger(); var userCodeLoader = new UserCodeLoader(_handler, _logger); var initializer = new UserCodeInitializer(userCodeLoader, _logger); using (var handlerWrapper = HandlerWrapper.GetHandlerWrapper(userCodeLoader.Invoke)) using (var bootstrap = new LambdaBootstrap(handlerWrapper, initializer.InitializeAsync)) { await bootstrap.RunAsync(); } }
/// <summary> /// Get a HandlerWrapper that will call the given method on function invocation. /// Note that you may have to cast your handler to its specific type to help the compiler. /// Example handler signature: PocoOut Handler(Stream, ILambdaContext) /// </summary> /// <param name="handler">Func called for each invocation of the Lambda function.</param> /// <param name="serializer">ILambdaSerializer to use when calling the handler</param> /// <returns>A HandlerWrapper</returns> public static HandlerWrapper GetHandlerWrapper <TOutput>(Func <Stream, ILambdaContext, TOutput> handler, ILambdaSerializer serializer) { var handlerWrapper = new HandlerWrapper(); handlerWrapper.Handler = (invocation) => { TOutput output = handler(invocation.InputStream, invocation.LambdaContext); handlerWrapper.OutputStream.SetLength(0); serializer.Serialize(output, handlerWrapper.OutputStream); handlerWrapper.OutputStream.Position = 0; return(Task.FromResult(new InvocationResponse(handlerWrapper.OutputStream, false))); }; return(handlerWrapper); }
/// <summary> /// Get a HandlerWrapper that will call the given delegate on function invocation. /// </summary> /// <param name="invokeDelegate">Action called for each invocation of the Lambda function</param> /// <returns>A HandlerWrapper</returns> public static HandlerWrapper GetHandlerWrapper(Action <Stream, ILambdaContext, MemoryStream> invokeDelegate) { var handlerWrapper = new HandlerWrapper(); handlerWrapper.Handler = invocation => { handlerWrapper.OutputStream.SetLength(0); invokeDelegate(invocation.InputStream, invocation.LambdaContext, handlerWrapper.OutputStream); handlerWrapper.OutputStream.Position = 0; var response = new InvocationResponse(handlerWrapper.OutputStream, false); return(Task.FromResult(response)); }; return(handlerWrapper); }
/// <summary> /// Get a HandlerWrapper that will call the given method on function invocation. /// Note that you may have to cast your handler to its specific type to help the compiler. /// Example handler signature: Task<PocoOut> Handler(ILambdaContext) /// </summary> /// <param name="handler">Func called for each invocation of the Lambda function.</param> /// <param name="serializer">ILambdaSerializer to use when calling the handler</param> /// <returns>A HandlerWrapper</returns> public static HandlerWrapper GetHandlerWrapper <TOutput>(Func <ILambdaContext, Task <TOutput> > handler, ILambdaSerializer serializer) { var handlerWrapper = new HandlerWrapper(); handlerWrapper.Handler = async(invocation) => { TOutput output = await handler(invocation.LambdaContext); handlerWrapper.OutputStream.SetLength(0); serializer.Serialize(output, handlerWrapper.OutputStream); handlerWrapper.OutputStream.Position = 0;; return(new InvocationResponse(handlerWrapper.OutputStream, false)); }; return(handlerWrapper); }
/// <summary> /// Create a LambdaBootstrap that will call the given initializer and handler. /// </summary> /// <param name="httpClient">The HTTP client to use with the Lambda runtime.</param> /// <param name="handlerWrapper">The HandlerWrapper to call for each invocation of the Lambda function.</param> /// <param name="initializer">Delegate called to initialize the Lambda function. If not provided the initialization step is skipped.</param> /// <returns></returns> public LambdaBootstrap(HttpClient httpClient, HandlerWrapper handlerWrapper, LambdaBootstrapInitializer initializer = null) : this(httpClient, handlerWrapper.Handler, initializer, ownsHttpClient : false) { }
/// <summary> /// Create a LambdaBootstrap that will call the given initializer and handler. /// </summary> /// <param name="handlerWrapper">The HandlerWrapper to call for each invocation of the Lambda function.</param> /// <param name="initializer">Delegate called to initialize the Lambda function. If not provided the initialization step is skipped.</param> /// <returns></returns> public LambdaBootstrap(HandlerWrapper handlerWrapper, LambdaBootstrapInitializer initializer = null) : this(handlerWrapper.Handler, initializer) { }
/// <summary> /// Create a builder for creating the LambdaBootstrap. /// </summary> /// <param name="handler">The handler that will be called for each Lambda invocation</param> /// <returns></returns> public static LambdaBootstrapBuilder Create(Func <Stream, ILambdaContext, Task> handler) { return(new LambdaBootstrapBuilder(HandlerWrapper.GetHandlerWrapper(handler))); }
/// <summary> /// Create a builder for creating the LambdaBootstrap. /// </summary> /// <param name="handler">The handler that will be called for each Lambda invocation</param> /// <param name="serializer">The Lambda serializer that will be used to convert between Lambda's JSON documents and .NET objects.</param> /// <returns></returns> public static LambdaBootstrapBuilder Create <TInput>(Func <TInput, Task> handler, ILambdaSerializer serializer) { return(new LambdaBootstrapBuilder(HandlerWrapper.GetHandlerWrapper <TInput>(handler, serializer))); }
/// <summary> /// Create a builder for creating the LambdaBootstrap. /// </summary> /// <param name="handler">The handler that will be called for each Lambda invocation</param> /// <returns></returns> public static LambdaBootstrapBuilder Create(Action <Stream, ILambdaContext, MemoryStream> handler) { return(new LambdaBootstrapBuilder(HandlerWrapper.GetHandlerWrapper(handler))); }
/// <summary> /// Create a builder for creating the LambdaBootstrap. /// </summary> /// <param name="handler">The handler that will be called for each Lambda invocation</param> /// <param name="serializer">The Lambda serializer that will be used to convert between Lambda's JSON documents and .NET objects.</param> /// <returns></returns> public static LambdaBootstrapBuilder Create <TOutput>(Func <Stream, ILambdaContext, TOutput> handler, ILambdaSerializer serializer) { return(new LambdaBootstrapBuilder(HandlerWrapper.GetHandlerWrapper <TOutput>(handler, serializer))); }
private LambdaBootstrapBuilder(HandlerWrapper handlerWrapper) { this._handlerWrapper = handlerWrapper; }
/// <summary> /// Create a builder for creating the LambdaBootstrap. /// </summary> /// <param name="handler">The handler that will be called for each Lambda invocation</param> /// <param name="serializer">The Lambda serializer that will be used to convert between Lambda's JSON documents and .NET objects.</param> /// <returns></returns> public static LambdaBootstrapBuilder Create <TInput>(Action <TInput, ILambdaContext> handler, ILambdaSerializer serializer) { return(new LambdaBootstrapBuilder(HandlerWrapper.GetHandlerWrapper <TInput>(handler, serializer))); }
/// <summary> /// Create a builder for creating the LambdaBootstrap. /// </summary> /// <param name="handler">The handler that will be called for each Lambda invocation</param> /// <returns></returns> public static LambdaBootstrapBuilder Create(Action handler) { return(new LambdaBootstrapBuilder(HandlerWrapper.GetHandlerWrapper(handler))); }
/// <summary> /// Create a builder for creating the LambdaBootstrap. /// </summary> /// <param name="handler">The handler that will be called for each Lambda invocation</param> /// <returns></returns> public static LambdaBootstrapBuilder Create(Func <Task <Stream> > handler) { return(new LambdaBootstrapBuilder(HandlerWrapper.GetHandlerWrapper(handler))); }