在 aws redshift 中自动化跨区域复制表

Posted

技术标签:

【中文标题】在 aws redshift 中自动化跨区域复制表【英文标题】:Automate Cross region copying tables in aws redshift 【发布时间】:2016-11-21 07:48:05 【问题描述】:

我在 region-1 的集群中有表,我想将其中一些表复制到其他某个区域 (region-2) 的另一个集群中。 到目前为止,我已经使用了 matillion,为此我遵循了以下步骤-

    将数据从 cluster-a 复制到 s3。 将此数据从 s3 加载到 cluster-b。

由于 matillion 对我来说工作成本有点高,我想为此提供替代解决方案。

虽然我听说过 CLI、Lambda 和 API,但我不知道应该如何使用它们,因为我每周都会经历这个过程,并且我想自动化这个过程。

【问题讨论】:

【参考方案1】:

AWS Command-Line Interface (CLI) 与此用例无关,因为它用于控制 AWS 服务(例如启动 Amazon Redshift 数据库、更改安全设置)。将数据导入/导出到 Amazon Redshift 的命令必须通过 SQL 直接发送给 Redshift。

将一些表复制到另一个区域的 Amazon Redshift 实例:

集群 A 中使用 UNLOAD command 将数据从 Redshift 导出到 Amazon S3 存储桶 在Cluster B中使用COPY command将数据从S3加载到Redshift,使用REGION参数指定源区域

因此,您需要与每个集群建立单独的 SQL 连接。任何可以通过 JDBC 连接到 Redshift 的程序就足够了。例如,您可以使用标准的psql 工具(最好是 8.0.2 版),因为 Redshift 基于 PostgreSQL 8.0.2。

见:Connect to Your Cluster by Using the psql Tool

所以,你的脚本应该是这样的:

psql -h clusterA -U username -d mydatabase -c 'UNLOAD...'
psql -h clusterB -U username -d mydatabase -c 'COPY...'

您可以从 AWS Lambda 运行此操作,但 Lambda 函数最多只能运行五分钟,您的脚本可能会超过该限制。相反,您可以在某些机器上运行常规的 cron 作业。

【讨论】:

感谢您的回答,虽然您说 CLI 不相关,但如果我可以使用,请告诉我如何通过 CLI 执行此操作 您不能使用 AWS CLI 将数据导入/导出到 Redshift。它仅用于向 AWS CLI 发出的命令。作为比较,AWS CLI 可用于启动 EC2 实例,但如果您希望在实例使用某些软件,则必须直接与应用程序通信。 Redshift 也是如此。

以上是关于在 aws redshift 中自动化跨区域复制表的主要内容,如果未能解决你的问题,请参考以下文章

S3 跨区域复制

以递增方式跨区域复制RDS数据库快照

AWS RDS极光 - 通过boto3或aws cli创建跨区域读取副本

AWS 上的专用网络

Cloudformation中如何访问跨区域资源

干货 | 对象存储的跨地域复制概述