Example #1
0
        public InvokeData ReceiveInvoke(IDictionary initialEnvironmentVariables, RuntimeReceiveInvokeBuffers buffers)
        {
            Console.Error.WriteLine($"START RequestId: {context.RequestId} Version: {context.FunctionVersion}");

            invoked = true;

            var outputStream = new MemoryStream(outputBuffer);

            outputStream.SetLength(0);

            curSBSharedMem = new SBSharedMem(sharedMem);
            return(new InvokeData(curSBSharedMem)
            {
                RequestId = context.RequestId,
                AwsCredentials = new AwsCredentials
                {
                    AccessKeyId = EnvHelper.GetOrDefault("AWS_ACCESS_KEY_ID", "SOME_ACCESS_KEY_ID"),
                    SecretAccessKey = EnvHelper.GetOrDefault("AWS_SECRET_ACCESS_KEY", "SOME_SECRET_ACCESS_KEY"),
                    SessionToken = System.Environment.GetEnvironmentVariable("AWS_SESSION_TOKEN")
                },
                XAmznTraceId = EnvHelper.GetOrDefault("_X_AMZN_TRACE_ID", ""),
                InputStream = context.InputStream,
                OutputStream = outputStream,
                LambdaContextInternal = new LambdaContextInternal(
                    context.RemainingTime,
                    SendCustomerLogMessage,
                    new Lazy <CognitoClientContextInternal>(),
                    context.RequestId,
                    new Lazy <string>(context.Arn),
                    new Lazy <string>(string.Empty),
                    new Lazy <string>(string.Empty),
                    initialEnvironmentVariables
                    )
            });
        }
Example #2
0
        unsafe InvokeData ILambdaRuntime.ReceiveInvoke(IDictionary initialEnvironmentVariables, RuntimeReceiveInvokeBuffers buffers)
        {
            if (!invoked)
            {
                receivedInvokeAt = DateTimeOffset.Now;
                invoked          = true;
            }
            else
            {
                logs = "";
            }
            HttpResponseMessage result = null;

            try
            {
                result = client.GetAsync("http://127.0.0.1:9001/2018-06-01/runtime/invocation/next").Result;
            }
            catch (AggregateException ae)
            {
                if (ae.InnerException is HttpRequestException && ae.InnerException.InnerException != null &&
                    (ae.InnerException.InnerException is SocketException ||
                     // happens on dotnetcore2.0
                     ae.InnerException.InnerException.GetType().ToString().Equals("System.Net.Http.CurlException")))
                {
                    System.Environment.Exit(context.StayOpen ? 2 : (invokeError == null ? 0 : 1));
                }
                else
                {
                    throw ae;
                }
            }

            if (result.StatusCode != HttpStatusCode.OK)
            {
                throw new Exception("Got a bad response from the bootstrap");
            }

            var requestId       = result.Headers.GetValues("Lambda-Runtime-Aws-Request-Id").First();
            var deadlineMs      = result.Headers.GetValues("Lambda-Runtime-Deadline-Ms").First();
            var functionArn     = result.Headers.GetValues("Lambda-Runtime-Invoked-Function-Arn").First();
            var xAmznTraceId    = result.Headers.GetValues("Lambda-Runtime-Trace-Id").First();
            var clientContext   = HeaderHelper.GetFirstOrDefault(result.Headers, "Lambda-Runtime-Client-Context");
            var cognitoIdentity = HeaderHelper.GetFirstOrDefault(result.Headers, "Lambda-Runtime-Cognito-Identity");

            logTail = HeaderHelper.GetFirstOrDefault(result.Headers, "Docker-Lambda-Log-Type") == "Tail";

            var body = result.Content.ReadAsStringAsync().Result;

            context.RequestId  = requestId;
            context.DeadlineMs = long.Parse(deadlineMs);
            context.Body       = body;

            curSBSharedMem = new SBSharedMem(sharedMem);
            return(new InvokeData(curSBSharedMem)
            {
                RequestId = context.RequestId,
                AwsCredentials = new AwsCredentials
                {
                    AccessKeyId = EnvHelper.GetOrDefault("AWS_ACCESS_KEY_ID", "SOME_ACCESS_KEY_ID"),
                    SecretAccessKey = EnvHelper.GetOrDefault("AWS_SECRET_ACCESS_KEY", "SOME_SECRET_ACCESS_KEY"),
                    SessionToken = System.Environment.GetEnvironmentVariable("AWS_SESSION_TOKEN")
                },
                XAmznTraceId = xAmznTraceId,
                InputStream = context.InputStream,
                OutputStream = new UnmanagedMemoryStream(curSBSharedMem.EventBody, 0, SBSharedMem.SizeOfEventBody, FileAccess.Write),
                LambdaContextInternal = new LambdaContextInternal(
                    context.RemainingTime,
                    SendCustomerLogMessage,
                    GetCognitoClientContextInternalLazy(clientContext),
                    context.RequestId,
                    new Lazy <string>(context.Arn),
                    GetCognitoIdentityIdLazy(cognitoIdentity),
                    GetCognitoIdentityPoolIdLazy(cognitoIdentity),
                    initialEnvironmentVariables
                    )
            });
        }