创建和管理资源栈

更新时间:
复制 MD 格式

当同一套基础设施需要部署到多个环境、地域或账号时,可以使用资源栈统一管理组件配置、部署参数和Terraform状态。本文说明如何准备执行权限、创建模板和资源栈、审批部署,以及更新或删除资源栈。

准备资源栈代码和执行角色

创建资源栈前,完成以下准备工作:

  • 准备资源栈代码。

    • 资源栈工作目录中必须同时包含tfcomponent.yamltfdeploy.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、ApplyDestroy。按照最小权限原则配置角色权限,不要在资源栈配置文件中保存AccessKey。

创建模板并发布版本

模板用于保存资源栈配置文件和Terraform模块文件。资源栈只能读取已经发布的模板版本。

  1. 登录自动化服务台

  2. 在左侧导航栏选择模板 > 模板管理

  3. 单击新建模板,然后选择文件上传

  4. 配置模板。

    配置项

    是否必填

    说明

    模板名称

    输入当前账号下唯一的模板名称。

    模板描述

    说明模板的用途。

    待上传文件

    上传包含资源栈配置文件和Terraform模块文件的ZIP包。

    标签

    添加用于分类和筛选模板的标签。

  5. 单击提交。创建完成后,模板处于草稿状态。

  6. 在模板详情页单击发布新版本,输入版本名称和描述,然后单击确定

发布后,系统生成不可变的模板版本。后续修改草稿不会影响已经发布的版本。要使修改后的代码可供资源栈使用,需要发布新版本。

创建资源栈

创建资源栈时,系统读取所选模板的最新发布版本,并根据tfdeploy.yaml中的Deployment配置创建部署实例。每个部署实例分别维护Terraform任务和状态。

  1. 在左侧导航栏选择资源栈,然后单击创建资源栈

  2. 选择配置步骤中配置资源栈。

    配置项

    是否必填

    说明

    资源栈名称

    输入当前账号下唯一的名称。名称长度为2~128个字符,可包含字母、数字、中文、短横线(-)、下划线(_)和半角句号(.),首尾不能是特殊字符。

    描述

    说明资源栈的用途。

    选择模板

    选择已发布的模板。控制台自动使用该模板的最新发布版本。

    工作目录

    输入配置文件在ZIP包中的目录。配置文件位于根目录时输入/;位于子目录时输入类似stacks/network/的路径。

    RAM角色

    选择前面创建的资源栈执行角色。

  3. 单击下一步。如果tfdeploy.yaml需要引用参数集,在关联参数步骤中选择对应的参数集。

    关联参数集只建立资源栈与参数集之间的引用关系,不会自动注入参数集中的全部参数。需要在tfdeploy.yaml中使用store配置声明参数集,并在deployment.inputs配置中显式引用需要传入组件的参数。

    重要

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

  4. 单击下一步,检查资源栈配置和关联的参数集。

  5. 单击创建

创建成功后,系统自动触发首次部署,并为每个部署实例执行Terraform Plan。无需再次单击获取最新配置并部署

说明

如果首次部署提示参数集尚未关联,等待关联操作完成,然后在资源栈详情页的配置页签中单击获取最新配置并部署

审批并执行部署

Plan完成后的行为由tfdeploy.yaml中的审批配置决定:

  • 未配置自动审批,或者自动审批条件不满足时,部署实例等待人工确认。

  • 配置了自动审批且全部条件满足时,系统自动执行Apply,不等待人工确认。

警告

Apply可能创建、修改或删除云资源,并按照相应云产品的计费规则产生费用。配置自动审批前,确认审批条件能够拦截高风险变更。

对于等待人工确认的部署实例,执行以下操作:

  1. 进入资源栈详情页,单击部署详情页签。

  2. 选择目标部署实例,查看Terraform Plan结果和资源变更明细。

  3. 根据变更内容选择操作:

    • 单击确认并执行:执行Apply,创建、修改或删除计划中的云资源。

    • 单击放弃执行:终止本次变更,不修改已有云资源。

每个部署实例独立执行。某个部署实例失败不会自动回滚已经成功的其他部署实例,但资源栈整体状态可能显示为部署失败。

如果启用了合规预检,系统会在Plan完成后检查资源配置。预检失败时,根据部署日志修复不合规配置,然后重新触发部署。

查看执行结果

在资源栈详情页的以下位置查看执行结果:

  • 概览页签:查看资源栈的最新配置版本、部署状态和更新时间。

  • 配置页签:查看各配置版本中的组件配置和部署配置。

  • 部署历史页签:按配置版本和部署实例查看历史执行记录。

  • 部署详情页签:查看部署实例的输入参数、资源变更和执行日志。

