亚马逊AWS官方博客

使用 AWS CloudFormation 和 AWS CLI 自动管理 Amazon Redshift Serverless 数据仓库

Original URL: https://aws.amazon.com/blogs/big-data/automate-amazon-redshift-serverless-data-warehouse-management-using-aws-cloudformation-and-the-aws-cli/

借助 Amazon Redshift Serverless,可以轻松运行和扩展分析,而无需管理实例类型、实例大小、生命周期管理、暂停、恢复等。它可以自动预置和智能扩展数据仓库的计算容量,即使面临最苛刻和最不可预测的工作负载,也能提供高速性能,而且您只需按实际用量付费。您只需加载数据,然后便可在 Amazon Redshift 查询编辑器或偏好的商业智能(BI,Business Intelligence)工具中立即开始查询,并在一个易于使用、零管理开销的环境中,继续享受最具性价比且熟悉的 SQL 功能。Redshift Serverless 将计算与存储分开,并引入了两个抽象概念:

  • 工作组 – 工作组是计算资源的集合。它将 RPU、VPC 子网组和安全组等计算资源组合在一起。
  • 命名空间 – 命名空间是数据库对象和用户的集合。它将数据对象组合在一起,如数据库、架构、表、用户或用于加密数据的 AWS Key Management Service(AWS KMS)密钥。

一些组织希望自动完成工作组和命名空间的创建,从而实现基础设施的自动化管理和跨环境的一致配置,并提供端到端的自助服务功能。您可以使用 Redshift Serverless APIAWS 命令行界面(AWS CLI)或 AWS CloudFormation,自动执行工作组和命名空间的管理操作,我们将在本文中进行演示。

解决方案概览

在以下各部分中,我们将讨论如何使用 AWS CloudFormation(有关更多信息,请参阅 RedshiftServerless resource type reference(RedshiftServerless 资源类型参考))和 AWS CLI(参见 redshift-serverless),自动管理 Redshift Serverless 数据仓库所涉及的各种任务。

以下是一些与 AWS CloudFormation 配合使用的关键使用案例和相应的自动化方法:

  • 实现从基础设施设置到查询的端到端自助服务
  • 让数据使用者自动载入通过 AWS Data Exchange 预置的数据
  • 通过创建端点加快工作负载隔离
  • 创建具有跨环境的一致配置的新数据仓库

以下是 AWS CLI 的一些主要使用案例和方法:

  • 自动维护操作:
    • 备份和限制
    • 修改 RPU 配置
    • 管理限制
  • 从预置到无服务器的自动迁移

先决条件

要运行本文中所描述的操作,请确保该用户或角色具备 AWS Identity Access and Management(IAM)权限 arn:aws:iam::aws:policy/AWSCloudFormationFullAccess,以及管理员权限 arn:aws:iam::aws:policy/AdministratorAccess 或附加了完整的 Amazon Redshift 权限 arn:aws:iam::aws:policy/AmazonRedshiftFullAccess 策略。有关更多详细信息,请参阅 Amazon Redshift Serverless 中的安全性和连接

您应当至少有三个子网,且子网必须跨越三个可用区。仅在同一个可用区中创建三个子网是不够的。要创建新的 VPC 和子网,请使用以下 CloudFormation 模板,在 AWS 账户中进行部署。

使用 AWS CloudFormation 创建 Redshift Serverless 命名空间和工作组

AWS CloudFormation 可帮助您建模和设置 AWS 资源,这样您便可以减少在基础设施设置上花费的时间,将更多时间用在 AWS 中运行的应用程序上。您可以创建一个模板来描述需要的所有 AWS 资源,AWS CloudFormation 会根据给定的输入参数预置和配置这些资源。

要使用 AWS CloudFormation 为 Redshift Serverless 数据仓库创建命名空间和工作组,请完成以下步骤:

  1. 选择 Launch Stack(启动堆栈),使用模板在 AWS 账户中启动 AWS CloudFormation:
  2. 对于 Stack name(堆栈名称),输入有意义的堆栈名称,如 rsserverless
  3. 输入下表中详述的参数。
