本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
AWS 为自管理的数据库源提供零 ETL 集成
AWS Zero-ETL 集成是一种完全托管的解决方案,它使来自多个操作和交易数据库来源的 Amazon Redshift、Amazon S3 和 Amazon S3 表中的交易和运营数据可用。使用 Zero-ETL,您可以通过现有 () 源终端节点将自行管理的源数据库(例如 MySQL、PostgreSQL、SQL Server 和 Oracle)中的数据复制到 Amazon Redshift。 AWS Database Migration Service AWS DMS自动同步避免了传统的提取、转换和加载 (ETL) 过程。它还支持实时分析和 AI 工作负载。有关更多信息,请参阅《亚马逊 Redshift 管理指南》中的零 ETL 集成。
零 ETL 集成具有以下好处:
-
实时数据复制 — 将数据从 Oracle 数据库持续同步到 Amazon Redshift,延迟最小。
-
消除复杂的 ETL 管道 — 无需构建和维护自定义数据集成解决方案。
-
减少运营开销 — 通过实现自动设置和管理 AWS APIs。
-
简化的数据集成架构-在自行管理的数据库和 AWS 分析服务之间实现无缝集成。
-
增强的安全性-内置加密和 IAM 访问控制。
Zero-ETL 集成如何适用于自行管理的数据库源
您可以使用先前为自管理数据库创建的现有 AWS DMS 终端节点,也可以创建新的终端节点。
-
使用 AWS Glue 控制台或 CLI 创建零 ETL 集成,将 Amazon Redshift 作为目录中的目标。 AWS Glue 在创建零 ETL 集成时,您可以指定架构和表筛选器。
-
与集成相关的其他只读资源将在 AWS DMS 服务中自动创建。这些资源(包括 Zero-ETL 引擎)用于启动满负荷和持续的数据更改流程,将数据与 Amazon Redshift 目标数据库同步。
-
在创建集成源、创建零 ETL 集成以及创建 Amazon Redshift 数据仓库时,您可以控制数据的加密。
-
该集成还会监控数据管道的运行状况,并在可能的情况下从问题中恢复。
-
您可以创建相同类型的多个源与单个 Amazon Redshift 数据仓库的集成,从而获得跨多个应用程序的全面洞察。
复制数据后,您就可以使用 Amazon Redshift 的分析功能了。例如,内置机器学习 (ML)、实体化视图、数据共享以及直接访问多个数据存储和数据湖。对于数据工程师来说,零ETL集成提供了对时间敏感型数据的访问,否则这些数据可能会因为复杂的数据管道中的间歇性错误而延迟。您可以对事务数据运行分析查询和 ML 模型,从而为时间敏感型事件和业务决策提供及时的洞察。
您可以创建 Amazon Redshift 事件通知订阅,以便在任何零 ETL 集成出现问题时自动收到通知。要查看与集成相关的事件通知列表,请参阅与 Amazon 的零 ETL 集成事件通知。 EventBridge创建订阅的最简单方法是使用 Amazon 简单通知服务控制台。有关创建和订阅 Amazon SNS 主题的信息,请参阅《Amazon Simple Notification Service 开发人员指南》中的开始使用 Amazon SNS。
创建集成之前的源数据库配置
在配置 Zero-ETL 集成之前,必须根据数据库引擎的要求正确配置源数据库。每个引擎都有特定的配置要求和限制。
SQL Server
-
有关配置要求,请参阅使用 Microsoft SQL Server 数据库作为来源 AWS DMS。
-
有关变更数据捕获 (CDC) 的要求,请参阅捕获数据更改以便从 SQL Server 进行持续复制。
注意
RDS SQL Server 和 Azure SQL Server 不能用作自我管理的零 ETL 集成的来源。
Oracle
-
有关配置要求和限制,请参阅使用 Oracle 数据库作为源 AWS DMS。
MySQL
-
有关配置要求和限制,请参阅使用与 MySQL 兼容的数据库作为源。 AWS DMS
PostgreSQL
-
有关配置要求和限制,请参阅使用 PostgreSQL 数据库作为源。 AWS DMS
-
当使用自我管理的 PostgreSQL 数据库作为源时,以下限制适用:
-
对于自行管理的 PostgreSQL 源,在创建源端点时,必须
false在 PostgreSQL 终端节点设置中CaptureDdls将其设置为。要设置此参数,请在创建源端点时使用以下内容:--postgre-sql-settings '{"CaptureDdls": false}'如果未设置 CaptureDdls 为 false,则任务可能无法成功启动。
-
如果设置
CaptureDdls为false,则不会捕获复制期间对源数据库执行的 DDL 操作(例如创建表、更改表和删除表),也不会被捕获或复制到目标数据库。
-
为零 ETL 集成设置 IAM 权限和加密
要创建和管理零 ETL 集成,您需要配置适当的 IAM 权限、 AWS Key Management Service (AWS KMS) 加密密钥和资源策略。本节提供有关设置所需安全组件的指导。
先决条件
在创建零 ETL 集成之前,请确保具备以下条件:
-
具有创建和管理集成的相应权限的 IAM 用户或角色
-
为自建数据库配置 AWS DMS 源端点。有关更多信息,请参阅 创建集成之前的源数据库配置。
-
以 Amazon Redshift 预配置的集群或无服务器命名空间作为目标
-
网络配置,包括 VPC 子网和安全组
创建 KMS 密钥
首先,创建客户托管 AWS KMS 密钥来加密零ETL集成中的数据。以下示例创建对称加密密钥:
aws kms create-key \ --description "On-prem Zero-ETL Integration Encryption Key" \ --key-usage ENCRYPT_DECRYPT \ --key-spec SYMMETRIC_DEFAULT \ --regionregion
请注意响应Arn中的KeyId和,因为您在配置密钥策略和创建集成时将需要它们。
输出示例:
{ "KeyMetadata": { "AWSAccountId": "account-id", "KeyId": "4e2c14f8-7abe-4aec-851a-379f6ed973a8", "Arn": "arn:aws:kms:region:account-id:key/4e2c14f8-7abe-4aec-851a-379f6ed973a8", "CreationDate": 1763155061.148, "Enabled": true, "Description": "Zero-ETL Integration Encryption Key", "KeyUsage": "ENCRYPT_DECRYPT", "KeyState": "Enabled", "Origin": "AWS_KMS", "KeyManager": "CUSTOMER", "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT", "KeySpec": "SYMMETRIC_DEFAULT", "EncryptionAlgorithms": [ "SYMMETRIC_DEFAULT" ], "MultiRegion": false } }
配置 KMS 密钥策略
创建 KMS 密钥后,将密钥策略配置为允许 Amazon Redshift 和 AWS Glue 服务使用该密钥进行加密和解密操作。密钥策略必须向服务委托人授予必要的权限,并包括将在集成创建期间使用的加密上下文。
以下示例显示了零 ETL 集成的关键策略:
{ "Version": "2012-10-17", "Id": "key-default-1", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::account-id:root" }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allows the Redshift and glue service principal to add a grant to a KMS key", "Effect": "Allow", "Principal": { "Service": [ "redshift.amazonaws.com", "glue.amazonaws.com" ] }, "Action": "kms:CreateGrant", "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:context-key": "context-value" }, "ForAllValues:StringEquals": { "kms:GrantOperations": [ "Decrypt", "GenerateDataKey", "CreateGrant", "GenerateDataKeyWithoutPlaintext", "ReEncryptTo" ] } } } ] }
该kms:EncryptionContext条件必须与您在创建集成时指定的其他加密上下文相匹配。您可以使用 AWS KMS 控制台或以下 CLI 命令更新密钥策略:
aws kms put-key-policy \ --key-idkey-id\ --policy-name default \ --policy file://kms-key-policy.json
创建 IAM 用户并配置 AWS CLI
创建用于管理零 ETL 集成的 IAM 用户,并使用适当的证书配置 CL AWS I。
-
创建一个 IAM 用户:
aws iam create-user --user-namecli-user -
为用户创建访问密钥:
aws iam create-access-key --user-namecli-user保存输出
SecretAccessKey中的AccessKeyId和,因为您需要它们来配置 AWS CLI。
创建并附加 IAM 策略
创建一个 IAM 策略,授予零 ETL 集成操作的权限。该策略应包括对 AWS Glue、 AWS DMS、Amazon Redshift 和的权限。 AWS KMS
将以下策略保存到文件中(例如,/tmp/zetl-policy.json):
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ZetlGlueIntegrationAccess", "Effect": "Allow", "Action": [ "glue:CreateIntegration", "glue:ModifyIntegration", "glue:DeleteIntegration", "glue:DescribeIntegrations", "glue:DescribeInboundIntegrations" ], "Resource": "*" }, { "Sid": "DMSIntegrationAccess", "Effect": "Allow", "Action": [ "dms:CreateOutboundIntegration", "dms:ModifyOutboundIntegration", "dms:CreateEndpoint", "dms:DescribeEndpoints", "dms:ModifyEndpoint", "dms:DeleteEndpoint", "dms:TestConnection" ], "Resource": "*" }, { "Sid": "ZetlRedshiftFullAccess", "Effect": "Allow", "Action": [ "redshift:*", "redshift-serverless:*", "ec2:DescribeAccountAttributes", "ec2:DescribeAddresses", "ec2:DescribeAvailabilityZones", "ec2:DescribeSecurityGroups", "ec2:DescribeSubnets", "ec2:DescribeVpcs", "ec2:DescribeInternetGateways", "sns:CreateTopic", "sns:Get*", "sns:List*", "cloudwatch:Describe*", "cloudwatch:Get*", "cloudwatch:List*", "cloudwatch:PutMetricAlarm", "cloudwatch:EnableAlarmActions", "cloudwatch:DisableAlarmActions", "tag:GetResources", "tag:UntagResources", "tag:GetTagValues", "tag:GetTagKeys", "tag:TagResources" ], "Resource": "*" }, { "Sid": "ZetlRedshiftDataAPI", "Effect": "Allow", "Action": [ "redshift-data:ExecuteStatement", "redshift-data:CancelStatement", "redshift-data:ListStatements", "redshift-data:GetStatementResult", "redshift-data:DescribeStatement", "redshift-data:ListDatabases", "redshift-data:ListSchemas", "redshift-data:ListTables", "redshift-data:DescribeTable" ], "Resource": "*" }, { "Sid": "ZetlKMSAccess", "Effect": "Allow", "Action": [ "kms:CreateKey", "kms:DescribeKey", "kms:Encrypt", "kms:Decrypt", "kms:GenerateDataKey", "kms:ListKeys", "kms:CreateAlias", "kms:ListAliases", "kms:CreateGrant" ], "Resource": "*" }, { "Sid": "ZetlSecretsManagerAccess", "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue", "secretsmanager:PutSecretValue", "secretsmanager:CreateSecret", "secretsmanager:UpdateSecret", "secretsmanager:DeleteSecret", "secretsmanager:DescribeSecret", "secretsmanager:ListSecrets", "secretsmanager:GetResourcePolicy", "secretsmanager:PutResourcePolicy", "secretsmanager:ValidateResourcePolicy" ], "Resource": "*" } ] }
创建策略并将其附加到 IAM 用户:
aws iam create-policy \ --policy-name ZetlCustomPolicy \ --policy-document file:///tmp/zetl-policy.json aws iam attach-user-policy \ --policy-arn arn:aws:iam::account-id:policy/ZetlCustomPolicy \ --user-namecli-user
配置 AWS CLI 配置文件
使用在前面步骤中创建的用户凭证配置 AWS CLI 配置文件:
aws configure set aws_access_key_idACCESS_KEY_ID--profilecli-useraws configure set aws_secret_access_keySECRET_ACCESS_KEY--profilecli-useraws configure set regionregion--profilecli-useraws configure set output json --profilecli-user
测试配置文件配置:
aws sts get-caller-identity --profilecli-user
输出应显示用户的账户 ID、用户 ID 和 ARN,以确认配置文件配置正确。
创建 Redshift 资源策略
创建 Amazon Redshift 资源策略以授权 AWS DMS 源终端节点创建与您的亚马逊 Redshift 命名空间的入站集成。此政策附加到 Amazon Redshift 命名空间,用于控制哪些来源可以将数据复制到该命名空间。
以下示例说明如何为 Amazon Redshift 命名空间创建资源策略:
aws redshift put-resource-policy \ --policy '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": ["redshift.amazonaws.com"] }, "Action": ["redshift:AuthorizeInboundIntegration"], "Condition": { "StringEquals": { "aws:SourceArn": "arn:aws:dms:region:account-id:endpoint:endpoint-id" } } }, { "Effect": "Allow", "Principal": { "AWS": "account-id" }, "Action": [ "redshift:CreateInboundIntegration", "redshift:ModifyInboundIntegration" ] } ] }' \ --resource-arn arn:aws:redshift:region:account-id:namespace:namespace-id\ --regionregion
替换以下占位符:
-
region— 您的资源 AWS 所在的地区 -
account-id— 您的 AWS 账户 ID -
endpoint-id— 您的 AWS DMS 源端点的 ID -
namespace-id— 你的亚马逊 Redshift 命名空间的 ID
示例:创建带加密功能的零 ETL 集成
设置必要的权限和加密密钥后,您可以使用 API 创建零 ETL 集成。 AWS Glue 以下示例演示如何使用 KMS 加密创建从 MySQL 源到亚马逊 Redshift 目标的集成:
aws glue create-integration \ --integration-namemysql-onprem-integration\ --source-arn arn:aws:dms:region:account-id:endpoint:source-endpoint-id\ --target-arn arn:aws:redshift:region:account-id:namespace:namespace-id\ --description "MySQL to Redshift integration" \ --integration-config '{"SourceProperties":{"SubnetIds":"subnet-id1,subnet-id2,subnet-id3","VpcSecurityGroupIds":"sg-id"}}' \ --data-filter "include:mysql.*" \ --kms-key-id arn:aws:kms:region:account-id:key/key-id\ --additional-encryption-context '{"context-key": "context-value"}' \ --profilecli-user\ --regionregion
该命令包括以下关键参数:
-
--integration-name— 为您的集成提供一个唯一的名称 -
--source-arn— 您的 AWS DMS 源端点的 ARN -
--target-arn— 你的亚马逊 Redshift 命名空间的 ARN -
--integration-config— 网络配置,包括子网 IDs 和安全组 -
--data-filter— 指定要复制的架构和表 -
--kms-key-id— 用于加密的 AWS KMS 密钥的 ARN -
--additional-encryption-context— 必须与 KMS 密钥策略匹配的加密上下文密钥值对(例如){"context-key": "context-value"} -
--profile— 要使用的 AWS CLI 配置文件(之前创建的 CLI 用户配置文件)
成功创建后,该命令将返回集成详细信息,包括集成 ARN、状态和配置参数。输出示例:
{ "SourceArn": "arn:aws:dms:region:account-id:endpoint:endpoint-id", "TargetArn": "arn:aws:redshift:region:account-id:namespace:namespace-id", "IntegrationName": "mysql-onprem-integration", "IntegrationArn": "arn:aws:glue:region:account-id:integration:integration-id", "KmsKeyId": "arn:aws:kms:region:account-id:key/key-id", "AdditionalEncryptionContext": { "context-key": "context-value" }, "Status": "CREATED", "CreateTime": 1763234086.001, "DataFilter": "include: mysql.*", "IntegrationConfig": { "SourceProperties": { "SubnetIds": "subnet-id1,subnet-id2,subnet-id3", "VpcSecurityGroupIds": "sg-id" } } }
安全最佳实践
设置零 ETL 集成时,请遵循以下安全最佳实践:
-
使用最低权限访问权限-仅授予创建和管理集成所需的最低权限。尽可能考虑使用资源级权限。
-
启用加密-始终使用客户管理的 AWS KMS 密钥来加密集成数据。指定加密上下文以提高安全性。
-
定期轮换证书 — 如果使用 IAM 用户访问密钥,请定期轮换证书。请考虑改用带有临时证书的 IAM 角色。
-
监控访问权限- AWS CloudTrail 用于监控与集成创建和管理相关的 API 调用。
-
限制网络访问-配置 VPC 安全组,将网络访问限制为仅限所需资源。
-
使用资源策略 — 实施 Amazon Redshift 资源策略来控制哪些来源可以与您的数据仓库进行集成。
-
标记资源-将标签应用于集成和相关资源,以便更好地进行组织和成本跟踪。