[英]Can not copy data from s3 to redshift cluster in a private subnet
我已经在私有子网中设置了一个 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
为了重现您的情况,我执行了以下操作:
sudo yum install postgresql
psql
建立到 Redshift 集群的连接 ( psql -h xx.yy.ap-southeast-2.redshift.amazonaws.com -p 5439 -U username
)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.
因此,从 Redshift 执行COPY
命令不需要 VPC 端点/NAT 网关。 Redshift 集群有自己的特殊方式来连接到 S3,似乎是通过 Redshift 的“后端”。
如果数据是从同一区域的 Amazon S3 加载的,则流量将完全保留在 AWS 网络内。 如果数据来自不同的区域,它仍然会被加密,因为与 Amazon S3 的通信将通过 HTTPS。
第二个测试:使用增强型 VPC 网络
为了反映您的情况,我启动了一个不同的 Redshift 集群,启用了增强型 VPC 路由。
当我运行COPY
命令时,它可以预见地挂起,因为我没有配置 Redshift 集群通过 VPC 访问 Amazon S3 的方法。
然后,我为 Amazon S3创建了一个VPC 终端节点,并使用“完全访问”策略将其连接到私有子网。
然后,当我重新运行COPY
命令时,它成功地从 Amazon S3 加载了数据。
底线:它对我有用。 您可能想将您的配置与我采取的上述步骤进行比较。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.