View a markdown version of this page

Amazon 自管理数据库源的零 ETL 集成 - Amazon Database Migration Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)。

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Amazon 自管理数据库源的零 ETL 集成

Amazon 零ETL集成是一种完全托管的解决方案,可在Amazon Redshift、Amazon S3和Amazon S3表中提供来自多个运营和交易数据库来源的交易和运营数据。使用零ETL,您可以通过现有 () 源终端节点将数据从自主管理的源数据库(例如MySQL、PostgreSQL、SQL Server和Oracle)复制到亚马逊 Redshift。 Amazon Database Migration Service Amazon DMS自动同步避免了传统的提取、转换和加载 (ETL) 流程。它还支持实时分析和 AI 工作负载。有关更多信息,请参阅《亚马逊 Redshift 管理指南》中的零 ETL 集成。

Zero-ETL 集成具有以下好处:

  • Real-time 数据复制 — 将数据从 Oracle 数据库持续同步到 Amazon Redshift,延迟最小。

  • 消除复杂的 ETL 管道 — 无需构建和维护自定义数据集成解决方案。

  • 减少运营开销 — 通过 Amazon API 实现自动设置和管理。

  • 简化的数据集成架构 -自管理数据库和 Amazon 分析服务之间的无缝集成。

  • 增强安全性 — Built-in 加密和 IAM 访问控制。

Zero-ETL 集成如何适用于自管理的数据库源

您可以使用先前为自管理数据库创建的现有 Amazon DMS 终端节点,也可以创建新的终端节点。

  • 使用 Amazon Glue 控制台或 CLI 创建零 ETL 集成,将亚马逊 Redshift 作为目录中的目标。 Amazon Glue 在创建零 ETL 集成时,您可以指定架构和表过滤器。

  • 与集成相关的其他只读资源将在 Amazon DMS 服务内自动创建。包括零 ETL 引擎在内的这些资源用于启动满负荷和持续的数据更改流程,将数据与 Amazon Redshift 目标数据库同步。

  • 在创建集成源、创建零 ETL 集成以及创建 Amazon Redshift 数据仓库时,您可以控制数据的加密。

  • 该集成还会监控数据管道的运行状况,并在可能的情况下从问题中恢复。

  • 您可以创建相同类型的多个源与单个 Amazon Redshift 数据仓库的集成,从而获得跨多个应用程序的全面洞察。

复制数据后,您可以使用亚马逊 Redshift 的分析功能。例如,内置机器学习 (ML)、实体化视图、数据共享以及直接访问多个数据存储和数据湖。对于数据工程师而言,零ETL集成提供了对时间敏感数据的访问,否则这些数据可能会因复杂数据管道中的间歇性错误而延迟。您可以对事务数据运行分析查询和 ML 模型,从而为时间敏感型事件和业务决策提供及时的洞察。

您可以创建 Amazon Redshift 事件通知订阅,以便在任何零 ETL 集成出现问题时自动收到通知。要查看与集成相关的事件通知列表,请参阅亚马逊的Zero-ETL 集成事件通知。 EventBridge 创建订阅的最简单方法是使用亚马逊简单通知服务控制台。有关创建和订阅 Amazon SNS 主题的信息,请参阅《Amazon Simple Notification Service 开发人员指南》中的开始使用 Amazon SNS。

创建集成之前的源数据库配置

在配置零 ETL 集成之前,必须根据数据库引擎的要求正确配置源数据库。每个引擎都有特定的配置要求和限制。

SQL Server

注意

RDS SQL Server 和 Azure SQL Server 不能用作自我管理的零 ETL 集成的来源。

Oracle

MySQL

PostgreSQL

为零 ETL 集成设置 IAM 权限和加密

要创建和管理零 ETL 集成,您需要配置适当的 IAM 权限、 Amazon Key Management Service (Amazon KMS) 加密密钥和资源策略。本节提供有关设置所需安全组件的指导。

先决条件

在创建零 ETL 集成之前,请确保您具备以下条件:

  • 具有创建和管理集成的适当权限的 IAM 用户或角色

  • 为您的自建数据库配置 Amazon DMS 源端点。有关更多信息,请参阅 创建集成之前的源数据库配置。

  • 将 Amazon Redshift 预置的集群作为目标

    注意

    Amazon Redshift Serverless 不能用作来自自管理来源的零 ETL 集成的目标。

  • 网络配置,包括 VPC 子网和安全组

创建 KMS 密钥

首先,创建客户管理的 Amazon KMS 密钥来加密零ETL集成中的数据。以下示例创建了对称加密密钥:

