创建和管理资源栈
当同一套基础设施需要部署到多个环境、地域或账号时,可以使用资源栈统一管理组件配置、部署参数和Terraform状态。本文说明如何准备执行权限、创建模板和资源栈、审批部署,以及更新或删除资源栈。
准备资源栈代码和执行角色
创建资源栈前,完成以下准备工作:
准备资源栈代码。
资源栈工作目录中必须同时包含
tfcomponent.yaml和tfdeploy.yaml。配置文件引用的本地Terraform模块可以位于代码中的其他目录,但component.source配置的相对路径必须能够访问对应模块。如果通过文件上传创建模板,或者直接使用 OSS 作为资源栈配置来源,需要将相关文件打包为 ZIP 文件。
创建用于执行资源栈的RAM角色,并完成以下授权配置。
配置RAM角色的信任策略,允许自动化服务台扮演该角色。中国站和国际站均使用服务主体
iac.aliyuncs.com。为RAM角色授予配置文件所涉及云资源的操作权限。例如,配置文件需要创建VPC时,应授予该角色创建和管理VPC资源所需的权限。
如果使用RAM用户创建资源栈,需要为该RAM用户授予
ram:PassRole权限,使其能够将所选RAM角色传递给自动化服务台。
RAM角色的信任策略示例如下:
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Principal": {
"Service": [
"iac.aliyuncs.com"
]
}
}
]
}资源栈使用关联的RAM角色执行Plan、Apply和Destroy。按照最小权限原则配置角色权限,不要在资源栈配置文件中保存AccessKey。
创建模板并发布版本
模板用于保存资源栈配置文件和Terraform模块文件。资源栈只能读取已经发布的模板版本。
登录自动化服务台。
单击新建模板,然后选择文件上传。
配置模板。
配置项
是否必填
说明
模板名称
是
输入当前账号下唯一的模板名称。
模板描述
否
说明模板的用途。
待上传文件
是
上传包含资源栈配置文件和Terraform模块文件的ZIP包。
标签
否
添加用于分类和筛选模板的标签。
单击提交。创建完成后,模板处于草稿状态。
在模板详情页单击发布新版本,输入版本名称和描述,然后单击确定。
发布后,系统生成不可变的模板版本。后续修改草稿不会影响已经发布的版本。要使修改后的代码可供资源栈使用,需要发布新版本。
创建资源栈
创建资源栈时,系统读取所选模板的最新发布版本,并根据tfdeploy.yaml中的Deployment配置创建部署实例。每个部署实例分别维护Terraform任务和状态。
在选择配置步骤中配置资源栈。
配置项
是否必填
说明
资源栈名称
是
输入当前账号下唯一的名称。名称长度为2~128个字符,可包含字母、数字、中文、短横线(-)、下划线(_)和半角句号(.),首尾不能是特殊字符。
描述
否
说明资源栈的用途。
选择模板
是
选择已发布的模板。控制台自动使用该模板的最新发布版本。
工作目录
是
输入配置文件在ZIP包中的目录。配置文件位于根目录时输入
/;位于子目录时输入类似stacks/network/的路径。RAM角色
是
选择前面创建的资源栈执行角色。
单击下一步。如果
tfdeploy.yaml需要引用参数集,在关联参数步骤中选择对应的参数集。关联参数集只建立资源栈与参数集之间的引用关系,不会自动注入参数集中的全部参数。需要在
tfdeploy.yaml中使用store配置声明参数集,并在deployment.inputs配置中显式引用需要传入组件的参数。重要不要在参数集中长期保存AccessKey。Terraform访问阿里云资源时,优先使用资源栈关联的RAM角色。
单击下一步,检查资源栈配置和关联的参数集。
单击创建。
创建成功后,系统自动触发首次部署,并为每个部署实例执行Terraform Plan。无需再次单击获取最新配置并部署。
如果首次部署提示参数集尚未关联,等待关联操作完成,然后在资源栈详情页的配置页签中单击获取最新配置并部署。
审批并执行部署
Plan完成后的行为由tfdeploy.yaml中的审批配置决定:
未配置自动审批,或者自动审批条件不满足时,部署实例等待人工确认。
配置了自动审批且全部条件满足时,系统自动执行Apply,不等待人工确认。
Apply可能创建、修改或删除云资源,并按照相应云产品的计费规则产生费用。配置自动审批前,确认审批条件能够拦截高风险变更。
对于等待人工确认的部署实例,执行以下操作:
进入资源栈详情页,单击部署详情页签。
选择目标部署实例,查看Terraform Plan结果和资源变更明细。
根据变更内容选择操作:
单击确认并执行:执行Apply,创建、修改或删除计划中的云资源。
单击放弃执行:终止本次变更,不修改已有云资源。
每个部署实例独立执行。某个部署实例失败不会自动回滚已经成功的其他部署实例,但资源栈整体状态可能显示为部署失败。
如果启用了合规预检,系统会在Plan完成后检查资源配置。预检失败时,根据部署日志修复不合规配置,然后重新触发部署。
查看执行结果
在资源栈详情页的以下位置查看执行结果:
概览页签:查看资源栈的最新配置版本、部署状态和更新时间。
配置页签:查看各配置版本中的组件配置和部署配置。
部署历史页签:按配置版本和部署实例查看历史执行记录。
部署详情页签:查看部署实例的输入参数、资源变更和执行日志。
资源栈常见状态如下:
创建中:系统正在创建资源栈。
等待部署中:资源栈已经创建,等待启动部署。
部署中:至少一个部署实例正在执行。
部署完成:全部部署实例执行成功。
部署失败:至少一个部署实例执行异常。查看部署详情定位原因。
删除中:系统正在销毁关联资源或删除资源栈数据。
删除失败:部分资源未能销毁或资源栈数据未能删除。
Planned、ConfigProactiveSuccess、Applied和Discarded等值属于部署实例的作业状态,不是资源栈整体状态。
更新资源栈
资源栈支持更新基本信息、执行身份、参数集和代码配置。不同配置项的更新行为不同。
更新基本信息和执行配置
在资源栈列表中找到目标资源栈,单击操作列的更新。
修改需要更新的配置,然后提交。
更新行为如下:
修改资源栈名称、描述、RAM角色或关联参数集,不会立即触发部署。
修改工作目录或OSS来源路径后,系统重新读取配置并触发部署。
修改RAM角色后,后续Plan、Apply和Destroy使用新角色执行。
获取最新配置并部署
模板发布新版本后,资源栈不会自动使用该版本。使用获取最新配置并部署功能获取模板的最新发布版本,并基于新配置发起部署。
修改模板中的资源栈配置文件或Terraform模块文件。
在模板详情页发布新版本。
进入资源栈详情页,单击配置页签。
单击获取最新配置并部署。
查看各部署实例的Plan结果。
系统获取最新发布的模板版本后,为各部署实例生成Plan。后续是否自动执行Apply取决于tfdeploy.yaml中的审批配置。对于等待人工确认的部署实例,检查Plan结果后单击确认并执行。
控制台仅支持获取模板的最新发布版本。要部署指定的历史代码版本,使用资源栈触发OpenAPI,并通过codeVersionId参数指定模板版本。执行前必须检查Plan结果。历史代码版本不保证能够直接恢复云资源状态。
删除资源栈
删除资源栈前,确定是保留云资源还是同时销毁云资源。删除期间不能更新或重新部署资源栈。
勾选清理关联资源后,系统执行Terraform Destroy,可能永久删除云资源和业务数据。执行前备份重要数据,并确认RAM角色具有删除相关资源的权限。
在资源栈列表中找到目标资源栈,单击操作列的删除。
输入资源栈ID,确认删除目标。
根据需要设置清理关联资源:
不勾选:仅删除资源栈管理数据。云资源继续保留并可能继续产生费用,但不再由该资源栈管理。
勾选:系统先对每个部署实例执行Destroy。全部关联资源清理完成后,再删除资源栈管理数据。
单击确定。
如果Destroy后仍有资源残留,资源栈进入删除失败状态。进入部署详情页签,检查权限不足、资源依赖或资源已经被外部修改等问题,修复后重新删除。
授权其他账号引用资源栈输出
如果下游资源栈与上游资源栈属于不同的阿里云账号,需要由上游资源栈所属账号将下游账号添加为授权账号。
使用上游资源栈所属账号登录自动化服务台。
在左侧导航栏选择资源栈,单击上游资源栈名称。
在概览页的基本信息区域,找到“账户授权”,然后单击“编辑”。
在“授权账号 ID”中输入下游阿里云账号 UID。输入多个 UID 时,每输入一个 UID 后按回车键,也可以使用逗号分隔。
单击“账户授权”。
授权成功后,“账户授权”字段显示“已授权”。下游账号可以在tfdeploy.yaml中通过upstream_input引用该资源栈使用publish_output发布的输出。
如需取消授权,在“账户授权”中单击“编辑”,删除对应的账号 UID。取消授权后,系统会解除相应的资源栈输出消费关系;下游资源栈后续解析跨账号引用时将无法通过授权校验。