本篇文章介绍了如何使用 Terraform 管理 Amazon Redshift 列表,涵盖了创建和调度常见操作如暂停、恢复和调整大小的步骤,同时结合相关 AWS 服务以提升效率。
是一个快速、可扩展、安全且完全管理的云数据仓库,使使用标准 SQL以及现有的提取、转换和加载(ETL)、商业智能(BI)和报告工具对所有数据进行分析变得简单且经济。数以万计的客户使用 Amazon Redshift每天处理数 Exabyte 的数据,并支持商业智能、预测分析和实时流分析等分析工作负载。
是一款基础设施作为代码(IaC)工具,让你可以通过人类可读的配置文件定义云资源,这些文件是可以版本控制、重用和共享的。然后,你可以使用一致的工作流在整个生命周期中管理和配置你的基础设施。
在本文中,我们将展示如何使用 Terraform 来管理常见的 Redshift 集群操作,包括:
下图说明了使用 Terraform 配置 Redshift 集群的解决方案架构。
删除)
除了 Amazon Redshift,解决方案还使用了以下 AWS 服务:
在本文中,我们将展示如何设置连接 AWS 和 Terraform 的环境。以下是涉及的高层任务:
完成本文中描述的操作,您需要一个 AWS ,并在该账户中具有管理员权限,以便使用关键 AWS服务并创建必要的 IAM 角色。
我们从创建一个 EC2 实例开始。请按照以下步骤创建 Windows OS 的 EC2 实例:
使用以下步骤在 Windows EC2 实例上安装 Terraform:
您需要更新环境变量,以指向 Terraform 可执行文件所在的目录。
删除)
删除)
C:\ 目录中。(AWS CLI)执行操作。请完成以下步骤:
。
2. 启动 AWS CLI 并运行 aws configure,并输入访问密钥 ID、密钥和默认 AWS 区域。
这样可以防止 AWS 用户名和密码在 Terraform 代码中以明文显示,防止在将代码提交到代码库时意外共享。
创建的管理员角色不同)需要在代码中调用。为此,我们使用 SecretsManager 安全存储用户名和密码。我们将在 Terraform 中编写代码以在集群创建操作期间访问这些凭证。完成以下步骤:
删除)
删除)
完成以下步骤来设置 Terraform:
现在,我们准备开始编写代码,从定义提供者开始。提供者定义是 Terraform 获取与 AWS 交互所需的 API 的方式。
version = "5.53.0" } } }
# 配置 AWS 提供者
provider "aws" { region = "us-east-1" } ```
1. 访问 Amazon Redshift 管理员用户的访问凭证:
```hcl data "aws_secretsmanager_secret_version" "creds" { # 填写您为秘密给予的名称
secret_id = "terraform-creds" }
/_json 解码以解析秘密_ / locals { terraform-creds = jsondecode(
data.aws_secretsmanager_secret_version.creds.secret_string ) } ```
## 创建 Redshift 集群
要创建 Redshift 集群,请使用 `aws_redshift_cluster` 资源:
```hcl
# 创建加密的 Amazon Redshift 集群
resource "aws_redshift_cluster" "dw_cluster" { cluster_identifier = "tf-
example-redshift-cluster" database_name = "dev" master_username =
local.terraform-creds.username master_password = local.terraform-
creds.password node_type = "ra3.xlplus" cluster_type = "multi-node"
publicly_accessible = false number_of_nodes = 2 encrypted = true kms_key_id =
local.RedshiftClusterEncryptionKeySecret.arn enhanced_vpc_routing = truecluster_subnet_group_name = "<>" } ```
在这个示例中,我们创建了一个名为 `tf-example-redshift-cluster` 的 Redshift 集群,使用 ra3.xlplus节点类型的 2 节点集群。我们使用来自 Secrets Manager 的凭证和 jsondecode访问这些值。这确保了用户名和密码不会以纯文本形式传递。
## 向集群添加 IAM 角色
因为我们在创建集群期间没有选项来关联 IAM 角色,所以我们现在将其添加:
`hcl resource "aws_redshift_cluster_iam_roles" "cluster_iam_role" {
cluster_identifier = aws_redshift_cluster.dw_cluster.cluster_identifieriam_role_arns = ["arn:aws:iam::yourawsaccountId:role/service-
role/yourIAMrolename"] }`
## 启用 Redshift 集群操作
对 Redshift 集群执行诸如调整大小、暂停和恢复等调度操作可以更实际地利用这些操作。因此,我们创建两项策略:一项允许 Amazon Redshift调度服务,另一项允许集群进行暂停、恢复和调整大小操作。然后我们创建一个附加这两项策略的角色。
您可以直接通过控制台执行这些步骤,然后在 Terraform 代码中引用。以下示例演示了创建策略和角色的代码示例,并将策略附加到角色。
1. 创建 Amazon Redshift 调度策略文档并创建假定此策略的角色:
```hcl
# 定义策略文档以建立角色与实体(Redshift 调度程序)之间的信任关系
data "aws_iam_policy_document" "assume_role_scheduling" { statement { effect =
"Allow" principals { type = "Service" identifiers =
["scheduler.redshift.amazonaws.com"] } actions = ["sts:AssumeRole"] } }
# 创建带有上述信任关系的角色,以便它可以调用 Redshift 调度服务
resource "aws_iam_role" "scheduling_role" { name =
"redshift_scheduled_action_role" assume_role_policy =
data.aws_iam_policy_document.assume_role_scheduling.json } ```
1. 创建 Amazon Redshift 操作的策略文档和策略:
```hcl /_定义其他 Redshift 操作的策略文档_ /
data "aws_iam_policy_document" "redshift_operations_policy_definition" {
statement { effect = "Allow" actions = [ "redshift:PauseCluster",
"redshift:ResumeCluster", "redshift:ResizeCluster", ] resources =
["arn:aws:redshift:_:youraccountid:cluster:_ "] } }
/_创建策略并将上述数据(json)添加到策略中_ / resource "aws_iam_policy"
"scheduling_actions_policy" { name = "redshift_scheduled_action_policy" policy
= data.aws_iam_policy_document.redshift_operations_policy_definition.json }
hcl /*连接策略和角色*/ resource "aws_iam_role_policy_attachment" "role_policy_attach" { policy_arn = aws_iam_policy.scheduling_actions_policy.arn role = aws_iam_role.scheduling_role.name }
# 暂停集群
resource "aws_redshift_scheduled_action" "pause_operation" { name = "tf-
redshift-scheduled-action-pause" schedule = "cron(00 22 * * ? *)" iam_role =
aws_iam_role.scheduling_role.arn target_action { pause_cluster {
cluster_identifier = aws_redshift_cluster.dw_cluster.cluster_identifier } } }
在上面的示例中,我们创建了一个名为 tf-redshift-scheduled-action-pause 的调度操作,该操作将于每天晚上 10:00暂停集群,以节约成本。
"tf-redshift-scheduled-action-resume" schedule = "cron(15 07 * * ? *)"
iam_role = aws_iam_role.scheduling_role.arn target_action { resume_cluster {
cluster_identifier
Leave a Reply