aws kms create-key \ --description "On-prem Zero-ETL Integration Encryption Key" \ --key-usage ENCRYPT_DECRYPT \ --key-spec SYMMETRIC_DEFAULT \ --region region

记下响应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 和 Amazon Glue 服务使用该密钥进行加密和解密操作。密钥策略必须向服务主体授予必要的权限,并包括将在集成创建期间使用的加密上下文。

以下示例显示了零 ETL 集成的关键策略:

{ "Version": "2012-10-17", "Id": "key-default-1", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333: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条件必须与您在创建集成时指定的其他加密上下文相匹配。您可以使用 Amazon KMS 控制台或以下 CLI 命令更新密钥策略:

aws kms put-key-policy \ --key-id key-id \ --policy-name default \ --policy file://kms-key-policy.json

创建 IAM 用户并配置 Amazon CLI

创建一个用于管理零 ETL 集成的 IAM 用户,并使用适当的证书配置 Amazon CLI。

  1. 创建 IAM 用户:

    aws iam create-user --user-name cli-user
  2. 为用户创建访问密钥:

    aws iam create-access-key --user-name cli-user

    保存输出SecretAccessKey中的AccessKeyId和,因为您需要它们来配置 Amazon CLI。

创建并附加 IAM 策略

创建授予零 ETL 集成操作权限的 IAM 策略。该政策应包括 Amazon Glue、 Amazon DMS、亚马逊 Redshift 和的权限。 Amazon 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:*", "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-name cli-user

配置   Amazon CLI 配置文件

使用在前面的步骤中创建的用户凭证配置 Amazon CLI 配置文件:

aws configure set aws_access_key_id ACCESS_KEY_ID --profile cli-user aws configure set aws_secret_access_key SECRET_ACCESS_KEY --profile cli-user aws configure set region region --profile cli-user aws configure set output json --profile cli-user

测试配置文件配置:

aws sts get-caller-identity --profile cli-user

输出应显示用户的帐户 ID、用户 ID 和 ARN,以确认配置文件配置正确。

创建 Redshift 资源策略

创建亚马逊 Redshift 资源策略,授权 Amazon 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"], "Resource": "arn:aws:redshift:region:account-id:namespace:namespace-id", "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:aws:redshift:region:account-id:namespace:namespace-id" } ] }' \ --resource-arn arn:aws:redshift:region:account-id:namespace:namespace-id \ --region region

替换以下占位符:

  • region— 您的资源 Amazon 所在的地区

  • account-id— 您的 Amazon 账户 ID

  • endpoint-id— 您的 Amazon DMS 源端点的 ID

  • namespace-id— 您的亚马逊 Redshift 命名空间的 ID

示例:使用加密创建零 ETL 集成

设置必要的权限和加密密钥后,您可以使用 API 创建零 ETL 集成。 Amazon Glue 以下示例演示了使用 KMS 加密创建从 MySQL 源到亚马逊 Redshift 目标的集成:

aws glue create-integration \ --integration-name mysql-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"}' \ --profile cli-user \ --region region

该命令包括以下关键参数:

  • --integration-name— 您的集成的唯一名称

  • --source-arn— 您的 Amazon DMS 源端点的 ARN

  • --target-arn— 您的亚马逊 Redshift 命名空间的 ARN

  • --integration-config— 网络配置,包括子网 ID 和安全组

  • --data-filter— 指定要复制的架构和表

  • --kms-key-id— 加密 Amazon KMS 密钥的 ARN

  • --additional-encryption-context— 必须与 KMS 密钥策略相匹配的加密上下文密钥值对(例如,){"context-key": "context-value"}

  • --profile— 要使用的 Amazon 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 集成时,请遵循以下安全最佳实践:

  • 使用最低权限访问权限 -仅授予创建和管理集成所需的最低权限。考虑尽可能使用资源级权限。

  • 启用加密 -始终使用客户管理的 Amazon KMS 密钥来加密集成数据。指定加密上下文以提高安全性。

  • 定期轮换证书 — 如果使用 IAM 用户访问密钥,请定期轮换。考虑改用带有临时证书的 IAM 角色。

  • 监控访问权限 - Amazon CloudTrail 用于监控与集成创建和管理相关的 API 调用。

  • 限制网络访问 -配置 VPC 安全组,将网络访问限制为仅限所需资源。

  • 使用资源策略 — 实施 Amazon Redshift 资源政策,控制哪些来源可以与您的数据仓库进行集成。

  • 标签资源 -将标签应用于集成和相关资源,以更好地进行组织和成本跟踪。