使用 AWS CloudFormation 自动创建 Amazon Redshift 集群(二)

阅读数:4 2019 年 12 月 27 日 11:30

使用 AWS CloudFormation 自动创建 Amazon Redshift 集群(二)

最佳实践

这些 CloudFormation 模板构建的架构支持 AWS 高可用性和安全性最佳实践。

VPC CloudFormation 模板可执行以下事项:

  1. 为高可用性和灾难恢复配置三个可用区。它可以在地理上将这些可用区分布在一个区域内,以便在发生自然灾害时实现最佳隔离和稳定性。
  2. 为每个可用区预置一个公有子网和一个私有子网。我建议将公有子网用于面向外部的资源,将私有子网用于内部资源,以减少数据泄露的风险。
  3. 创建并将含默认规则的网络 ACL 关联到私有子网和公有子网。AWS 建议将网络 ACL 用作防火墙,以控制子网级别的入站和出站流量。这些网络 ACL 提供了单独控制,您可以将这些控制自定义为第二层防御。
  4. 为每个私有子网创建并关联单独的路由表,您可以配置这些路由表来控制 VPC 内外的流量。公有子网共享一个路由表,因为它们都使用同一互联网网关作为与互联网通信的唯一路由。
  5. 在三个公有子网中的每个子网中创建 NAT 网关,以实现高可用性。与 NAT 实例相比,NAT 网关在部署、可用性和维护方面具有明显优势。NAT 网关允许私有子网中的实例连接到互联网或其他 AWS 服务,即使它们阻止互联网发起与这些实例的连接。
  6. 创建 Amazon S3 的 VPC 终端节点。在 VPC 的私有子网中运行的 Amazon Redshift 和其他 AWS 资源可以私密连接以访问 S3 存储桶。例如,通过私密、安全且可靠的连接,从 S3 加载数据和从 S3 卸载数据。

Amazon Linux 堡垒主机 CloudFormation 模板可执行以下事项:

  1. 创建分布在 VPC CloudFormation 模板设置的三个公有子网中的 Auto Scaling 组。Auto Scaling 组使 Amazon Linux 堡垒主机可用在其中一个可用区中。
  2. 设置弹性 IP 地址,并将其与 Amazon Linux 堡垒主机关联。弹性 IP 地址更容易记忆,并允许 IP 地址来自本地防火墙。如果您的系统终止了一个实例,而 Auto Scaling 组启动了一个新实例,那么现有的弹性 IP 地址将自动与新实例重新关联。这样您就可以随时使用同一受信任的弹性 IP 地址。
  3. 设置 Amazon EC2 安全组,并与 Amazon Linux 堡垒主机关联。这样您就可以锁定堡垒主机的访问权限,仅允许来自已知 CIDR 范围和端口的入站流量。
  4. 创建 Amazon CloudWatch Logs 日志组来保存 Amazon Linux 堡垒主机的 Shell 历史记录日志,并设置 CloudWatch 指标来跟踪 SSH 命令计数。通过允许您检查何人何时访问堡垒主机,这有助于进行安全审计。
  5. 创建 CloudWatch 警报来监控堡垒主机上的 CPU,并在任何内容触发警报时发送 Amazon SNS 通知。

Amazon Redshift 集群模板可执行以下事项:

  1. 创建跨多个可用区的 Amazon Redshift 集群子网组,以便您可以在不同的可用区创建不同的集群,以便在某个可用区出现故障时最大程度地降低影响。
  2. 配置数据库审计并将审计日志存储到 S3 存储桶中。它还会限制 Amazon Redshift 日志记录服务的访问权限,并将生命周期规则配置为将超过 14 天的日志存档到 Amazon S3 Glacier
  3. 创建具有策略的 IAM 角色,以授予使用 Amazon Redshift Spectrum 所需的最低权限来访问 S3、CloudWatch Logs、 AWS Glue Amazon Athena 。然后,它会将 IAM 角色与 Amazon Redshift 相关联。
  4. 创建 EC2 安全组并将其与 Amazon Redshift 集群关联。这样您就可以将 Amazon Redshift 集群的访问权限锁定到已知的 CIDR 范围和端口。
  5. 使用以下配置创建 Amazon Redshift 集群参数组,并将其与 Amazon Redshift 集群关联。这些参数只提供一般指导。请根据您的需求查看并自定义这些参数。
