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

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

问题

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

我已允许 Firehose 区域 CIDR [1] 通过 Redshift 安全组访问集群。我已将访问 Redshift 集群的凭证提供给 Firehose,并已测试了这些凭证。集群可供公众访问。

STL_LOAD_ERRORS表为空,我期望在该表中看到任何尝试并失败的复制语句所产生的错误。CloudWatchDeliveryToRedshift中也没有事件。这让我相信甚至没有尝试进入 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

为什么是 ServerFault?询问有关 Amazon AWS 的最佳 StackExchange 网站

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

答案1

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

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

桶区域选择

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

在此处输入图片描述

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

表名规范

  1. 复制选项中仅限单引号。

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

  3. Redshift COPY 不接受时区非 UTC 的时间戳。如果您使用 RFC3339 等格式,则需要先将时间设置为 UTC 格式,然后TIMEFORMAT 'auto'在复制选项中指定。

  4. 为了了解当事情不正常时发生了什么,你需要启用用户活动记录在 Redshift 中:

    • 启用日志记录(显然)

在此处输入图片描述

  • 创建新的参数组

在此处输入图片描述

  • 环境用户活动记录true

在此处输入图片描述

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

在此处输入图片描述

在此处输入图片描述

  • roboot 你的集群

在此处输入图片描述

Enable user activity logging成就解锁

相关内容