【问题标题】:kinessis is not able to send data to redshift: Redshift.ConnectionFailedkinesis 无法将数据发送到 redshift:Redshift.Connection Failed
【发布时间】:2020-07-28 06:37:17
【问题描述】:

我是aws的新手。有一周我尝试将数据从 Nifi 流式传输到 Redshift 作为测试,以了解它是如何工作的。我所做的是使用 Nifi 生成一个简单的记录“aa,12,2020”,将其发送到 kinesis firehose,然后将 kinesis 发送到 s3 存储桶,然后从那里发送到 redshiftcluster 中的表。 我一直有这个错误

Redshift.ConnectionFailed

我在没有 nifi 的情况下使用 kinesis 的测试数据进行了尝试,但结果是一样的。 到目前为止,我为解决该问题所做的事情是此链接中所写的内容: AWS Kinesis Firehose not inserting data in Redshift 与 aws 帮助相比,它更详细一些。 在这个列表中,一切似乎都很好,直到

此时,您应该能够在 Redshift 日志中看到连接尝试: `select * from stl_connection_log where remotehost like '52%' order by recordtime desc;

我的 redshift 数据库中有任何记录。

我红了多少,都说是关于安全和卷的。我想我错过了一些东西,我找不到它。 我有 3 次删除所有进程并重新创建,但没有帮助。 这是我使用 kinesistestdata 进行测试的设置: Kinesisfirehose:

S3 存储桶: 桶中数据文件内容:

{"ticker_symbol":"AAPL","sector":"TECHNOLOGY","change":0.26,"price":90.78}{"ticker_symbol":"WMT","sector":"RETAIL","change":1.84,"price":95.82}{"ticker_symbol":"CVB","sector":"TECHNOLOGY","change":-0.07,"price":57.51}{"ticker_symbol":"DFT","sector":"RETAIL","change":-0.06,"price":131.62}

存储桶中的对象 URL-xml 文件:

<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>11111</RequestId>
<HostId>
1111111111111    </HostId>
</Error>

Redshift 集群:

  • 附加的 IAM 角色 AWSServiceRoleForRedshift firehose_delivery_role(在 kinesis 中的角色相同)
  • 网络和安全: 虚拟私有云 (VPC) 信息
  • CIDR 和入站规则: 172.31.0.0/16 13.58.135.96/27
  • 可用区:us-east-2a
  • VPC 安全组:默认
  • 可公开访问:是

我还阅读了 Jason pollicies 文件,例如: https://docs.aws.amazon.com/firehose/latest/dev/controlling-access.html#using-iam-s3 但目前尚不清楚我该怎么做。另一方面,策略是通过 GUI 添加的,所以它应该可以工作。

你能帮我一下,我应该怎么走? 非常感谢!

--------几天后------------

在发现复制命令错误后,我试图在此页面的帮助下找到问题: s3 access denied 403 我找不到具体问题,但 kinesis:redshift 日志中没有错误,Redshift 数据库中没有错误,这 3 个查询:

select * from STL_LOAD_ERRORS;
select * from  STL_FILE_SCAN;
select * from STL_S3CLIENT_ERROR order by recordtime desc;

但仍然没有数据处理 redshift。(在 kinesis 监控选项卡中,“DeliveryToRedshift Success”仍然为零) 如果有人有想法,我将不胜感激。

【问题讨论】:

  • 我尝试使用如下复制命令测试我的 redshift: COPY firehose_test_table FROM 's3://...file' CREDENTIALS 'aws_iam_role=arn:aws:iam::....' MANIFEST JSON'自动';但它也很奇怪。复制命令响应成功,但选择命令显示已插入数据库。

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


【解决方案1】:

第一步: 好的,我前进了一步。使用 redshift 中的这个查询,问题就显现出来了

select * from STL_S3CLIENT_ERROR order by recordtime desc;

问题是一样的:访问被拒绝!但要搜索的资源更多。 对于和我有同样问题的人,这两个查询也有帮助:

select * from STL_LOAD_ERRORS;
select * from  STL_FILE_SCAN;

这里是更多信息的链接。 System tables for troubleshooting data loads


第二步: 我的复制语法有一些问题。在副本中编写 arn 有不同的方法,这取决于您喜欢使用哪种类型的安全性。我应该这样写:

copy category from 's3://mybucket/testdata/category_pipe.txt'  
iam_role 'arn:aws:iam::11111111111'
                    delimiter '|' region 'us-east-2';

here is more information about ARN

现在我的复制示例工作了,我可以成功地在 redshift 和 s3 之间建立连接

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-25
    • 1970-01-01
    • 2021-09-27
    • 1970-01-01
    • 2021-04-27
    • 1970-01-01
    • 2022-11-02
    • 2016-10-31
    相关资源
    最近更新 更多