什么是资源栈

更新时间:
复制 MD 格式

当一套基础设施包含多个相互依赖的组件,并需要在开发、测试、生产等环境中重复部署时,逐环境维护独立代码容易产生配置差异。资源栈通过统一的组件定义和部署配置管理基础设施,使多个部署实例共享同一套组件结构,同时分别维护参数和状态。

使用场景

资源栈适用于以下场景:

  • 多环境管理:将同一套VPC、ECS、RDS等基础设施部署到开发、测试和生产环境,并为各环境配置不同的地域、规格和网段。

  • 多地域部署:为每个地域定义独立的部署实例,并传入对应的地域参数。

  • 分层架构协作:网络、应用等基础设施由不同团队分别管理,并通过资源栈输出传递VPC ID等数据。

  • 敏感变更审批:根据组件的新增、修改和删除情况设置自动执行条件。不满足条件的变更等待人工确认。

工作原理

资源栈通过以下两份YAML配置文件分离基础设施定义和部署参数:

  • 组件配置(Component,tfcomponent.yaml):定义基础设施组件、组件依赖、Provider、输入变量和输出值。

  • 部署配置(Deployment,tfdeploy.yaml):定义一个或多个部署实例,并为每个实例配置地域、规格、网段等参数。

执行资源栈时,每个部署实例分别执行Terraform Plan并维护独立状态。系统根据审批配置决定自动执行Apply或等待人工确认。在单个部署实例内,Terraform根据组件间的引用和依赖关系处理资源。

功能特性

资源栈提供以下功能:

  • 组件化管理:将网络、数据库、应用服务等基础设施拆分为独立组件,并通过输入和输出建立依赖关系。

  • 多环境部署:通过多个部署实例复用同一套组件配置,并为不同环境配置独立参数和状态。

  • 组件循环创建:根据集合为同一组件创建多个实例,适用于需要重复创建同类基础设施的场景。

  • 条件审批:根据Terraform Plan的变更内容判断是否自动执行Apply。条件不成立时,本次部署等待人工确认。

  • 跨资源栈协作:上游资源栈发布输出,下游资源栈引用这些输出。上游输出变化后,系统会触发存在消费关系的下游资源栈执行Plan。

    说明

    跨账号引用资源栈输出前,由上游资源栈所属账号按照创建和管理资源栈中的“授权其他账号引用资源栈输出”完成账户授权。

  • 参数集引用:引用参数集中管理的应用密码、Token等参数,避免将敏感值直接写入代码。

  • 局部变量:集中定义重复使用的值,减少同一配置在多处重复书写。

重要

不要在参数集中长期保存AccessKey。Terraform访问阿里云资源时,优先使用资源栈RAM角色。

与任务的区别

资源栈和任务的主要区别如下:

对比维度

资源栈

任务

适用场景

多组件或多环境的基础设施部署

一份模板版本和一组部署参数

配置方式

使用组件配置和部署配置两份文件

通过任务配置选择模板版本并设置参数

多环境管理

在同一资源栈中定义多个部署实例

为不同环境分别创建任务

组件编排

管理多个组件及其依赖关系

不提供资源栈级的多组件依赖编排

状态管理

每个部署实例维护独立状态,并在资源栈中统一查看

每个任务维护独立状态

数据协作

支持资源栈之间发布和引用输出

不提供资源栈级的输出消费关系

如果只需使用一份模板和一组参数部署基础设施,使用任务。如果需要管理多个关联组件,或将同一套组件结构部署到多个环境,使用资源栈。

相关文档