创建 Amazon RDS 与 Amazon Redshift 的零 ETL 集成 - Amazon Relational Database Service

创建 Amazon RDS 与 Amazon Redshift 的零 ETL 集成

在创建 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", "rds:ModifyIntegration" ], "Resource": [ "arn:aws:rds:{region}:{account-id}:integration:*" ] }, { "Effect": "Allow", "Action": [ "redshift:CreateInboundIntegration" ], "Resource": [ "arn:aws:redshift:{region}:{account-id}:namespace:namespace-uuid" ] }] }

在不同的账户中选择目标数据仓库

如果您计划指定位于另一个 AWS 账户中的目标 Amazon Redshift 数据仓库,则必须创建一个角色,以允许当前账户中的用户访问目标账户中的资源。有关更多信息,请参阅在您拥有的其他 AWS 账户中向 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::{external-account-id}:root" }, "Action":"sts:AssumeRole" } ] }

有关创建角色的说明,请参阅使用自定义信任策略创建角色

创建零 ETL 集成

您可以使用 AWS Management Console、AWS CLI 或 RDS API 创建零 ETL 集成

默认情况下,RDS for MySQL 会立即清除二进制日志文件。由于零 ETL 集成依赖二进制日志将数据从源复制到目标,因此源数据库的保留期必须至少为一小时。创建集成后,Amazon RDS 会立即检查所选源数据库的二进制日志文件保留期。如果当前值为 0 小时,则 Amazon RDS 会自动将其更改为 1 小时。否则,该值将保持不变。

创建零 ETL 集成
  1. 登录 AWS Management Console 并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/

  2. 在左侧导航窗格中,选择零 ETL 集成

  3. 选择创建零 ETL 集成

  4. 集成标识符中,输入集成的名称。该名称可包含最多 63 个字母数字字符,并且可以包含连字符。

  5. 选择下一步

  6. 对于,选择数据将源自其中的 RDS 数据库

    注意

    如果数据库参数配置不正确,RDS 会通知您。如果您收到此消息,可以选择为我修复,也可以手动配置它们。有关手动修复它们的说明,请参阅步骤 1:创建自定义数据库参数组

    修改数据库参数需要重启。在创建集成之前,必须完成重启,并且必须成功地将新的参数值应用于数据库

  7. 成功配置源数据库后,选择下一步

  8. 对于目标,执行以下操作:

    1. (可选)要为 Amazon Redshift 目标使用不同的 AWS 账户,请选择指定其他账户。然后,输入有权显示您数据仓库的 IAM 角色的 ARN。有关创建 IAM 角色的说明,请参阅在不同的账户中选择目标数据仓库

    2. 对于 Amazon Redshift 数据仓库,选择从源数据库中复制的数据的目标。您可以选择预调配的 Amazon Redshift 集群或 Redshift Serverless 命名空间作为目标。

    注意

    如果指定数据仓库的资源策略或区分大小写设置配置不正确,RDS 会通知您。如果您收到此消息,可以选择为我修复,也可以手动配置它们。有关手动修复这些问题的说明,请参阅《Amazon Redshift 管理指南》中的为您的数据仓库开启区分大小写和为您的数据仓库配置授权

    修改预调配 Redshift 集群的区分大小写需要重启。在创建集成之前,必须完成重启,并且必须成功地将新的参数值应用于集群。

    如果您选择的源和目标位于不同的 AWS 账户,则 Amazon RDS 无法为您修复这些设置。您必须导航到另一个账户,然后在 Amazon Redshift 中手动修复这些问题。

  9. 正确配置目标数据仓库后,选择下一步

  10. (可选)对于标签,向集成添加一个或多个标签。有关更多信息,请参阅 为 Amazon RDS 资源添加标签

  11. 对于加密,请指定您希望如何加密集成。默认情况下,RDS 会加密所有与 AWS 拥有的密钥 的集成。要改为选择客户自主管理型密钥,请启用自定义加密设置并选择用于加密的 KMS 密钥。有关更多信息,请参阅 加密 Amazon RDS 资源

    (可选)添加加密上下文。有关更多信息,请参阅 AWS Key Management Service 开发人员指南中的加密内容

    注意

    除了您添加的任何加密上下文对外,Amazon RDS 还会添加以下加密上下文对:

    • aws:redshift:integration:arn - IntegrationArn

    • aws:servicename:id - Redshift

    这会将您可以添加的加密上下文对总数从 8 减少到 6,并增加授予约束条件的总字符限制。有关更多信息,请参阅《AWS Key Management Service 开发人员指南》中的 Using grant constraints

  12. 选择下一步

  13. 查看您的集成设置并选择创建零 ETL 集成

    如果创建失败,请参阅我无法创建零 ETL 集成以了解故障排除步骤。

集成在创建时状态为 Creating,而目标 Amazon Redshift 数据仓库的状态为 Modifying。在此期间,您无法查询数据仓库或对其进行任何配置更改。

成功创建集成后,集成和目标 Amazon Redshift 数据仓库的状态都更改为 Active

要使用 AWS 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。

使用客户自主管理型密钥加密集成

如果您指定自定义 KMS 密钥而不是创建集成时的 AWS 拥有的密钥,则密钥策略必须为 Amazon Redshift 服务主体提供对 CreateGrant 操作的访问权限。此外,该策略必须可让请求者账户或角色执行 DescribeKeyCreateGrant 操作。

以下示例密钥策略语句演示了策略文档中所需的权限。一些示例包括用于进一步缩小权限范围的上下文密钥。

以下策略语句可让请求者账户或角色检索有关 KMS 密钥的信息。

{ "Effect":"Allow", "Principal":{ "AWS":"arn:aws:iam::{account-ID}:role/{role-name}" }, "Action":"kms:DescribeKey", "Resource":"*" }

以下策略语句可让请求者账户或角色添加对 KMS 密钥的授权。kms:ViaService 条件键将 KMS 密钥的使用限制为来自 Amazon RDS 的请求。

{ "Effect":"Allow", "Principal":{ "AWS":"arn:aws:iam::{account-ID}:role/{role-name}" }, "Action":"kms:CreateGrant", "Resource":"*", "Condition":{ "StringEquals":{ "kms:EncryptionContext:{context-key}":"{context-value}", "kms:ViaService":"rds.{region}.amazonaws.com" }, "ForAllValues:StringEquals":{ "kms:GrantOperations":[ "Decrypt", "GenerateDataKey", "CreateGrant" ] } } }

以下策略语句可让 Amazon Redshift 服务主体添加对 KMS 密钥的授权。

{ "Effect":"Allow", "Principal":{ "Service":"redshift.amazonaws.com" }, "Action":"kms:CreateGrant", "Resource":"*", "Condition":{ "StringEquals":{ "kms:EncryptionContext:{context-key}":"{context-value}", "aws:SourceAccount":"{account-ID}" }, "ForAllValues:StringEquals":{ "kms:GrantOperations":[ "Decrypt", "GenerateDataKey", "CreateGrant" ] }, "ArnLike":{ "aws:SourceArn":"arn:aws:*:{region}:{account-ID}:integration:*" } } }

有关更多信息,请参阅《AWS Key Management Service 开发人员指南》中的创建密钥策略

后续步骤

成功创建零 ETL 集成后,您必须在目标 Amazon Redshift 集群或工作组中创建目标数据库。然后,您可以开始向源 RDS 数据库中添加数据,并在 Amazon Redshift 中对其进行查询。有关说明,请参阅在 Amazon Redshift 中创建目标数据库