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

jen*_*irf 8 postgresql amazon-web-services amazon-redshift amazon-data-pipeline

我正在使用AWS数据管道服务将数据从RDS MySql数据库传输到s3然后再Redshift传入,这很好用.

但是,我也有数据存在于一个RDS Postres实例中,我想以相同的方式管道,但我很难设置jdbc连接.如果不支持,是否有解决方法?

"connectionString": "jdbc:postgresql://THE_RDS_INSTANCE:5432/THE_DB”
Run Code Online (Sandbox Code Playgroud)

小智 14

现在,您可以定义一个复制活动,以将Postgres RDS实例中的数据提取到S3中.在Data Pipeline界面中:

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


小智 5

这还行不通.aws没有内置/发布功能,以便很好地连接到postgres.你可以在shellcommandactivity中做到这一点.您可以编写一些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"
}
Run Code Online (Sandbox Code Playgroud)

我没有运行这个来验证,因为旋转管道是一个痛苦:(所以仔细检查命令中的转义.

  • 专业人士:超级直接,不需要额外的脚本文件上传到s3
  • 缺点:不完全安全.您的数据库密码将通过网络传输而不加密.

查看刚刚在参数化模板数据管道上启动的新内容:http://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-custom-templates.html.看起来它将允许加密任意参数.