You need to enable JavaScript to run this app.
文档中心
基础设施管理

基础设施管理

复制全文
下载 pdf
资源栈管理
创建资源栈
复制全文
下载 pdf
创建资源栈
资源栈(Stack)是 Infra Manager 中用于编排和管理云资源的逻辑单元。通过创建资源栈,您可以将 Git 仓库中的 Terraform 模板与火山引擎账号关联,实现一组云资源的自动化部署与生命周期管理。​
准备 Terraform 项目​
  1. 使用资源栈前,请先将本地 Terraform 项目推送至 Git 仓库或者存到 TOS 桶。​
  1. 如需了解 Terraform 项目的编写规范,请参考:Terraform 开发指南。​
  1. 本文示例所用的项目结构与完整代码,详见文末“示例项目代码”章节。​
  1. 您可以通过选择 Github 代码仓库或者存储桶下作为您的模板来源。​
选择模板来源​
Github 代码仓库​
  1. 进入 基础设施管理 控制台,在顶部菜单栏的地域下拉列表,选择所在地域。​
  1. 在资源栈列表页面,单击创建资源栈。​
  1. 如未授权过,点击“前往授权”,此时将跳转创建 CodeConnector 并进行授权,完成后可以在 Github Settings 页点击 Applications 查看应用安装及授权情况。​
​​​
  1. 授权完成后选择代码仓库所属用户。​
  1. 选择用户后选择代码仓库名称。​
  1. 选择仓库后选择目标分支。​
  1. 指定 Terraform 模板文件(.tf)相对于仓库根目录的存放路径,默认为仓库根目录(/)。​
  1. 选择是否开启“自动更新”,开启后对应仓库代码分支有新提交时,将自动触发部署动作。​
  1. 选择 Terraform 或者 OpenTofu 的引擎版本。​
​​​
存储桶​
  1. 将代码存储在 TOS 桶,可以是文件夹或者压缩包。​
  1. 进入 TOS 控制台,进入到模板所在文件目录,复制存储桶URL,有以下三种方式复制:​
  1. 点击“复制路径”,若为压缩包,需要在URL下补齐文件名称。​
  1. 点击操作列下的“详情”,点击 URL 后的“生成并复制预签名链接”即完成复制。​
  1. 点击操作列的“分享”,限制 URL 有效期,完成创建分享。​
​​​
  1. 在 InfraManager 控制台选择模板来源为存储桶,填入上述的 URL​
  1. 指定 Terraform 模板文件(.tf)相对于仓库根目录的存放路径,默认为仓库根目录。​
  1. 选择 Terraform 或者 OpenTofu 的引擎版本。​
​​​
配置资源栈参数​
  1. 填写资源栈名称和描述信息。​
  1. 配置模板参数,模板参数是从 variables.tf 文件中解析。​
​​​
注意:​
  1. 若您通过 terraform.tfvars 或 terraform.tfvars.json 文件管理变量,系统将优先解析并展示这些变量文件中的值;其中标记为 sensitive = true 的参数将以脱敏形式展示。​
  1. Infra Manager 始终以最近一次触发源(Git 提交、控制台或 OpenAPI)传入的变量值为准。因此当启用「自动更新」时,不建议直接在控制台修改变量,避免后续 Git 推送触发的部署覆盖控制台所做的改动。​
配置委托角色​
您可以创建一个可信实体为 Infra Manager 的 IAM 角色,并按照"最小权限原则"为其授予 Terraform 模板中所涉及资源的操作权限。指定委托角色后,Infra Manager 将使用该角色而非您的个人身份执行部署。这样可以避免因个人权限变更、临时凭证过期等原因导致部署失败,并保障定时触发、Git 自动触发等无人值守场景下的部署任务连续可靠。​
  1. 首先前往访问控制创建角色,选择信任身份为服务。​
  1. 选择服务“基础设施管理器(IaC工作台)”,角色的授信策略如下:​
​
{​
"Statement": [​
{​
"Effect": "Allow",​
"Action": [​
"sts:AssumeRole"​
],​
"Principal": {​
"Service": [​
"inframanager"​
]​
}​
}​
]​
}​
​
  1. 授信完成后为角色授予实际编排资源所需的权限,注意使用 cc 版本的 Terraform 除了服务相关操作权限如 VPCFullAccess 外,还需授予 CloudControl 服务权限如 CloudControlFullAccess,更多 Terraform 授权管理参考:Terraform 权限管理​
  1. 配置完成后即可在 Infra Manager 控制台选择该角色。​
资源栈部署配置​
支持以下高级部署配置项:​
  1. 失败回滚:开启后,若本次部署失败,系统会自动尝试删除新建资源或将变更回滚至上一稳定状态。注意,受部分云产品能力限制,回滚遵循尽量原则,不保证 100% 还原;若回滚失败,会在日志事件中提示。​
  1. 删除保护:开启后,将禁止通过控制台或 OpenAPI 删除该资源栈,避免误操作;如需删除,请先关闭此开关。​
  1. 超时时间:默认 60 分钟,可配置范围 10–720 分钟。若资源在指定时间内未完成创建或更新,系统将自动终止本次部署任务。​
确认并执行部署​
  1. 确认配置信息无误。​
  1. 点击直接部署资源栈,此时将立即开通资源栈内所有资源,且会依据开通资源产生相关费用。​
  1. 若暂不部署,可单击保存将当前配置保存为草稿,后续可再编辑或部署。​