参数 默认值 允许值 描述
命名空间 . 不适用 您选择创建的命名空间的名称。
数据库名称 dev 不适用 Redshift Serverless 环境中第一个数据库的名称。
管理员用户名 admin 不适用 要创建的 Redshift Serverless 命名空间的管理员用户名。
管理员用户密码 . 不适用 与管理员用户关联的密码。
关联 IAM 角色 . 以逗号分隔的 IAM 角色的 ARN 列表 将 IAM 角色关联到 Redshift Serverless 命名空间(可选)。
日志导出列表 userlog、connectionlog、useractivitylog userlog、connectionlog、useractivitylog 提供列表中以逗号分隔的值。例如,userlog、connectionlog、useractivitylog。如果留空,则关闭 LogExport。
工作组 . 不适用 您选择创建的工作组名称。
基本 RPU 128 最小值为 32,最大值为 512 Redshift Serverless 工作组的基本 RPU。
可公开访问 false true、false 指示 Redshift Serverless 实例能否公开访问。
子网 ID . 不适用 您必须至少有三个子网,且子网必须跨越三个可用区。
安全组 ID . 不适用 VPC 中的安全组 ID 列表。
增强型 VPC 路由 false true、false 该值指定是否启用增强型 VPC 路由,启用后将强制 Redshift Serverless 通过 VPC 路由流量。
  1. 将提供的参数传递给 AWS::RedshiftServerless::NamespaceAWS::RedshiftServerless::Workgroup 资源类型:
    资源:
      RedshiftServerlessNamespace:
        类型:'AWS::RedshiftServerless::Namespace'
        属性:
          AdminUsername:
            Ref: AdminUsername
          AdminUserPassword:
            Ref: AdminUserPassword
          DbName:
            Ref: DatabaseName
          NamespaceName:
            Ref: NamespaceName
          IamRoles:
            Ref: IAMRole
          LogExports:
            Ref: LogExportsList        
      RedshiftServerlessWorkgroup:
        Type: 'AWS::RedshiftServerless::Workgroup'
        属性:
          WorkgroupName:
            Ref: WorkgroupName
          NamespaceName:
            Ref: NamespaceName
          BaseCapacity:
            Ref: BaseRPU
          PubliclyAccessible:
            Ref: PubliclyAccessible
          SubnetIds:
            Ref: SubnetId
          SecurityGroupIds:
            Ref: SecurityGroupIds
          EnhancedVpcRouting:
            Ref: EnhancedVpcRouting        
        DependsOn:
          - RedshiftServerlessNamespace

使用 AWS CLI 执行命名空间和工作组管理操作

AWS CLI 是管理 AWS 服务的统一工具。只需下载和配置一个工具,便可以从命令行控制多个 AWS 服务,并通过脚本自动执行这些服务。

要运行 Redshift Serverless CLI 命令,需要安装最新版本的 AWS CLI。有关说明,请参阅安装或更新最新版本的 AWS CLI

接下来,完成以下步骤:

使用以下命令创建新的命名空间:

aws redshift-serverless create-namespace \
    --admin-user-password '<password>' \
    --admin-username cfn-blog-admin \
    --db-name cfn-blog-db \
    --namespace-name 'cfn-blog-ns'

以下屏幕截图显示了示例输出。

create-namespace

使用以下命令创建一个新的工作组,映射到刚才创建的命名空间:

aws redshift-serverless create-workgroup \
    --base-capacity 128 \
    --namespace-name 'cfn-blog-ns' \
    --no-publicly-accessible \
    --security-group-ids "sg-0269bd680e0911ce7" \
    --subnet-ids "subnet-078eedbdd99398568" "subnet-05defe25a59c0e4c2" "subnet-0f378d07e02da3e48"\
    --workgroup-name 'cfn-blog-wg'

以下是示例输出。

创建工作组

要允许 VPC 之外的实例和设备连接到工作组,请在 create-workgroup CLI 命令中使用 publicly-accessible 选项。

要验证工作组是否已创建且处于 AVAILABLE 状态,请使用以下命令:

aws redshift-serverless get-workgroup \
--workgroup-name 'cfn-blog-wg' \
--output text \
--query 'workgroup.status'

以下屏幕截图显示了我们的输出。

无论快照是创建自预置集群还是无服务器工作组,都可以将其恢复到新的无服务器工作组中。恢复快照会用该快照的内容替换命名空间和工作组。

使用以下命令从快照恢复:

aws redshift-serverless restore-from-snapshot \
--namespace-name 'cfn-blog-ns' \
--snapshot-arn arn:aws:redshift:us-east-1:<account-id>:snapshot:<cluster-identifier>/<snapshot-identifier> \
--workgroup-name 'cfn-blog-wg'

