产品展示

使用 Terraform 管理 Amazon Redshift 预配置集群 大数据博客

2026-01-27 13:05:18
8次

使用 Terraform 管理 Amazon Redshift 列表

关键要点

本篇文章介绍了如何使用 Terraform 管理 Amazon Redshift 列表,涵盖了创建和调度常见操作如暂停、恢复和调整大小的步骤,同时结合相关 AWS 服务以提升效率。

Amazon Redshift 是一个快速、可扩展、安全且完全管理的云数据仓库,使使用标准 SQL 以及现有的提取、转换和加载ETL、商业智能BI和报告工具对所有数据进行分析变得简单且经济。数以万计的客户使用 Amazon Redshift 每天处理数 Exabyte 的数据,并支持商业智能、预测分析和实时流分析等分析工作负载。

HashiCorp Terraform 是一款基础设施作为代码IaC工具,让你可以通过人类可读的配置文件定义云资源,这些文件是可以版本控制、重用和共享的。然后,你可以使用一致的工作流在整个生命周期中管理和配置你的基础设施。

在本文中,我们将展示如何使用 Terraform 来管理常见的 Redshift 集群操作,包括:

使用 Terraform 代码创建新的 Amazon Redshift 预配集群,并为其添加一个 AWS 身份与访问管理IAM角色。调度 Redshift 集群的暂停、恢复和调整大小操作。

解决方案概述

下图说明了使用 Terraform 配置 Redshift 集群的解决方案架构。

除了 Amazon Redshift,解决方案还使用了以下 AWS 服务:

Amazon Elastic Compute CloudAmazon EC2提供最广泛和深度的计算平台,拥有超过 750 种实例和最新处理器、存储、网络、操作系统OS和购买模型的选择,帮助您最佳匹配工作负载的需求。在此文中,我们使用的是 m5xlarge 实例和 Windows Server 2022 数据中心版。实例类型和 Windows OS 的选择是灵活的,您可以选择适合您用例的配置。IAM 允许您安全地管理身份及 AWS 服务和资源的访问。我们使用 IAM 角色和策略安全地访问服务并执行相关操作。IAM 角色是一个 AWS 身份,您可以假定该身份以获得对 AWS 服务和资源的临时访问。每个 IAM 角色具有由 IAM 策略定义的一组权限,这些策略决定了该角色可以访问的操作和资源。AWS Secrets Manager 允许您安全地存储登录 Amazon Redshift 所需的用户名和密码。

在本文中,我们将展示如何设置连接 AWS 和 Terraform 的环境。以下是涉及的高层任务:

在 AWS 中设置具有 Windows OS 的 EC2 实例。在实例上安装 Terraform。配置您的环境变量Windows OS。定义一个 IAM 策略,以获得最低访问权限以在 Redshift 集群上执行操作,包括暂停、恢复和调整大小。建立一个 IAM 角色,使用您创建的策略。使用 Terraform 代码创建一个预配的 Redshift 集群。将您创建的 IAM 角色附加到 Redshift 集群。编写 Terraform 代码以调度集群操作,如暂停、恢复和调整大小。

前提条件

完成本文中描述的操作,您需要一个 AWS 账户,并在该账户中具有管理员权限,以便使用关键 AWS 服务并创建必要的 IAM 角色。

创建 EC2 实例

我们从创建一个 EC2 实例开始。请按照以下步骤创建 Windows OS 的 EC2 实例:

在 Amazon EC2 控制台中,选择 启动实例。选择适合您需求的 Windows Server Amazon Machine Image (AMI)。根据您的用例选择适当的实例类型。配置实例详细信息:选择要启动实例的 VPC 和子网。启用 自动分配公共 IP。对于 添加存储,配置您的实例所需的存储选项。为实例添加任何必要的标签。对于 配置安全组,选择或创建允许必要入站和出站流量的安全组。审核实例配置并选择 启动,以开始创建实例的过程。在 选择现有密钥对或创建新的密钥对 时,选择现有密钥对或创建新密钥对。选择 启动实例。当实例运行时,您可以使用远程桌面协议RDP和从 获取 Windows 密码 中获取的管理员密码连接到实例。

在 EC2 实例上安装 Terraform

使用以下步骤在 Windows EC2 实例上安装 Terraform:

登录您创建的 EC2 实例。安装 Terraform。

您需要更新环境变量,以指向 Terraform 可执行文件所在的目录。

在 系统属性 中,选择 高级 选项卡,然后选择 环境变量。

选择路径变量。

选择 新建 并输入 Terraform 的安装路径。对于本篇文章,其路径在 C 目录中。

输入以下命令以确认 Terraform 是否已成功安装:

bashterraform v

可选:您可以使用 Visual Studio CodeVS Code等编辑器,并为其添加 Terraform 扩展。

创建用于通过代码访问 AWS 的用户AWS CLI 和 Terraform

接下来,我们需要在 IAM 中创建一个管理员用户,用于通过 Terraform 和 AWS 命令行界面AWS CLI执行操作。请完成以下步骤:

创建一个新的 IAM 用户。在 IAM 控制台上,下载并保存访问密钥和用户密钥。

安装 AWS CLI。启动 AWS CLI 并运行 aws configure,并输入访问密钥 ID、密钥和默认 AWS 区域。

这样可以防止 AWS 用户名和密码在 Terraform 代码中以明文显示,防止在将代码提交到代码库时意外共享。

创建用于通过代码访问 Redshift 的用户Terraform