资源栈常见状态如下:

  • 创建中:系统正在创建资源栈。

  • 等待部署中:资源栈已经创建,等待启动部署。

  • 部署中:至少一个部署实例正在执行。

  • 部署完成:全部部署实例执行成功。

  • 部署失败:至少一个部署实例执行异常。查看部署详情定位原因。

  • 删除中:系统正在销毁关联资源或删除资源栈数据。

  • 删除失败:部分资源未能销毁或资源栈数据未能删除。

说明

PlannedConfigProactiveSuccessAppliedDiscarded等值属于部署实例的作业状态,不是资源栈整体状态。

更新资源栈

资源栈支持更新基本信息、执行身份、参数集和代码配置。不同配置项的更新行为不同。

更新基本信息和执行配置

  1. 在资源栈列表中找到目标资源栈,单击操作列的更新

  2. 修改需要更新的配置,然后提交。

更新行为如下:

  • 修改资源栈名称、描述、RAM角色或关联参数集,不会立即触发部署。

  • 修改工作目录或OSS来源路径后,系统重新读取配置并触发部署。

  • 修改RAM角色后,后续Plan、ApplyDestroy使用新角色执行。

获取最新配置并部署

模板发布新版本后,资源栈不会自动使用该版本。使用获取最新配置并部署功能获取模板的最新发布版本,并基于新配置发起部署。

  1. 修改模板中的资源栈配置文件或Terraform模块文件。

  2. 在模板详情页发布新版本。

  3. 进入资源栈详情页,单击配置页签。

  4. 单击获取最新配置并部署

  5. 查看各部署实例的Plan结果。

系统获取最新发布的模板版本后,为各部署实例生成Plan。后续是否自动执行Apply取决于tfdeploy.yaml中的审批配置。对于等待人工确认的部署实例,检查Plan结果后单击确认并执行

重要

控制台仅支持获取模板的最新发布版本。要部署指定的历史代码版本,使用资源栈触发OpenAPI,并通过codeVersionId参数指定模板版本。执行前必须检查Plan结果。历史代码版本不保证能够直接恢复云资源状态。

删除资源栈

删除资源栈前,确定是保留云资源还是同时销毁云资源。删除期间不能更新或重新部署资源栈。

警告

勾选清理关联资源后,系统执行Terraform Destroy,可能永久删除云资源和业务数据。执行前备份重要数据,并确认RAM角色具有删除相关资源的权限。

  1. 在资源栈列表中找到目标资源栈,单击操作列的删除

  2. 输入资源栈ID,确认删除目标。

  3. 根据需要设置清理关联资源

    • 不勾选:仅删除资源栈管理数据。云资源继续保留并可能继续产生费用,但不再由该资源栈管理。

    • 勾选:系统先对每个部署实例执行Destroy。全部关联资源清理完成后,再删除资源栈管理数据。

  4. 单击确定

如果Destroy后仍有资源残留,资源栈进入删除失败状态。进入部署详情页签,检查权限不足、资源依赖或资源已经被外部修改等问题,修复后重新删除。

授权其他账号引用资源栈输出

如果下游资源栈与上游资源栈属于不同的阿里云账号,需要由上游资源栈所属账号将下游账号添加为授权账号。

  1. 使用上游资源栈所属账号登录自动化服务台。

  2. 在左侧导航栏选择资源栈,单击上游资源栈名称。

  3. 在概览页的基本信息区域,找到“账户授权”,然后单击“编辑”。

  4. 在“授权账号 ID”中输入下游阿里云账号 UID。输入多个 UID 时,每输入一个 UID 后按回车键,也可以使用逗号分隔。

  5. 单击“账户授权”。

授权成功后,“账户授权”字段显示“已授权”。下游账号可以在tfdeploy.yaml中通过upstream_input引用该资源栈使用publish_output发布的输出。

如需取消授权,在“账户授权”中单击“编辑”,删除对应的账号 UID。取消授权后,系统会解除相应的资源栈输出消费关系;下游资源栈后续解析跨账号引用时将无法通过授权校验。

常见问题

触发部署后会立即变更云资源吗?

不一定。系统先执行Plan。未配置自动审批或审批条件不满足时,需要人工确认后才会执行Apply;自动审批条件全部满足时,系统会自动执行Apply。

如何部署之前的模板版本?

控制台只能获取模板的最新发布版本。使用资源栈触发OpenAPI,并通过codeVersionId参数指定历史模板版本。执行Apply前检查Plan结果,确认旧版本配置不会覆盖需要保留的变更。

部分部署实例执行失败怎么办?

部署详情页签查看失败实例的执行日志。检查RAM角色权限、资源配额和配置参数,修复后重新触发部署。已经成功的其他部署实例不会自动回滚。