在创建 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 集成
登录 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
操作。
以下示例策略演示了如何提供密钥策略中所需的权限。它包括用于进一步缩小权限范围的上下文键。
{
"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 集群或工作组中创建目标数据库。然后,您可以开始向源 RDS 数据库中添加数据,并在 Amazon Redshift 中对其进行查询。有关说明,请参阅在 Amazon Redshift 中创建目标数据库。