AWS使用DynamoDB Lambda配置Kinesis流

时间:2018-06-11 06:31:31

标签: amazon-web-services aws-lambda amazon-redshift amazon-kinesis-firehose

从以下问题开始,AWS DynamoDB Stream into Redshift

DynamoDB - > DynamoDBStreams - > Lambda函数 - > Kinesis Firehose - >红移。

如何配置我的Kinesis功能以获取Lambda函数源?

我创建了一个DynamoDB表(Purchase Sales),并添加了DynamoDB Streams。然后我配置了Lambda函数来拾取DynamoDB流。我的问题是如何配置Kinesis来获取Lambda函数Source?我知道如何配置Lambda Transformation,但是想要选择Source。不知道如何配置下面的直接投放来源。

谢谢,enter image description here

执行以下步骤: enter image description here

enter image description here

1 个答案:

答案 0 :(得分:1)

在您的情况下,您可以将dynamodb传输到redshift

DynamoDB --> DynamoDBStreams --> Lambda Function --> Kinesis Firehose --> Redshift.

首先,您需要一个lambda函数来处理DynamoDBStream。对于每个DynamoDBStream事件,请使用firehose PutRecord API将数据发送到firehose。来自example

var firehose = new AWS.Firehose();
firehose.putRecord({
  DeliveryStreamName: 'STRING_VALUE', /* required */
  Record: { /* required */
    Data: new Buffer('...') || 'STRING_VALUE' /* Strings will be Base-64 encoded on your behalf */ /* required */
  }
}, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else     console.log(data);           // successful response
});

接下来,我们必须知道如何将数据插入到RedShift中。来自firehose document

  

对于向Amazon Redshift的数据传送,Kinesis Firehose首先提供   以前面描述的格式将数据传入S3存储桶。   然后,Kinesis Firehose发出要加载的Amazon Redshift COPY命令   从S3存储桶到Amazon Redshift集群的数据。

因此,我们应该知道让COPY命令将数据映射到RedShift架构的数据格式。我们必须遵循data format requirement for redshift COPY command

  

默认情况下,COPY命令需要源数据   字符分隔的UTF-8文本。默认分隔符是管道   字符(|)。

因此,您可以对输入dynamodb流事件的lambda进行编程,将其转换为管道(|)分隔的行记录,并将其写入firehose。

var firehose = new AWS.Firehose();
firehose.putRecord({
  DeliveryStreamName: 'YOUR_FIREHOSE_NAME',
  Record: { /* required */
    Data: "RED_SHIFT_COLUMN_1_DATA|RED_SHIFT_COLUMN_2_DATA\n"
  }
}, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else     console.log(data);           // successful response
});

请记得添加\n,因为firehose不会为您添加新行。