创建 Aurora 与 Amazon Redshift 的零 ETL 集成 - Amazon Aurora

创建 Aurora 与 Amazon Redshift 的零 ETL 集成

在创建 Aurora 零 ETL 集成时,需要指定源 Aurora 数据库集群和目标 Amazon Redshift 数据仓库。您还可以自定义加密设置和添加标签。Aurora 在源数据库集群与其目标之间创建集成。集成激活后,您插入到源数据库集群中的任何数据都将复制到配置的 Amazon Redshift 目标中。

先决条件

在创建零 ETL 集成之前,必须创建源数据库集群和目标 Amazon Redshift 数据仓库。您还必须通过将数据库集群添加为授权集成源来允许复制到数据仓库。

有关完成其中每个步骤的说明,请参阅开始使用 Aurora 与 Amazon Redshift 的零 ETL 集成

所需的权限

创建零 ETL 集成需要具有某些 IAM 权限。至少您需要具有执行以下操作的权限:

  • 为源 Aurora 数据库集群创建零 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}:cluster: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 集成。

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

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

  3. 选择创建零 ETL 集成

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

  5. 选择下一步

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

    注意

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

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

  7. (可选)选择自定义数据筛选选项并向您的集成添加数据筛选条件。您可以使用数据筛选条件来定义复制到目标数据仓库的范围。有关更多信息,请参阅 Aurora 与 Amazon Redshift 零 ETL 集成的数据筛选

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

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

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

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

    注意

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

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

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

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

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

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

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

    注意

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

    • aws:redshift:integration:arn - IntegrationArn

    • aws:servicename:id - Redshift

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

  13. 选择下一步

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

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

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

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

要使用 AWS CLI 创建零 ETL 集成,请使用带有以下选项的 create-integration 命令:

  • --integration-name – 指定集成的名称。

  • --source-arn – 指定将作为集成源的 Aurora 数据库集群的 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 – 指定将作为集成源的 Aurora 数据库集群的 ARN。

  • TargetArn – 指定将作为集成目标的 Amazon Redshift 数据仓库的 ARN。

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

如果您指定自定义 KMS 密钥而不是创建集成时的 AWS 拥有的密钥,则密钥策略必须为 Amazon Redshift 服务主体提供对 CreateGrant 操作的访问权限。此外,它必须允许当前用户执行 DescribeKeyCreateGrant 操作。

以下示例策略演示了如何提供密钥策略中所需的权限。它包括用于进一步缩小权限范围的上下文键。

{ "Version": "2012-10-17", "Id": "Key policy", "Statement": [ { "Sid": "Enables IAM user permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::{account-ID}:root" }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allows the Redshift service principal to add a grant to a KMS key", "Effect": "Allow", "Principal": { "Service": "redshift.amazonaws.com" }, "Action": "kms:CreateGrant", "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:{context-key}":"{context-value}" }, "ForAllValues:StringEquals": { "kms:GrantOperations": [ "Decrypt", "GenerateDataKey", "CreateGrant" ] } } }, { "Sid": "Allows the current user or role to add a grant to a KMS key", "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.us-east-1.amazonaws.com" }, "ForAllValues:StringEquals": { "kms:GrantOperations": [ "Decrypt", "GenerateDataKey", "CreateGrant" ] } } }, { "Sid": "Allows the current uer or role to retrieve information about a KMS key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::{account-ID}:role/{role-name}" }, "Action": "kms:DescribeKey", "Resource": "*" } ] }

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

后续步骤

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