创建 Amazon RDS 与 Amazon Redshift 的零 ETL 集成
这是 Amazon RDS 与 Amazon Redshift 的零 ETL 集成的预发布文档,该集成已提供预览版。文档和特征都可能会更改。我们建议您仅在测试环境中使用此特征,不要在生产环境中使用。有关预览条款和条件,请参阅 Amazon 服务条款 |
在创建 Amazon RDS 零 ETL 集成时,需要指定源RDS 数据库和目标 Amazon Redshift 数据仓库。您还可以自定义加密设置和添加标签。Amazon RDS 在源数据库与其目标之间创建集成。集成激活后,您插入到源数据库中的任何数据都将复制到配置的 Amazon Redshift 目标中。
先决条件
在创建零 ETL 集成之前,必须创建源数据库和目标 Amazon Redshift 数据仓库。您还必须通过将数据库添加为授权集成源来允许复制到数据仓库。
有关完成其中每个步骤的说明,请参阅开始使用 Amazon RDS 与 Amazon Redshift 的零 ETL 集成。
所需的权限
创建零 ETL 集成需要具有某些 IAM 权限。至少您需要具有执行以下操作的权限:
为源 RDS 数据库创建零 ETL 集成。
查看和删除所有零 ETL 集成。
在目标数据仓库中创建入站集成。如果同一个账户拥有 Amazon Redshift 数据仓库并且该账户是该数据仓库的授权主体,则不需要此权限。有关添加授权主体的信息,请参阅为您的 Amazon Redshift 数据仓库配置授权。
以下示例策略演示了创建和管理集成所需的最低权限。如果您的用户或角色具有更广泛的权限(例如 AdministratorAccess
托管式策略),则可能不需要这些确切的权限。
注意
Redshift Amazon 资源名称(ARN)采用以下格式。请注意,在无服务器命名空间 UUID 之前使用了正斜杠((/
)而不是冒号(:
)。
-
预调配集群 –
arn:aws:redshift:{region}:{account-id}:namespace:
namespace-uuid
-
无服务器 –
arn:aws:redshift-serverless:{region}:{account-id}:namespace/
namespace-uuid
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "rds:CreateIntegration" ], "Resource": [ "arn:aws:rds:
{region}
:{account-id}
:db:source-db
", "arn:aws:rds:{region}
:{account-id}
:integration:*" ] }, { "Effect": "Allow", "Action": [ "rds:DescribeIntegrations" ], "Resource": ["*"] }, { "Effect": "Allow", "Action": [ "rds:DeleteIntegration" ], "Resource": [ "arn:aws:rds:{region}
::integration:*" ] }, { "Effect": "Allow", "Action": [ "redshift:CreateInboundIntegration" ], "Resource": [ "arn:aws:redshift:
{account-id}
{region}
::namespace:
{account-id}
namespace-uuid
" ] }] }
在不同的账户中选择目标数据仓库
如果您计划指定位于另一个 Amazon Web Services 账户中的目标 Amazon Redshift 数据仓库,则必须创建一个角色,以允许当前账户中的用户访问目标账户中的资源。有关更多信息,请参阅在您拥有的其他 Amazon Web Services 账户中向 IAM 用户提供访问权限。
该角色必须具有以下权限,这些权限允许用户查看目标账户中可用的 Amazon Redshift 预调配集群和 Redshift Serverless 命名空间。
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "redshift:DescribeClusters", "redshift-serverless:ListNamespaces" ], "Resource":[ "*" ] } ] }
该角色必须具有以下信任策略,该策略指定目标账户 ID。
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "AWS": "arn:aws:iam::
:root" }, "Action":"sts:AssumeRole" } ] }
{external-account-id}
有关创建角色的说明,请参阅使用自定义信任策略创建角色。
创建零 ETL 集成
您可以使用 Amazon Web Services Management Console、Amazon CLI 或 RDS API 创建零 ETL 集成。
默认情况下,RDS for MySQL 会立即清除二进制日志文件。由于零 ETL 集成依赖二进制日志将数据从源复制到目标,因此源数据库的保留期必须至少为一小时。创建集成后,Amazon RDS 会立即检查所选源数据库的二进制日志文件保留期。如果当前值为 0 小时,则 Amazon RDS 会自动将其更改为 1 小时。否则,该值将保持不变。
创建零 ETL 集成
登录 Amazon Web Services Management Console 并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/
。 -
在左侧导航窗格中,选择零 ETL 集成。
-
选择创建零 ETL 集成。
-
在集成标识符中,输入集成的名称。该名称可包含最多 63 个字母数字字符,并且可以包含连字符。
-
选择下一步。
对于源,选择数据将源自其中的 RDS 数据库。数据库必须运行 RDS for MySQL 版本 8.0.32 或更高版本。
注意
如果数据库参数配置不正确,RDS 会通知您。如果您收到此消息,可以选择为我修复,也可以手动配置它们。有关手动修复它们的说明,请参阅步骤 1:创建自定义数据库参数组。
修改数据库参数需要重启。在创建集成之前,必须完成重启,并且必须成功地将新的参数值应用于数据库。
-
成功配置源数据库后,选择下一步。
对于目标,执行以下操作:
(可选)要为 Amazon Redshift 目标使用不同的 Amazon Web Services 账户,请选择指定其他账户。然后,输入有权显示您数据仓库的 IAM 角色的 ARN。有关创建 IAM 角色的说明,请参阅在不同的账户中选择目标数据仓库。
对于 Amazon Redshift 数据仓库,选择从源数据库中复制的数据的目标。您可以选择预调配的 Amazon Redshift 集群或 Redshift Serverless 命名空间作为目标。
注意
如果指定数据仓库的资源策略或区分大小写设置配置不正确,RDS 会通知您。如果您收到此消息,可以选择为我修复,也可以手动配置它们。有关手动修复这些问题的说明,请参阅《Amazon Redshift 管理指南》中的为您的数据仓库开启区分大小写和为您的数据仓库配置授权。
修改预调配 Redshift 集群的区分大小写需要重启。在创建集成之前,必须完成重启,并且必须成功地将新的参数值应用于集群。
如果您选择的源和目标位于不同的 Amazon Web Services 账户,则 Amazon RDS 无法为您修复这些设置。您必须导航到另一个账户,然后在 Amazon Redshift 中手动修复这些问题。
-
正确配置目标数据仓库后,选择下一步。
-
(可选)对于标签,向集成添加一个或多个标签。有关更多信息,请参阅 为 Amazon RDS 资源添加标签。
-
对于加密,请指定您希望如何加密集成。默认情况下,RDS 会加密所有与 Amazon 拥有的密钥 的集成。要改为选择客户自主管理型密钥,请启用自定义加密设置并选择用于加密的 KMS 密钥。有关更多信息,请参阅 加密 Amazon RDS 资源。
注意
如果您指定自定义 KMS 密钥,则密钥策略必须允许对 Amazon Redshift 服务主体(
redshift.amazonaws.com
)执行kms:CreateGrant
操作。有关更多信息,请参阅《Amazon Key Management Service 开发人员指南》中的创建密钥策略。(可选)添加加密上下文。有关更多信息,请参阅 Amazon Key Management Service 开发人员指南中的加密内容。
-
选择下一步。
查看您的集成设置并选择创建零 ETL 集成。
如果创建失败,请参阅我无法创建零 ETL 集成以了解故障排除步骤。
集成在创建时状态为 Creating
,而目标 Amazon Redshift 数据仓库的状态为 Modifying
。在此期间,您无法查询数据仓库或对其进行任何配置更改。
成功创建集成后,集成和目标 Amazon Redshift 数据仓库的状态都更改为 Active
。
要使用 Amazon CLI 创建零 ETL 集成,请使用带有以下选项的 create-integration 命令:
-
--integration-name
– 指定集成的名称。 -
--source-arn
– 指定将作为集成源的 RDS 数据库的 ARN。 -
--target-arn
– 指定将作为集成目标的 Amazon Redshift 数据仓库的 ARN。
对于 Linux、macOS 或 Unix:
aws rds create-integration \ --integration-name
my-integration
\ --source-arn arn:aws:rds:{region}
:{account-id}
:my-db
\ --target-arn arn:aws:redshift:{region}
:{account-id}
:namespace:namespace-uuid
对于 Windows:
aws rds create-integration ^ --integration-name
my-integration
^ --source-arn arn:aws:rds:{region}
:{account-id}
:my-db
^ --target-arn arn:aws:redshift:{region}
:{account-id}
:namespace:namespace-uuid
要使用 Amazon RDS API 创建零 ETL 集成,请结合以下参数使用 CreateIntegration
操作:
-
IntegrationName
– 指定集成的名称。 -
SourceArn
– 指定将作为集成源的 RDS 单可用区或多可用区数据库实例的 ARN。 -
TargetArn
– 指定将作为集成目标的 Amazon Redshift 数据仓库的 ARN。
后续步骤
成功创建零 ETL 集成后,您必须在目标 Amazon Redshift 集群或工作组中创建目标数据库。然后,您可以开始向源 RDS 数据库中添加数据,并在 Amazon Redshift 中对其进行查询。有关说明,请参阅在 Amazon Redshift 中创建目标数据库。