如何将数据从AWS Postgres RDS管道传输到S3(然后是Redshift)



我使用AWS数据管道服务将数据从RDS MySql数据库管道传输到s3,然后再传输到Redshift,效果很好。

然而,我也有数据生活在RDS Postres实例中,我想以同样的方式进行管道传输,但我很难设置jdbc连接。如果不支持此操作,是否有解决方案?

"connectionString": "jdbc:postgresql://THE_RDS_INSTANCE:5432/THE_DB”

如今,您可以定义一个复制活动,将Postgres RDS实例中的数据提取到S3中。在数据管道接口中:

  1. 创建SqlDataNode类型的数据节点。指定表名并选择查询
  2. 通过指定RDS实例ID(实例ID在您的URL中,例如your-instance-ID.xxxxx.eu-west-1.RDS.amazonaws.com)以及用户名、密码和数据库名称来设置数据库连接
  3. 创建类型为S3DataNode的数据节点
  4. 创建一个Copy活动,并将SqlDataNode设置为输入,将S3DataNode设置为输出

这还不起作用。aws尚未构建/发布与postgres良好连接的功能。不过,您可以在shell命令活动中执行此操作。您可以编写一些ruby或python代码来完成这项工作,并使用scriptUri将其放入s3上的脚本中。您还可以编写一个psql命令,将表转储到csv,然后在该活动节点中使用"STAGING:true"将其管道传输到OUTPUT1_STAGING_DIR。

像这样的东西:

{
  "id": "DumpCommand",
  "type": "ShellCommandActivity",
  "runsOn": { "ref": "MyEC2Resource" },
  "stage": "true",
  "output": { "ref": "S3ForRedshiftDataNode" },
  "command": "PGPASSWORD=password psql -h HOST -U USER -d DATABASE -p 5432 -t -A -F"," -c "select blah_id from blahs" > ${OUTPUT1_STAGING_DIR}/my_data.csv"
}

我没有运行这个来验证,因为启动管道很痛苦:(所以仔细检查命令中的转义。

  • 优点:超级简单,不需要额外的脚本文件上传到s3
  • 缺点:不完全安全。您的数据库密码将在不加密的情况下通过有线传输

看看刚刚在参数化模板数据管道上推出的aws:http://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-custom-templates.html.看起来它将允许对任意参数进行加密。

AWS现在允许合作伙伴进行近乎实时的RDS->Redshift插入。

https://aws.amazon.com/blogs/aws/fast-easy-free-sync-rds-to-redshift/

相关内容

最新更新