如何配置 AWS Kinesis Firehose 以便能够复制到 Redshift?

km6*_*zla 7 amazon-web-services

问题

我已经设置了一个 Firehose 并选择了似乎会导致流数据最终出现在 Redshift 中的选项。我在 Redshift 中有一个 Firehose 和一个目标表。数据在中间 S3 存储桶中正确显示,但没有进入 Redshift。

我已允许 Firehose 区域 CIDR [1] 通过 Redshift 安全组访问集群。我已经向 Firehose 提供了 Redshift 集群的凭据并测试了这些凭据。该集群可公开访问。

STL_LOAD_ERRORS表是空的,我希望在该表中看到尝试和失败的任何复制语句产生的错误。DeliveryToRedshiftCloudWatch中也没有事件。这让我相信甚至没有人尝试进入 Redshift。

我正在使用Redshift COPY 选项为副本指定一个 jsonpath 文件。我目前有:json "s3://app-event-data/_jsonpaths/_bigtable.jsonpath.json"。该文件存在于该位置的 s3 中,看起来像 jsonpath 文件 [3]。我还尝试向该框中添加凭据,但我认为这不是必需的。

更新 1

我启用了 Redshift 登录,这表明 Firehose 已成功进行身份验证。然后我创建了一个新的参数组,启用了用户活动日志记录并重新启动了集群。现在等待下一个日志批次。

参考

  1. http://docs.aws.amazon.com/firehose/latest/dev/firehose-dg.pdf
  2. https://aws.amazon.com/kinesis/firehose/
  3. http://docs.aws.amazon.com/redshift/latest/dg/copy-usage_notes-copy-from-json.html

为什么是服务器故障?询问 Amazon AWS 的最佳 StackExchange 站点

我会标记这个问题:amazon-kinesis amazon-firehose amazon-redshift

km6*_*zla 7

以下是我最初错误配置并最终调整以使 Firehose 正确将数据复制到 Redshift 的所有内容:

  1. 确保您选择的存储桶与您的 redshift 集群位于同一区域。如果出于某种原因要产生额外费用,您可以指定REGION存储桶创建后无法更改其区域

桶区域选择

起初这有点令人困惑,因为存储桶控制台中的区域选择器显示“全局”。

在此处输入图片说明

  1. Firehose 不会为您引用标识符,因此如果您在表单中提供的表名需要引号,您需要自己添加它们。列名也是如此。

表名规范

  1. 仅在复制选项中使用单引号。

  2. 通过从 Redshift 安全选项卡授权正确的 CIDR/IP,授予 Firehose 访问您的 Redshift 集群的权限。您可以在此处找到您创建 Firehose 的区域的正确 CIDR/IP 。您不需要创建新的集群安全组来执行此操作。你可以把它添加到默认的。如果添加新安全组,则需要从仪表板重新配置集群以使用新安全组,它不能有 2。

  3. Redshift COPY 不接受时区在 UTC 之外的时间戳。如果您使用诸如 RFC3339 之类的格式,您需要首先将时间放在 UTC 中并TIMEFORMAT 'auto'在复制选项中指定。

  4. 为了了解当事情不工作时发生了什么,您需要通过以下方式在 Redshift 中启用用户活动日志

    • 启用日志记录(显然)

在此处输入图片说明

  • 创建新的参数组

在此处输入图片说明

  • user_activity_logging设置为true

在此处输入图片说明

  • 修改集群以使用新的参数组

在此处输入图片说明

在此处输入图片说明

  • 启动你的集群

在此处输入图片说明

Enable user activity logging 成就解锁