因为我们正在创建一个 Redshift 集群并执行后续操作,因此这些过程所需的管理员用户名和密码与之前为登录 AWS 管理控制台 创建的管理员角色不同需要在代码中调用。为此,我们使用 Secrets Manager 安全存储用户名和密码。我们将在 Terraform 中编写代码以在集群创建操作期间访问这些凭证。完成以下步骤:

在 Secrets Manager 控制台上,选择导航窗格中的 Secrets。选择 存储新秘密。

对于 秘密类型,选择 Amazon Redshift 数据仓库的凭证。输入您的凭证。

设置 Terraform

完成以下步骤来设置 Terraform:

创建一个文件夹以存储所有 Terraform 代码。打开 VS Code 编辑器并浏览到您的文件夹。选择 新建文件,并输入一个以 tf 结尾的文件名。

现在,我们准备开始编写代码,从定义提供者开始。提供者定义是 Terraform 获取与 AWS 交互所需的 API 的方式。

配置 Terraform 的提供者:

hclterraform { requiredproviders { aws = { source = hashicorp/aws version = 5530 } }}

配置 AWS 提供者

provider aws { region = useast1}

访问 Amazon Redshift 管理员用户的访问凭证:

hcldata awssecretsmanagersecretversion creds { # 填写您为秘密给予的名称 secretid = terraformcreds}

/json 解码以解析秘密/locals { terraformcreds = jsondecode( dataawssecretsmanagersecretversioncredssecretstring )}

创建 Redshift 集群

要创建 Redshift 集群,请使用 awsredshiftcluster 资源:

hcl

创建加密的 Amazon Redshift 集群

resource awsredshiftcluster dwcluster { clusteridentifier = tfexampleredshiftcluster databasename = dev masterusername = localterraformcredsusername masterpassword = localterraformcredspassword nodetype = ra3xlplus clustertype = multinode publiclyaccessible = false numberofnodes = 2 encrypted = true kmskeyid = localRedshiftClusterEncryptionKeySecretarn enhancedvpcrouting = true clustersubnetgroupname = ltgt}

在这个示例中,我们创建了一个名为 tfexampleredshiftcluster 的 Redshift 集群,使用 ra3xlplus 节点类型的 2 节点集群。我们使用来自 Secrets Manager 的凭证和 jsondecode 访问这些值。这确保了用户名和密码不会以纯文本形式传递。

使用 Terraform 管理 Amazon Redshift 预配置集群 大数据博客

向集群添加 IAM 角色

因为我们在创建集群期间没有选项来关联 IAM 角色,所以我们现在将其添加:

hclresource awsredshiftclusteriamroles clusteriamrole { clusteridentifier = awsredshiftclusterdwclusterclusteridentifier iamrolearns = [arnawsiamyourawsaccountIdrole/servicerole/yourIAMrolename]}

启用 Redshift 集群操作

对 Redshift 集群执行诸如调整大小、暂停和恢复等调度操作可以更实际地利用这些操作。因此,我们创建两项策略:一项允许 Amazon Redshift 调度服务,另一项允许集群进行暂停、恢复和调整大小操作。然后我们创建一个附加这两项策略的角色。

您可以直接通过控制台执行这些步骤,然后在 Terraform 代码中引用。以下示例演示了创建策略和角色的代码示例,并将策略附加到角色。

创建 Amazon Redshift 调度策略文档并创建假定此策略的角色:

hcl

定义策略文档以建立角色与实体Redshift 调度程序之间的信任关系

data awsiampolicydocument assumerolescheduling { statement { effect = Allow principals { type = Service identifiers = [schedulerredshiftamazonawscom] } actions = [stsAssumeRole] }}

创建带有上述信任关系的角色,以便它可以调用 Redshift 调度服务

resource awsiamrole schedulingrole { name = redshiftscheduledactionrole assumerolepolicy = dataawsiampolicydocumentassumeroleschedulingjson}

轻云加速器创建 Amazon Redshift 操作的策略文档和策略:

hcl/定义其他 Redshift 操作的策略文档/

data awsiampolicydocument redshiftoperationspolicydefinition { statement { effect = Allow actions = [ redshiftPauseCluster redshiftResumeCluster redshiftResizeCluster ] resources = [arnawsredshiftyouraccountidcluster] }}

/创建策略并将上述数据json添加到策略中/resource awsiampolicy schedulingactionspolicy { name = redshiftscheduledactionpolicy policy = dataawsiampolicydocumentredshiftoperationspolicydefinitionjson}

将策略附加到 IAM 角色:

hcl/连接策略和角色/resource awsiamrolepolicyattachment rolepolicyattach { policyarn = awsiampolicyschedulingactionspolicyarn role = awsiamroleschedulingrolename}

暂停 Redshift 集群:

hcl

暂停集群

resource awsredshiftscheduledaction pauseoperation { name = tfredshiftscheduledactionpause schedule = cron(00 22 ) iamrole = awsiamroleschedulingrolearn targetaction { pausecluster { clusteridentifier = awsredshiftclusterdwclusterclusteridentifier } }}

在上面的示例中,我们创建了一个名为 tfredshiftscheduledactionpause 的调度操作,该操作将于每天晚上 1000 暂停集群,以节约成本。

恢复 Redshift 集群:

hclresource awsredshiftscheduledaction resumeoperation { name = tfredshiftscheduledactionresume schedule = cron(15 07 ) iamrole = awsiamroleschedulingrolearn targetaction { resumecluster { clusteridentifier

全国咨询热线

13594780017

轻云加速器【官网入口】|轻云加速器

联系电话:13594780017

联系人:李总

邮箱:ascorbic@icloud.com

公司地址:芜湖市闪欲峡谷14号


微信扫一扫

手机官网