以下是示例输出。

要检查工作组状态,请运行以下命令:

aws redshift-serverless get-workgroup \
--workgroup-name 'cfn-blog-wg' \
--output text \
--query 'workgroup.status'

要从现有命名空间创建快照,请运行以下命令:

aws redshift-serverless create-snapshot \
--namespace-name cfn-blog-ns \
--snapshot-name cfn-blog-snapshot-from-ns \
--retention-period 7

以下是示例输出。

Redshift Serverless 为命名空间创建 24 小时可用的恢复点。要使恢复点保持超过 24 小时,请将其转换为快照。

要查找与命名空间关联的恢复点,请运行以下命令:

aws redshift-serverless list-recovery-points \
--namespace-name cfn-blog-ns \
--no-paginate

以下是示例输出,其中包含所有恢复点的列表。

列出恢复点

我们从列表中提取最新的 recoveryPointId,并转换为快照。

要从恢复点创建快照,请运行以下命令:

aws redshift-serverless convert-recovery-point-to-snapshot \
--recovery-point-id f9eaf9ac-a98d-4809-9eee-869ef03e98b4 \
--retention-period 7 \
--snapshot-name cfn-blog-snapshot-from-rp

以下是示例输出。

convert-recovery-point

除了将快照恢复到无服务器命名空间外,您还可以从恢复点恢复。

  1. 首先,您需要使用 list-recovery-points 命令查找恢复点标识符。
  2. 然后,使用以下命令从恢复点恢复:
aws redshift-serverless restore-from-recovery-point \
--namespace-name cfn-blog-ns \
--recovery-point-id 15c55fb4-d973-4d8a-a8fe-4741e7911137 \
--workgroup-name cfn-blog-wg

以下是示例输出。

从恢复点还原

这种基本 RPU 决定了无服务器环境的起始容量。

使用以下命令,根据工作负载需求修改基本 RPU:

aws redshift-serverless update-workgroup \
--base-capacity 256 \
--workgroup-name 'cfn-blog-wg'

以下是示例输出。

运行以下命令,验证工作组基本 RPU 容量是否已修改为 256:

aws redshift-serverless get-workgroup \
--workgroup-name 'cfn-blog-wg' \
--output text \
--query 'workgroup.baseCapacity'


要使 Redshift Serverless 的成本保持可预测性,您可以设置每天、每周或每月使用的最大 RPU 小时数。此外,您可以在达到限制时采取操作。操作包括:向系统表写入日志条目、接收警报或关闭用户查询。

使用以下命令,首先获取工作组 ARN:

aws redshift-serverless get-workgroup --workgroup-name 'cfn-blog-wg' \
--output text \
--query 'workgroup.workgroupArn'

以下屏幕截图显示了我们的输出。

使用前面命令的 workgroupArn 输出和以下命令来设置每日 RPU 使用限制,并将操作行为设置为 log:

aws redshift-serverless create-usage-limit \
--amount 256 \
--breach-action log \
--period daily \
--resource-arn arn:aws:redshift-serverless:us-east-1:<aws-account-id>:workgroup/1dcdd402-8aeb-432e-8833-b1f78a112a93 \
--usage-type serverless-compute

以下是示例输出。

结论

现在您已掌握了如何使用 AWS CloudFormation 和 AWS CLI,对 Redshift Serverless 命名空间和工作组自动执行管理操作。要自动创建和管理 Amazon Redshift 预置集群,请参阅 Automate Amazon Redshift Cluster management operations using AWS CloudFormation(使用 AWS CloudFormation 自动执行 Amazon Redshift 集群管理操作)。


关于作者

Ranjan Burm 是 AWS 的分析专家解决方案架构师。他专长于 Amazon Redshift,帮助客户构建可扩展的分析解决方案。他拥有超过 15 年的各种数据库和数据仓库技术的工作经验。他热衷于使用云解决方案实现自动化和解决客户问题。

Satesh Sonti 是来自亚特兰大的高级分析专家解决方案架构师,专门研究构建企业数据平台、数据仓库和分析解决方案。他在为全球银行和保险客户构建数据资产和领导复杂数据平台项目方面,拥有超过 16 年的经验。

Urvish Shah 是 Amazon Redshift 的高级数据库工程师。他在数据库、数据仓库和分析领域,拥有十多年的工作经验。工作之余,他喜欢烹饪、旅行以及与女儿共度时光。