如何使用AWS CloudFormation对Redshift集群进行Resize并保留集群名?是否有示例?
通过CloudFormation调整Redshift集群规模且保留原集群名的实现方案
核心实现逻辑
CloudFormation中AWS::Redshift::Cluster资源的ClusterIdentifier(也就是需要保留的原集群名称)是不可变更属性——只要不触发CFN对该资源的删除重建逻辑,直接在原集群上发起resize操作,集群名从始至终都不会变。
很多人操作后出现集群名变更,本质是误改了不可变属性,触发了CFN“删旧集群、建新集群”的替换流程,新集群自然使用新名称,只要规避这类触发点,完全可以不改名完成resize。
具体操作步骤
- 第一步:将现有运行的Redshift集群通过CFN「导入现有资源」能力纳管
- 导入过程中必须严格匹配所有不可变属性的实际值,否则导入会失败:
ClusterIdentifier(即需要保留的原集群名)、DBName(原集群初始化时创建的数据库名)、MasterUsername(原集群的管理员用户名),三类属性的字符串值要完全一致,大小写、空格都不能有偏差。 - 导入时其余可变更属性(比如安全组配置、加密配置、子网组配置)会自动读取现有集群的实际值,不需要手动调整。
- 导入过程中必须严格匹配所有不可变属性的实际值,否则导入会失败:
- 第二步:在纳管后的CFN模板中,仅修改resize对应的目标配置
- 仅调整
NodeType(目标节点类型,比如从dc2.large调整为ra3.xlplus)、NumberOfNodes(目标集群节点数)两类属性,其余所有配置保持和导入的现有集群值完全一致,不做任何改动。
- 仅调整
- 第三步:触发stack更新前,先运行CFN的更新预览,确认Redshift资源的更新类型是原地更新,而非资源替换。
- 特别提醒:如果预览显示Redshift集群的更新动作是「替换」,千万不要确认提交。这个时候检查下模板里的不可变属性,大概率是导入的时候没把原集群的配置带全,导致CFN判断你要新建一个同配置但不同名字的集群。
关键注意事项
- 不要跳过集群纳管步骤直接新建CFN Stack:如果直接写模板新建集群,因为
ClusterIdentifier已经被现有运行集群占用,CFN会抛出资源冲突错误,反而需要手动调整新集群名,丢失原有名称。 - 两类resize流程都不会影响原有集群名:不管是配置满足条件触发的短周期弹性resize,还是不满足条件走的长周期经典resize,整个过程都是在原集群上操作,不会新建实例,因此集群名从始至终保持不变。
- 操作前提前创建手动快照备份,预留足够的维护窗口:经典resize过程集群会处于只读状态,弹性resize也会有几分钟的短暂连接中断,尽量避开业务高峰操作。
- 同一次stack更新中不要夹杂其他非resize的改动(比如修改参数组、关联IAM角色等),避免拉长更新流程,出现问题时增加排查难度。
参考模板片段
以下是最小化配置的resize模板,所有不可变属性和现有集群严格匹配,仅调整目标节点配置:
AWSTemplateFormatVersion: '2010-09-09' Description: Redshift resize template that retains original cluster identifier Resources: ExistingRedshiftCluster: Type: AWS::Redshift::Cluster Properties: # 以下为不可变属性,必须和原集群实际值完全匹配,绝对不能修改 ClusterIdentifier: my-original-redshift-name DBName: original_dev_db MasterUsername: original_admin_user # 以下为resize目标配置,其余配置和原集群保持一致即可 NodeType: ra3.xlplus NumberOfNodes: 4 ClusterSubnetGroupName: original-redshift-subnet-group VpcSecurityGroupIds: - sg-0123456789abcdef PubliclyAccessible: false Encrypted: true MasterUserPassword: !Ref AdminPasswordReference Parameters: AdminPasswordReference: Type: AWS::SSM::Parameter::Value<String> Default: /redshift/admin/password NoEcho: true
内容的提问来源于stack exchange,提问作者João Guilherme Nobre Rittmeyer
相关产品推荐
相关产品推荐

