Beispiel #1
0
        /// <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();
                }
        }
Beispiel #2
0
        /// <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);
        }
Beispiel #3
0
        /// <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);
        }
Beispiel #4
0
        /// <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&ltPocoOut&gt 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);
        }
Beispiel #5
0
 /// <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)
 {
 }
Beispiel #6
0
 /// <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)));
 }