我们的邮箱地址:

steadfast@163.com

致电我们:

13594780186

新闻中心

  • Home
  • 使用 AWS CDK 和数据解决方案框架来配置和管理 Amazon Redshift Serverl

使用 AWS CDK 和数据解决方案框架来配置和管理 Amazon Redshift Serverl

2026-01-27 12:49:36 20

使用 AWS CDK 和数据解决方案框架管理 Amazon Redshift Serverless

重点提示

在本文中,我们将展示如何使用 AWS Cloud Development KitCDK与数据解决方案框架DSF一同创建和管理 Amazon Redshift Serverless。借助这些工具,您能够以程序化方式简化数据仓库的配置、管理和共享,从而实现一致的 CI/CD 部署、跨环境变更的便捷管理以及有效的数据治理。

在 2024 年 2 月,我们发布了数据解决方案框架DSF,这是一种在 AWS 上构建数据解决方案的开源框架。DSF 使用AWS Cloud Development KitCDK将基础设施组件打包为基于 AWS 服务的L3 AWS CDK 构造。L3 构造是常见技术模式的实现,能够创建多个配置良好的互通资源。

在这篇文章中,我们将演示如何使用 AWS CDK 和 DSF 创建一个基于Amazon Redshift Serverless的多数据仓库平台。DSF 可以简化 Redshift Serverless 的配置、数据初始化与目录构建,以及数据共享的过程。使用 AWS CDK 和 DSF 的程序化方法允许您将 GitOps 原则应用于分析工作负载,从而实现以下优势:

通过持续集成和交付 (CI/CD) 管道进行部署,包括 Redshift 对象例如数据库、表、共享对象等的定义。在多个环境中一致地推出变更。利用代码启动数据仓库例如创建表、数据投入等,通过版本控制简化测试环境的设置。使用AWS CDK 内置测试功能在部署前测试变更。

此外,DSF 的 Redshift Serverless L3 构造提供多种内置功能,可以加快开发进程,并引导您遵循最佳实践。例如:

从 Amazon Redshift 进行数据提取、转换和加载 (ETL) 任务更加简单,因为自动创建和配置了AWS Glue 连接资源。这意味着数据工程师无需过多设置,可以立即使用此资源处理 AWS Glue ETL 作业。对于 Amazon Redshift 内部数据的发现,DSF 提供了方便的配置 AWS Glue 爬虫的方法,以便填充 AWS Glue 数据目录,便于数据发现和创建 ETL 作业时参考表格。配置的 AWS Glue 爬虫使用遵循最小权限原则的AWS 身份和访问管理IAM角色。在不同的 Redshift 数据仓库之间共享数据是一种常见的方法,可以在不复制数据的情况下提高业务之间的协作。DSF 提供了方便的全流程实现,适用于数据生产者和消费者。

解决方案概述

该解决方案展示了一种常见模式,即将数据仓库作为商业智能 (BI) 工作负载的数据服务层,数据源存储在Amazon Simple Storage ServiceS3桶中,然后将数据导入到 Redshift 生产者数据仓库,用于创建物化视图和数据聚合,最后与运行 BI 查询的 Redshift 消费者共享。下图展示了高层架构。

本篇文章将使用 Python 作为示例代码,DSF 也支持TypeScript。

先决条件

由于我们使用 AWS CDK,请在实施解决方案之前完成使用 AWS CDK 入门的步骤。

初始化项目并配置 Redshift Serverless 命名空间和工作组

首先,我们需要初始化项目并将 DSF 作为依赖项。您可以在本地终端运行以下代码,也可以使用AWS Cloud9:

bashmkdir dsfredshiftblog ampamp cd dsfredshiftblogcdk init language python

在您的 IDE 中打开项目文件夹,并完成以下步骤:

打开 apppy 文件。在此文件中,确保解注释第一个 env。该设置会根据部署期间使用的 AWS 配置文件配置AWS CDK 环境。

在项目根目录下的 cdkcontextjson 文件中添加配置标志如果文件不存在,请创建该文件:

json{ @datasolutionsframeworkonaws/removeDataOnDestroy true }

将 @datasolutionsframeworkonaws/removeDataOnDestroy 配置标志设置为 true,确保将 removalpolicy 参数设置为 RemovalPolicyDESTROY 的资源在 AWS CDK 堆栈删除时被销毁。这是 DSF 用来防止数据意外删除的防护措施。

项目配置完成后,您可以开始在堆栈中添加资源。

导航到 dsfredshiftblog 文件夹,打开 dsfredshiftblogstackpy 文件。