col 1 col 2 col 3
参数 描述
enable_user_activity_logging TRUE 该参数可启用用户活动日志。有关更多信息,请参阅数据库审计日志记录
require_ssl TRUE 该参数可使 SSL 连接到 Amazon Redshift 集群。
wlm_json_configuration <tt>[ {</tt>

"query_group" : [ ],
"query_group_wild_card" : 0,
"user_group" : [ ],
"user_group_wild_card" : 0,
"concurrency_scaling" : "auto",
"rules" : [ {
"rule_name" : "DiskSpilling",
"predicate" : [ {
"metric_name" : "query_temp_blocks_to_disk",
"operator" : ">",
"value" : 100000
} ],
"action" : "log",
"value" : ""
}, {
"rule_name" : "RowJoining",
"predicate" : [ {
"metric_name" : "join_row_count",
"operator" : ">",
"value" : 1000000000
} ],
"action" : "log",
"value" : ""
} ],
"auto_wlm" : true
}, {
"short_query_queue" : true
} ] | 该参数可使用以下配置创建自定义工作负载管理队列 (WLM):

自动 WLM:Amazon Redshift 根据每个工作负载自动管理查询并发性和内存分配。

启用短查询加速 (SQA):Amazon Redshift 在专用空间中执行短时间运行的查询,这样 SQA 查询就不会被迫在队列中等待较长的查询。

为路由到此 WLM 队列的查询启用并发扩展

创建两条 WLM QMR 规则

当用于写入中间结果的临时磁盘空间超过 100GB 时记录查询。

当联接步骤中处理的行数超过 10 亿行时记录查询。

您还可以根据需要创建不同的规则,并选择不同的操作(中止、跳过或记录)。
max_concurrency_scaling_clusters | 1(或者您选择的值) | 设置启用并发扩展时允许的并发扩展集群最大数量。
auto_analyze | TRUE | 如果值为“true”,Amazon Redshift 将持续监控您的数据库并在后台自动执行分析操作。
statement_timeout | 43200000 | 终止任何用时超过指定毫秒数的语句。statement_timeout 值是指在 Amazon Redshift 终止查询之前,查询可以运行的最长时间。

  1. 根据安全性最佳实践,配置 Amazon Redshift 集群来监听非默认的 Amazon Redshift 端口。
  2. 根据 AWS 安全性最佳实践在私有子网中创建 Amazon Redshift 集群。要访问 Amazon Redshift 集群,请使用 Linux 堡垒主机 CloudFormation 模板设置的 Amazon Linux 堡垒主机。
  3. 除非您针对输入参数 NumberOfNodes 选择 1,否则请创建至少两个节点的集群。AWS 建议每个集群至少使用两个节点进行生产。有关更多信息,请参阅 Amazon Redshift 常见问题的“可用性与持久性”部分。
  4. 通过使用 Amazon Redshift 托管的 KMS 密钥或用户指定的 KMS 密钥,为 Amazon Redshift 集群启用静态加密。要使用用户指定的 KMS 密钥,但您还没有创建该密钥,请先创建一个 KMS 密钥。有关更多信息,请参阅创建 KMS 密钥
  5. 在生产环境下将 Amazon EBS 快照保留期配置为 35 天,在非生产环境下则配置为 8 天。这样您就可以将生产数据库恢复到最近 35 天内的任何时间点,或者将非生产数据库恢复到最近 8 天内的任何时间点。
  6. 当您使用“删除堆栈”选项删除 Amazon Redshift 集群时,它会自动获取 Amazon Redshift 数据库的最终快照。它可以避免因意外删除 CloudFormation 堆栈而导致的数据丢失。
  7. 创建 AWS Glue 数据目录作为 AWS 数据湖的元数据存储。
  8. 针对重要的 CloudWatch 指标(如 PercentageDiskSpaceUsed 和 Amazon Redshift 集群的 CPUUtilization)配置 CloudWatch 警报,并在以下任一情况触发警报时发送 SNS 通知。
  9. 提供通过之前拍摄的快照恢复 Amazon Redshift 集群的选项。
  10. 常见的标签附加到 Amazon Redshift 集群和其他资源。AWS 建议为云基础设施资源分配标签,以管理资源访问控制、成本跟踪、自动化和组织。

