コード例 #1
0
        public async Task <KinesisFirehoseTransformResponse> ExecAsync(KinesisFirehoseEvent request, ILambdaContext context)
        {
            List <KinesisFirehoseTransformedRecord> TransformedRecords = new List <KinesisFirehoseTransformedRecord>();

            foreach (KinesisFirehoseRecord Record in request.Records)
            {
                KinesisFirehoseTransformedRecord Transform = await KinesisFirehoseTransformedRecord.BuildAsync(Record, async x => {
                    try
                    {
                        JObject Obj = JObject.Parse(x);
                        string Row  = Convert.ToBase64String(Encoding.UTF8.GetBytes(String.Join("|", Obj.ToObject <Dictionary <string, string> >().Select(y => y.Value)) + "\n"));
                        await Task.Run(() => { Thread.Sleep(1); });
                        return(new TransformationResult(Row, TransformationResultStatus.OK));
                    }
                    catch (Exception)
                    {
                        return(new TransformationResult(x, TransformationResultStatus.PROCESSING_FAILED));
                    }
                });

                TransformedRecords.Add(Transform);
            }

            return(new KinesisFirehoseTransformResponse(TransformedRecords));
        }
コード例 #2
0
    public KinesisFirehoseResponse FunctionHandler(KinesisFirehoseEvent evnt, ILambdaContext context)
    {
        context.Logger.LogInformation($"InvocationId: {evnt.InvocationId}");
        context.Logger.LogInformation($"DeliveryStreamArn: {evnt.DeliveryStreamArn}");
        context.Logger.LogInformation($"Region: {evnt.Region}");

        var response = new KinesisFirehoseResponse
        {
            Records = new List <KinesisFirehoseResponse.FirehoseRecord>()
        };

        foreach (var record in evnt.Records)
        {
            context.Logger.LogInformation($"\tRecordId: {record.RecordId}");
            context.Logger.LogInformation($"\t\tApproximateArrivalEpoch: {record.ApproximateArrivalEpoch}");
            context.Logger.LogInformation($"\t\tApproximateArrivalTimestamp: {record.ApproximateArrivalTimestamp}");
            context.Logger.LogInformation($"\t\tData: {record.DecodeData()}");

            // Transform data: For example ToUpper the data
            var transformedRecord = new KinesisFirehoseResponse.FirehoseRecord
            {
                RecordId = record.RecordId,
                Result   = KinesisFirehoseResponse.TRANSFORMED_STATE_OK
            };
            transformedRecord.EncodeData(record.DecodeData().ToUpperInvariant());

            response.Records.Add(transformedRecord);
        }

        return(response);
    }
コード例 #3
0
        public KinesisFirehoseResponse ProcessStreamAsync(KinesisFirehoseEvent kinesisFireHoseEvent, ILambdaContext context)
        {
            context.Logger.LogLine($"{context.AwsRequestId} {nameof(ProcessStreamAsync)}");
            var records  = kinesisFireHoseEvent.Records.Select(p => ProcessActivityRecord(p, context.Logger));
            var response = new KinesisFirehoseResponse
            {
                Records = records.ToList()
            };

            return(response);
        }
コード例 #4
0
        public async Task KinesisFirehoseResponseLambdaFunctionAsyncTest()
        {
            // ARRANGE
            TestLambdaLogger  TestLogger    = new TestLambdaLogger();
            TestClientContext ClientContext = new TestClientContext();

            TestLambdaContext Context = new TestLambdaContext()
            {
                FunctionName    = "KinesisFirehoseTest",
                FunctionVersion = "1",
                Logger          = TestLogger,
                ClientContext   = ClientContext
            };

            KinesisFirehoseEvent Event = new KinesisFirehoseEvent(
                new List <KinesisFirehoseRecord>()
            {
                new KinesisFirehoseRecord(
                    "1",
                    Convert.ToBase64String(Encoding.UTF8.GetBytes("{\"name\":\"Mike\",\"age\":34}")),
                    1234567890)
            },
                "us-east-1",
                "arn:aws:firehose:us-east-1:123456789012:deliverystream/delivery-stream-name",
                "123"
                );

            KinesisFirehoseEventLambdaFunction Function = new KinesisFirehoseEventLambdaFunction();

            string Json = "";

            // ACT
            KinesisFirehoseTransformResponse Response = await Function.ExecAsync(Event, Context);

            using (MemoryStream MStream = new MemoryStream())
            {
                using (StreamReader Reader = new StreamReader(MStream))
                {
                    Amazon.Lambda.Serialization.Json.JsonSerializer Serde = new Amazon.Lambda.Serialization.Json.JsonSerializer();
                    Serde.Serialize(Response, MStream);
                    MStream.Position = 0;
                    Json             = Reader.ReadToEnd();
                }
            }

            // ASSERT
            Assert.True(!String.IsNullOrEmpty(Json));
        }
