【问题标题】:Can not copy data from s3 to redshift cluster in a private subnet无法将数据从 s3 复制到私有子网中的 redshift 集群
【发布时间】:2020-04-20 11:46:28
【问题描述】:

我在私有子网中设置了一个 redshift 集群。我可以成功连接到我的 redshift 集群并通过 DBeaver 进行基本的 SQL 查询。

我还需要将一些文件从 s3 上传到 redshift,所以我在我的私有子网中设置了一个 s3 网关并更新了我的私有子网的路由表以添加所需的路由,如下所示:

Destination       Target                 Status            Propagated
192.168.0.0/16    local                  active            No   
pl-7ba54012 (com.amazonaws.us-east-2.s3, 52.219.80.0/20, 3.5.128.0/21, 52.219.96.0/20, 52.92.76.0/22)   vpce-04eed78f4db84ae49  
active             No   
0.0.0.0/0         nat-0a73ba7659e887232  active            No 

但是,我无法从我的 s3 存储桶运行复制查询

copy venue
from 's3://*****/tickit/venue_pipe.txt'
iam_role 'arn:aws:iam::******:role/global-dev-rdt-role-S3ReadonlyAccess'
region 'us-east-2';

我的存储桶以及公共和私有子网安全组没有限制性策略,我已经可以在私有子网中的 redshift 集群上运行 SQL 查询。

更新: redshift 集群的安全组允许所有连接到端口 5439

Type         Protocol      Port Range     Source      Description
Redshift     TCP           5439           0.0.0.0/0
Redshift     TCP           5439           ::/0
SSH          TCP           22             sg-0f933e18d6c1967b8

【问题讨论】:

  • “我无法运行复制查询”是什么意思?您能分享错误消息或为我们描述问题吗?
  • 除非您激活了Enhanced VPC Routing,否则我认为您不需要使用 VPC Endpoint 将 Redshift 连接到 S3,因为流量不会通过 VPC。
  • 这需要很长时间,并且查询返回失败状态..我还启用了 VPC 路由,因为这应该可以避免流量通过互联网。
  • “s3 网关”是什么意思?您指的是 Amazon S3 的 VPC 终端节点吗?
  • 是的,我指的是 VPC 中私有子网中 s3 的端点。

标签: amazon-web-services amazon-s3 amazon-redshift amazon-vpc


【解决方案1】:

为了重现您的情况,我做了以下操作:

  • 创建了一个新的具有公共子网和私有子网的 VPC(无 NAT 网关)
  • 在私有子网中启动了一个单节点 Amazon Redshift 集群
    • 增强型 VPC 路由 = 否
    • 可公开访问 = 否
  • 在公有子网中启动 Amazon EC2 Linux 实例
  • 在 EC2 实例上运行 sudo yum install postgresql
  • 已通过 EC2 实例 (psql -h xx.yy.ap-southeast-2.redshift.amazonaws.com -p 5439 -U username) 上的 psql 建立与 Redshift 集群的连接
  • 创建了一个表 (create table foo(id integer);)
  • 已加载表格 (copy foo from 's3://my-bucket/bar.txt' iam_role 'xxx';)

工作成功,并带有以下信息:

INFO:  Load into table 'foo' completed, 4 record(s) loaded successfully.

因此,VPC 端点/NAT 网关不需要执行来自 Redshift 的 COPY 命令。 Redshift 集群有自己特殊的方式连接到 S3,似乎是通过 Redshift 的“后端”。

如果从同一区域的 Amazon S3 加载数据,则流量将完全保留在 AWS 网络中。如果数据来自不同的区域,它仍然会被加密,因为与 Amazon S3 的通信将通过 HTTPS。

第二次测试:使用增强型 VPC 网络

为了反映您的情况,我启动了一个不同的 Redshift 集群,启用了增强型 VPC 路由

当我运行 COPY 命令时,它意外挂起,因为我没有为 Redshift 集群配置通过 VPC 访问 Amazon S3 的方法。

然后,我为 Amazon S3 创建了一个VPC 终端节点,并使用“完全访问”策略将其连接到私有子网。

然后,当我重新运行COPY 命令时,它成功地从 Amazon S3 加载数据。

底线:它对我有用。您可能想将您的配置与我采取的上述步骤进行比较。

【讨论】:

  • 对于第二种情况,您是否在具有 NAT 网关的私有子网中设置了 redshift 集群?禁用增强路由时可以运行复制命令,但启用时不能运行。
  • 两个场景都使用相同的 VPC:带有 Internet 网关和 EC2 实例的公共子网,带有 Redshift 集群的私有子网。这两种情况都没有使用 NAT 网关。第二个场景也有一个用于 S3 的 VPC 端点连接到私有子网。
  • 嗨,抱歉我的错误,我必须在公共子网中放置一个 NAT 网关并附加一个 Internet 网关以提供对我的 VPC 的安全 Internet 访问,在这种情况下我想知道如果增强路由可以设置为 true 以通过私有子网中的 s3 端点进行连接?
  • 是的,可以同时使用 NAT 网关和 VPC 端点。私有子网的路由表将包含它们的条目。由于 VPC Endpoint 的路由规则更具体,S3 的流量将通过 VPC Endpoint,而其他流量将通过 NAT 网关。因此,您在问题中显示的配置应该可以正常工作。您是否使用“完全访问”策略配置了 VPC 终端节点?
猜你喜欢
  • 2020-04-17
  • 2018-02-07
  • 1970-01-01
  • 2018-09-12
  • 1970-01-01
  • 2019-04-23
  • 2018-01-26
  • 2013-05-31
  • 1970-01-01
相关资源
最近更新 更多