先决条件

在设置 CloudFormation 堆栈之前,请注意以下先决条件。

  1. 您必须拥有 AWS 账户和拥有足够权限的 IAM 用户,才能与 AWS 管理控制台和前面的架构概述部分中列出的服务进行交互。您的 IAM 权限还必须包括创建由 AWS CloudFormation 模板创建的 IAM 角色和策略的权限。
  2. VPC CloudFormation 堆栈需要三个可用区来设置公有子网和私有子网。请确保选择具有至少三个可用区的 AWS 区域
  3. 在计划设置 CloudFormation 堆栈的 AWS 区域,在 EC2 控制台中创建 EC2 密钥对。确保您保存了私有密钥,您只能在此时保存。在设置 Amazon Linux 堡垒主机 CloudFormation 堆栈时,可以将该 EC2 密钥对用作输入参数。

使用 AWS CloudFormation 设置资源

我提供的这些 CloudFormation 模板可作为一般指导。请根据您的需求查看并自定义这些参数。如果您继续这些堆栈部署的某些资源,将会产生费用。

设置 VPC、子网和其他网络组件

此 CloudFormation 模板将创建 VPC、子网、路由表、互联网网关、NAT 网关、 Amazon S3 网关终端节点和其他网络组件。按照以下步骤在您的 AWS 账户中创建这些资源。

  1. 登录到 AWS 管理控制台。

  2. 在顶部的导航功能区中,选择要在其中创建堆栈的 AWS 区域,然后选择下一步。此 CloudFormation 堆栈需要三个可用区来设置公有子网和私有子网。请选择具有至少三个可用区的 AWS 区域

  3. 请选择以下“启动堆栈”按钮。此按钮会在您的 AWS 账户中使用模板自动启动 AWS CloudFormation 服务。系统会需要登录时提示您。您可以根据需要从控制台中查看 CloudFormation 模板。使用 AWS CloudFormation 自动创建 Amazon Redshift 集群(二)

  4. CloudFormation 堆栈需要一些参数,如以下屏幕截图所示。

    • 堆栈名称:输入有意义的堆栈名称,例如 rsVPC

    • ClassB 第二个八进制数:指定 VPC IPv4 CIDR 块的第二个八进制数 (10.XXX.0.0/16)。您可以指定介于 0 到 255 之间的任何数字,例如,指定 33 来创建具有 IPv4 CIDR 块 10.33.0.0/16 的 VPC。要详细了解针对 IPv4 的 VPC 和子网大小调整,请参阅针对 IPv4 的 VPC 和子网大小调整

      使用 AWS CloudFormation 自动创建 Amazon Redshift 集群(二)

      图 2:CloudFormation 控制台中的 VPC 堆栈

  5. 输入所有参数值后,请选择下一步

  6. 在下一个屏幕上,输入所需的任何标签、IAM 角色或任何高级选项,然后选择下一步

  7. 在最后一个屏幕上查看详细信息,并选择创建

创建堆栈需要几分钟的时间。参阅 AWS CloudFormation 资源部分,查看该堆栈设置的不同组件的物理 ID。

然后,您必须设置 Amazon Linux 堡垒主机,以便用于登录 Amazon Redshift 集群。

本文转载自 AWS 技术博客。

原文链接: https://amazonaws-china.com/cn/blogs/china/automate-amazon-redshift-cluster-creation-using-aws-cloudformation/

欲了解 AWS 的更多信息,请访问【AWS 技术专区】

评论

发布