创建 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}
::integration:*" ] }, { "Effect": "Allow", "Action": [ "redshift:CreateInboundIntegration" ], "Resource": [ "arn:aws:redshift:
{account-id}
{region}
::namespace:
{account-id}
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::
:root" }, "Action":"sts:AssumeRole" } ] }
{external-account-id}
有关创建角色的说明,请参阅使用自定义信任策略创建角色。
创建零 ETL 集成
您可以使用 AWS Management Console、AWS CLI 或 RDS API 创建零 ETL 集成。
默认情况下,RDS for MySQL 会立即清除二进制日志文件。由于零 ETL 集成依赖二进制日志将数据从源复制到目标,因此源数据库的保留期必须至少为一小时。创建集成后,Amazon RDS 会立即检查所选源数据库的二进制日志文件保留期。如果当前值为 0 小时,则 Amazon RDS 会自动将其更改为 1 小时。否则,该值将保持不变。
创建零 ETL 集成
登录 AWS Management Console 并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/
。 -
在左侧导航窗格中,选择零 ETL 集成。
-
选择创建零 ETL 集成。
-
在集成标识符中,输入集成的名称。该名称可包含最多 63 个字母数字字符,并且可以包含连字符。
-
选择下一步。
对于源,选择数据将源自其中的 RDS 数据库。
注意
如果数据库参数配置不正确,RDS 会通知您。如果您收到此消息,可以选择为我修复,也可以手动配置它们。有关手动修复它们的说明,请参阅步骤 1:创建自定义数据库参数组。
修改数据库参数需要重启。在创建集成之前,必须完成重启,并且必须成功地将新的参数值应用于数据库。
-
成功配置源数据库后,选择下一步。
对于目标,执行以下操作:
(可选)要为 Amazon Redshift 目标使用不同的 AWS 账户,请选择指定其他账户。然后,输入有权显示您数据仓库的 IAM 角色的 ARN。有关创建 IAM 角色的说明,请参阅在不同的账户中选择目标数据仓库。
对于 Amazon Redshift 数据仓库,选择从源数据库中复制的数据的目标。您可以选择预调配的 Amazon Redshift 集群或 Redshift Serverless 命名空间作为目标。
注意
如果指定数据仓库的资源策略或区分大小写设置配置不正确,RDS 会通知您。如果您收到此消息,可以选择为我修复,也可以手动配置它们。有关手动修复这些问题的说明,请参阅《Amazon Redshift 管理指南》中的为您的数据仓库开启区分大小写和为您的数据仓库配置授权。
修改预调配 Redshift 集群的区分大小写需要重启。在创建集成之前,必须完成重启,并且必须成功地将新的参数值应用于集群。
如果您选择的源和目标位于不同的 AWS 账户,则 Amazon RDS 无法为您修复这些设置。您必须导航到另一个账户,然后在 Amazon Redshift 中手动修复这些问题。
-
正确配置目标数据仓库后,选择下一步。
-
(可选)对于标签,向集成添加一个或多个标签。有关更多信息,请参阅 为 Amazon RDS 资源添加标签。
-
对于加密,请指定您希望如何加密集成。默认情况下,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。
-
-
选择下一步。
查看您的集成设置并选择创建零 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
操作的访问权限。此外,该策略必须可让请求者账户或角色执行 DescribeKey
和 CreateGrant
操作。
以下示例密钥策略语句演示了策略文档中所需的权限。一些示例包括用于进一步缩小权限范围的上下文密钥。
以下策略语句可让请求者账户或角色检索有关 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 中创建目标数据库。