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)); }
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); }
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); }
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)); }
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); }
public string FunctionHandler(KinesisFirehoseEvent inputData) { return(inputData.Records.First().DecodeData()); }
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, }; }