/* * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://aws.amazon.com/apache2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ using Amazon.Lambda.RuntimeSupport.Bootstrap; using Amazon.Lambda.RuntimeSupport.Helpers; using System; using System.Threading.Tasks; namespace Amazon.Lambda.RuntimeSupport { /// /// RuntimeSupportInitializer class responsible for initializing the UserCodeLoader and LambdaBootstrap given a function handler. /// public class RuntimeSupportInitializer { private readonly string _handler; private readonly InternalLogger _logger; private readonly RuntimeSupportDebugAttacher _debugAttacher; /// /// Class constructor that takes a Function Handler and initializes the class. /// public RuntimeSupportInitializer(string handler) { if (string.IsNullOrWhiteSpace(handler)) { throw new ArgumentException("Cannot initialize RuntimeSupportInitializer with a null of empty Function Handler", nameof(handler)); } _logger = InternalLogger.GetDefaultLogger(); _handler = handler; _debugAttacher = new RuntimeSupportDebugAttacher(); } /// /// Initializes the UserCodeLoader using the Function Handler and runs LambdaBootstrap asynchronously. /// 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(); } } } }