这里是我们配置将要部署的资源的地方。

为了开始构建端到端的演示,在文件开头添加以下导入语句,允许您开始定义 AWS CDK 核心库和 DSF 中的资源:

pythonfrom awscdk import ( RemovalPolicy Stack)

from awscdkawss3 import Bucketfrom awscdkawsiam import Role ServicePrincipalfrom constructs import Constructfrom cdklabs import awsdatasolutionsframework as dsf

我们使用几个特定于 DSF 的构造来构建演示:

DataLakeStorage 此构造创建三个 S3 桶,命名为 Bronze、Silver 和 Gold,以代表不同的数据层。S3DataCopy 该构造管理从一个桶到另一个桶的数据复制。RedshiftServerlessNamespace 创建一个 Redshift Serverless 命名空间,用于存储数据库对象和用户。

RedshiftServerlessWorkgroup 创建一个 Redshift Serverless 工作组,其中包含数据仓库的计算和网络相关配置。这也是 DSF 提供的一系列便捷功能的入口点,例如 Redshift 表的目录管理、以 AWS CDK 为一部分的 SQL 语句执行如创建表、数据投入、表的合并等以及在不同 Redshift 集群之间共享数据集而无需移动数据。

现在您已导入所需库,按美德协议最佳实践 创建 S3 桶,以实现铜、银、金数据层的高层架构定义。

每个层的高层定义如下:

铜层表示原始数据,这是来自各种源系统的数据集成地。不需要模式。银层是清理后且可能经过增补的数据。在此层中强制实现模式。金层是经过进一步精炼和聚合的数据,以满足特定的业务需求。

通过使用DataLakeStorage构造,您可以以以下最佳实践创建这三个 S3 桶:

启用 AWS 密钥管理服务AWS KMS进行静态加密。强制使用 SSL。启用AWS S3 桶密钥。默认 S3 生命周期规则将在 1 天后删除未完成的分段上传。

pythondatalake = dsfstorageDataLakeStorage(self DataLake removalpolicy=RemovalPolicyDESTROY)

创建完 S3 桶后,使用S3DataCopy 复制数据。为了这个演示,我们将数据放置在已经清理后的 Silver 桶中:

pythonsourcebucket = Bucketfrombucketname(self SourceBucket bucketname=redshiftimmersiondaylabs)

datacopy = dsfutilsS3DataCopy(self SourceData sourcebucket=sourcebucket sourcebucketprefix=data/amazonreviews/ sourcebucketregion=uswest2 targetbucket=datalakesilverbucket targetbucketprefix=silver/amazonreviews/)

为了让 Amazon Redshift 能够投入 Amazon S3 中的数据,需要一个具有适当权限的 IAM 角色。该角色将与接下来创建的 Redshift Serverless 命名空间关联。

pythonlakerole = Role(self LakeRole assumedby=ServicePrincipal(redshiftamazonawscom))

datalakesilverbucketgrantread(lakerole)

要配置 Redshift Serverless,请设置两个资源:一个命名空间和一个工作组。DSF 为这两个提供了 L3 构造:

RedshiftServerlessNamespace

RedshiftServerlessWorkgroup

这两个构造遵循安全最佳实践,包括:

默认虚拟私有云VPC使用私有子网禁用公共访问。数据通过 AWS KMS 进行静态加密,并启用自动密钥轮换。管理凭证存储在AWS Secrets Manager中,自动轮换由 Amazon Redshift 管理。默认AWS Glue 连接自动创建,使用私有连接。AWS Glue 爬虫和 AWS Glue ETL 作业均可利用该连接来连接 Amazon Redshift。

RedshiftServerlessWorkgroup 构造是其他功能的主要入口点,例如与 AWS Glue 数据目录、Redshift 数据 API 和数据共享 API 的集成。

在以下示例中,使用构造提供的默认值,并将早前创建的 IAM 角色与之关联,以便让 Amazon Redshift 访问数据湖以进行数据投入:

pythonnamespace = dsfconsumptionRedshiftServerlessNamespace(self Namespace dbname=defaultdb name=producer removalpolicy=RemovalPolicyDESTROY defaultiamrole=lakerole)

workgroup = dsfconsumptionRedshiftServerlessWorkgroup(self Workgroup name=producer namespace=namespace removalpolicy=RemovalPolicyDESTROY)

创建表并投入数据

要创建表,可以使用 RedshiftServerlessWorkgroup 构造中的 runCustomSQL 方法。此方法允许您在创建资源时如 create table 或 create materialized view和删除资源时如 drop table 或 drop materialized view运行任意 SQL 语句。