コード例 #5
0
        public void KinesisFirehoseEventTest()
        {
            // ARRANGE
            KinesisFirehoseEvent Event = new KinesisFirehoseEvent(
                new List <KinesisFirehoseRecord>()
            {
                new KinesisFirehoseRecord(
                    "1",
                    Convert.ToBase64String(Encoding.UTF8.GetBytes("{\"name\":\"Mike\",\"age\":34}")),
                    1234567890)
            },
                "us-east-1",
                "arn:aws:firehose:us-east-1:123456789012:deliverystream/delivery-stream-name",
                "123"
                );

            // ACT
            string Json = JsonConvert.SerializeObject(Event);

            // ASSERT
            Assert.True(JsonConvert.DeserializeObject <KinesisFirehoseEvent>(Json) != null);
        }
コード例 #6
0
 public string FunctionHandler(KinesisFirehoseEvent inputData)
 {
     return(inputData.Records.First().DecodeData());
 }
コード例 #7
0
        public void Setup()
        {
            // APIGatewayProxy
            _baseAPIGatewayProxyRequest = new APIGatewayProxyRequest
            {
                HttpMethod = "POST",
                Path       = "/test/path",
            };

            _baseAPIGatewayProxyResponse = new APIGatewayProxyResponse
            {
                StatusCode = (int)HttpStatusCode.OK,
            };

            // ApplicationLoadBalancer
            var albRequestContext = new ApplicationLoadBalancerRequest.ALBRequestContext
            {
                Elb = new ApplicationLoadBalancerRequest.ElbInfo()
            };

            albRequestContext.Elb.TargetGroupArn = TestArn;
            _baseApplicationLoadBalancerRequest  = new ApplicationLoadBalancerRequest
            {
                HttpMethod     = "POST",
                Path           = "/test/path",
                RequestContext = albRequestContext,
            };

            _baseApplicationLoadBalancerResponse = new ApplicationLoadBalancerResponse
            {
                StatusCode = (int)HttpStatusCode.OK,
            };

            // SQSEvent
            var sqsRecord = new SQSEvent.SQSMessage
            {
                EventSourceArn = TestArn
            };

            _baseSQSEvent = new SQSEvent
            {
                Records = new List <SQSEvent.SQSMessage> {
                    sqsRecord
                },
            };

            // SNSEvent
            var snsMessaage = new SNSEvent.SNSMessage()
            {
                Message = "Test Message",
            };
            var snsRecord = new SNSEvent.SNSRecord
            {
                EventSubscriptionArn = TestArn,
                Sns = snsMessaage
            };

            _baseSNSEvent = new SNSEvent
            {
                Records = new List <SNSEvent.SNSRecord> {
                    snsRecord
                },
            };

            // KinesisEvent
            var kinesisRecord = new KinesisEvent.KinesisEventRecord
            {
                EventSourceARN = TestArn
            };

            _baseKinesisEvent = new KinesisEvent
            {
                Records = new List <KinesisEvent.KinesisEventRecord> {
                    kinesisRecord
                },
            };

            // S3Event
            var s3Record = new Amazon.S3.Util.S3EventNotification.S3EventNotificationRecord
            {
                S3 = new Amazon.S3.Util.S3EventNotification.S3Entity
                {
                    Bucket = new Amazon.S3.Util.S3EventNotification.S3BucketEntity
                    {
                        Arn = TestArn
                    }
                }
            };

            _baseS3Event = new S3Event
            {
                Records = new List <Amazon.S3.Util.S3EventNotification.S3EventNotificationRecord> {
                    s3Record
                },
            };

            // DynamoDBEvent
            var dynamoDBRecord = new DynamoDBEvent.DynamodbStreamRecord
            {
                EventSourceArn = TestArn
            };

            _baseDynamoDBEvent = new DynamoDBEvent
            {
                Records = new List <DynamoDBEvent.DynamodbStreamRecord> {
                    dynamoDBRecord
                },
            };

            // KinesisFirehoseEvent
            _baseKinesisFirehoseEvent = new KinesisFirehoseEvent
            {
                DeliveryStreamArn = TestArn,
            };
        }