查看部署结果​
  1. 资源栈部署状态为部署成功。​
​​​
  1. 事件展示部署操作成功。​
​​​
  1. 资源页展示已创建出来的资源,也可前往产品控制台查看资源详情。​
​​​
示例项目代码​
  1. 项目文件目录​
​
easy-net/​
├── provider.tf # 声明 Terraform 与 Provider(来源、认证、region)​
├── variables.tf # 声明输入变量(VPC / Subnet / 标签等可配置项)​
├── main.tf # 核心资源定义(VPC、Subnet)​
├── outputs.tf # 声明输出变量(资源创建后导出的属性)​
​
  1. provider.tf 文件代码,声明使用的 Provider 及其来源,并配置 region​
​
terraform {​
required_providers {​
volcenginecc = {​
source = "volcengine/volcenginecc"​
}​
}​
}​
​
provider "volcenginecc" {​
region = var.region​
}​
​
  1. variables.tf,声明所有可配置的输入变量,均带默认值。​
​
variable "region" {​
description = "Volcengine region"​
type = string​
default = "cn-beijing"​
}​
​
variable "vpc_name" {​
description = "Name of the VPC"​
type = string​
default = "vpc-demo"​
}​
​
variable "vpc_description" {​
description = "Description of the VPC"​
type = string​
default = "VPC created by Terraform"​
}​
​
variable "vpc_cidr_block" {​
description = "CIDR block of the VPC"​
type = string​
default = "192.168.0.0/16"​
}​
​
variable "subnet_name" {​
description = "Name of the subnet"​
type = string​
default = "subnet-demo"​
}​
​
variable "subnet_description" {​
description = "Description of the subnet"​
type = string​
default = "Subnet created by Terraform"​
}​
​
variable "subnet_cidr_block" {​
description = "CIDR block of the subnet"​
type = string​
default = "192.168.1.0/24"​
}​
​
variable "subnet_zone_id" {​
description = "Availability zone ID of the subnet"​
type = string​
default = "cn-beijing-a"​
}​
​
variable "tags" {​
description = "Tags applied to the VPC and subnet"​
type = list(object({​
key = string​
value = string​
}))​
default = [​
{​
key = "env"​
value = "prod"​
}​
]​
}​
​
  1. main.tf,核心资源定义:先创建 VPC,Subnet 通过引用 volcenginecc_vpc_vpc.vpc-demo.id 关联到该 VPC。​
​
resource "volcenginecc_vpc_vpc" "vpc-demo" {​
vpc_name = var.vpc_name​
description = var.vpc_description​
cidr_block = var.vpc_cidr_block​
​
tags = var.tags​
}​
​
resource "volcenginecc_vpc_subnet" "subnet-demo" {​
vpc_id = volcenginecc_vpc_vpc.vpc-demo.id​
zone_id = var.subnet_zone_id​
subnet_name = var.subnet_name​
description = var.subnet_description​
cidr_block = var.subnet_cidr_block​
​
tags = var.tags​
}​
​
  1. outputs.tf,声明 apply 后导出的资源属性。​
​
output "vpc_id" {​
description = "ID of the created VPC"​
value = volcenginecc_vpc_vpc.vpc-demo.id​
}​
​
output "vpc_name" {​
description = "Name of the created VPC"​
value = volcenginecc_vpc_vpc.vpc-demo.vpc_name​
}​
​
output "vpc_cidr_block" {​
description = "CIDR block of the created VPC"​
value = volcenginecc_vpc_vpc.vpc-demo.cidr_block​
}​
​
output "vpc_description" {​
description = "Description of the created VPC"​
value = volcenginecc_vpc_vpc.vpc-demo.description​
}​
​
output "vpc_status" {​
description = "Status of the created VPC"​
value = volcenginecc_vpc_vpc.vpc-demo.status​
}​
​
output "vpc_creation_time" {​
description = "Creation time of the VPC"​
value = volcenginecc_vpc_vpc.vpc-demo.creation_time​
}​
​
output "subnet_id" {​
description = "ID of the created subnet"​
value = volcenginecc_vpc_subnet.subnet-demo.id​
}​
​
output "subnet_name" {​
description = "Name of the created subnet"​
value = volcenginecc_vpc_subnet.subnet-demo.subnet_name​
}​
​
output "subnet_cidr_block" {​
description = "CIDR block of the created subnet"​
value = volcenginecc_vpc_subnet.subnet-demo.cidr_block​
}​
​
output "subnet_description" {​
description = "Description of the created subnet"​
value = volcenginecc_vpc_subnet.subnet-demo.description​
}​
​
output "subnet_zone_id" {​
description = "Availability zone ID of the subnet"​
value = volcenginecc_vpc_subnet.subnet-demo.zone_id​
}​
​
output "subnet_status" {​
description = "Status of the subnet"​
value = volcenginecc_vpc_subnet.subnet-demo.status​
}​
​
output "subnet_available_ip_count" {​
description = "Number of available IP addresses in the subnet"​
value = volcenginecc_vpc_subnet.subnet-demo.available_ip_address_count​
}​
​
  1. 完成上述文件编写后,请通过 git add → git commit → git push 将项目推送至远程仓库,确保 Infra Manager 能拉取到最新代码。​
​
最近更新时间:2026.09.28 15:53:29
这个页面对您有帮助吗?
有用
有用
无用
无用