我的流式RedshiftCopyActivity遇到问题,无法将数据从S3加载到我的Redshift集群(Redshift / S3 / DP都在同一个AWS帐户中)。我可以在我们的Beta帐户中使用它,但无法在Prod中执行此操作。
在DP中创建Ec2Resource时,我使用了DataPipelineDefaultResourceRole和DataPipelineDefaultRole角色。 这是我的Redshift群集属性。
我收到的错误是:
2018年12月19日04:28:14,773 [错误] (TaskRunnerService-资源:df-0791222351VTJTTKG0GPL3_ @ ResourceId_LVKHP_2018-12-19T00:48:11-0) amazonaws.datapipeline.database.ConnectionFactory:无法建立 连接到 jdbc:postgresql://vse-rs-dw.1221345.us-east-1.redshift.amazonaws.com:8192 / vse 拒绝连接。检查主机名和端口是否正确,以及 邮件管理员正在接受TCP / IP连接。
我在堆栈溢出中发现了一些讨论相同问题的主题,并且发现需要在用于Redshift的同一VPC中启动ec2实例。我关注了这个维基(https://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-resources-vpc.html)
我创建了新的VPC安全组并将其添加到Redshift集群(aws-datapipeline-ec2-s3-redshift)。 然后,我在与Redshift相同的VPC中为Ec2实例创建了另一个VPC安全组(称为 aws-dp-ec2-group )。对于该组,我没有指定任何入站规则,默认情况下,存在出站规则
在Redshift安全组( aws-datapipeline-ec2-s3-redshift )中,我添加了入站规则以接受来自ec2安全组的所有端口的所有流量。
然后,在启动数据管道时,我指定了securityGroupIds:“ aws-dp-ec2-group ”(我的ec2安全组)和 subnetId :subnet-12345(这是我在VPC中找到的用于Redshift和EC2安全组的四个子网ID之一)
请帮助我了解我的错。