在 RedshiftServerlessWorkgroup 实例化后添加以下代码:

pythoncreateamazonreviewstable = workgroupruncustomsql(CreateAmazonReviewsTable databasename=defaultdb sql=CREATE TABLE amazonreviews (marketplace character varying(16383) ENCODE lzo customerid character varying(16383) ENCODE lzo reviewid character varying(16383) ENCODE lzo productid character varying(16383) ENCODE lzo productparent character varying(16383) ENCODE lzo producttitle character varying(16383) ENCODE lzo starrating integer ENCODE az64 helpfulvotes integer ENCODE az64 totalvotes integer ENCODE az64 vine character varying(16383) ENCODE lzo verifiedpurchase character varying(16383) ENCODE lzo reviewheadline character varying(max) ENCODE lzo reviewbody character varying(max) ENCODE lzo reviewdate date ENCODE az64 year integer ENCODE az64) DISTSTYLE AUTO deletesql=drop table amazonreviews)

loadamazonreviewsdata = workgroupingestdata(amazonreviewsingestdata defaultdb amazonreviews datalakesilverbucket silver/amazonreviews/ FORMAT parquet)

loadamazonreviewsdatanodeadddependency(createamazonreviewstable)loadamazonreviewsdatanodeadddependency(datacopy)

鉴于某些资源创建的异步性质,我们还设置了一些资源之间的依赖关系;否则,AWS CDK 将尝试并行创建它们以加速部署。上述依赖声明确保以下几点:

十大免费加速器在加载数据之前,S3 数据复制已经完成,因此数据存在于投入的源桶中。在加载数据之前,目标表在 Redshift 命名空间中已创建。

启动示例物化视图

workgroupruncustomsql() 方法为您使用 AWS CDK 启动 Redshift 数据仓库提供了灵活性。例如,您可以创建一个物化视图,通过预聚合 Amazon 评价中的数据来提高查询性能:

pythonmaterializedview = workgroupruncustomsql(MvProductAnalysis databasename=defaultdb sql=fCREATE MATERIALIZED VIEW mvproductanalysis AS SELECT reviewdate producttitle COUNT(1) AS reviewtotal SUM(starrating) AS rating FROM amazonreviews WHERE marketplace = US GROUP BY 12 deletesql=drop materialized view mvproductanalysis)

materializedviewnodeadddependency(loadamazonreviewsdata)

在 Amazon Redshift 中目录表

RedshiftServerlessWorkgroup 的部署会自动创建一个AWS Glue 连接资源,可被AWS Glue 爬虫和AWS Glue ETL 作业使用。此连接通过 workgroup 构造直接暴露,使用此连接,workgroup 构造提供了在相关 Redshift Serverless 命名空间内目录表格的便捷方法。以下是示例代码:

pythonworkgroupcatalogtables(DefaultDBCatalog mvproductanalysis)

这行代码在数据目录中创建一个名为 mvproductanalysis 的数据库,并配置与 IAM 角色和网络配置相关的爬虫。默认情况下,它会爬取在创建 Redshift Serverless 命名空间时指定的默认数据库中的公共架构内的所有表格。要覆盖此设置,catalogTables 方法中的第三个参数允许您定义要爬取的模式参见包含路径中的 JDBC 数据存储。

您可以使用 AWS Glue 控制台运行爬虫,或者使用 SDK、AWS 命令行界面AWS CLI或 AWS CDK 通过AwsCustomResource调用爬虫。

数据共享

DSF 支持 Redshift 数据共享,适用于生产者和消费者,以及同一账户和跨账户的场景。下面我们将创建另一个 Redshift Serverless 命名空间和工作组以演示交互:

pythonnamespace2 = dsfconsumptionRedshiftServerlessNamespace(self Namespace2 dbname=defaultdb name=consumer defaultiamrole=lakerole removalpolicy=RemovalPolicyDESTROY)

workgroup2 = dsfconsumptionRedshiftServerlessWorkgroup(self Workgroup2 name=consumer namespace=namespace2 removalpolicy=RemovalPolicyDESTROY)

使用 AWS CDK 和数据解决方案框架来配置和管理 Amazon Redshift Serverl

对于生产者

对于生产者,请完成以下步骤:

创建新的共享并填充共享中的架构或表格:

pythondatashare = workgroupcreateshare(DataSharing defaultdb defaultdbshare public [mvproductanalysis])

datasharenewsharecustomresourcenodeadddependency(materializedview)

创建访问授权:

要向同一账户中的集群

发表评论