概述
基础设施即代码(Infrastructure as Code, IaC)是现代DevOps体系的核心实践,通过声明式配置文件实现基础设施的版本化管理和自动化部署。Terraform作为领先的IaC工具,其与版本控制系统(如GitHub)的深度整合,可显著提升基础设施变更的可追溯性与可复现性。阿里云资源编排服务(Resource Orchestration Service, ROS)通过托管Terraform工作流,提供了一站式代码仓库同步与自动化部署能力,本文将详细阐述基于GitHub的Terraform自动化管理方案。
场景示例
通过GitHub仓库托管Terraform模板,结合ROS实现ECS实例的自动化创建与销毁,完整实现基础设施变更的GitOps模式。
步骤一:代码仓库结构设计与Terraform模板准备
代码仓库架构创建GitHub仓库,采用以下分层目录结构
.
├── ros_config.yaml # ROS参数配置文件
└── templates
└── terraform
├── main.tf # 资源定义模板
├── variables.tf # 参数声明文件
└── outputs.tf # 输出定义文件
- Terraform模板实现
- 基础设施定义(main.tf):
data "alicloud_zones" "default" {
available_disk_category = "cloud_essd"
available_resource_creation = "VSwitch"
available_instance_type = var.instance_type
}
resource "alicloud_vpc" "vpc" {
cidr_block = "172.16.0.0/16"
}
resource "alicloud_vswitch" "vswitch" {
vpc_id = alicloud_vpc.vpc.id
cidr_block = "172.16.0.0/24"
zone_id = data.alicloud_zones.default.zones.0.id
}
resource "alicloud_security_group" "group" {
security_group_name = "iac-demo"
vpc_id = alicloud_vpc.vpc.id
}
resource "alicloud_instance" "instance" {
count = var.number
availability_zone = data.alicloud_zones.default.zones.0.id
security_groups = [alicloud_security_group.group.id]
instance_type = var.instance_type
system_disk_category = "cloud_essd"
image_id = "aliyun_3_x64_20G_alibase_20250629.vhd"
vswitch_id = alicloud_vswitch.vswitch.id
internet_max_bandwidth_out = 10
}
- 参数声明(variables.tf):
variable "number" {
description = "Number of ECS instances to provision"
type = number
default = 1
}
variable "instance_type" {
description = "Instance规格类型"
type = string
default = "ecs.e-c1m2.large"
}
- 输出定义(outputs.tf):
output "public_ips" {
description = "公网IP列表"
value = alicloud_instance.instance.*.public_ip
}
- ROS参数配置文件(ros_config.yaml)
template-file-path: templates/terraform # terraform 文件路径
parameters: # terraform 参数
instance_type: ecs.e-c1m2.large
number: 1
步骤二:创建ROS资源栈
- 授权访问。在ROS控制台通过OAuth2.0协议完成GitHub账户授权,确保ROS服务可读取代码仓库内容。
- 配置资源栈参数。参数说明如下。
- 模板来源:选择通过代码仓库同步模板
- 仓库信息:根据页面填写仓库信息
- 模板类型:选择Terraform
- 自动更新资源栈:选择开启
- 配置文件路径:选择步骤一中的ROS参数配置文件
- RAM角色:创建或选择具有以下策略的RAM角色:建议遵循最小权限原则,按需授予具体API权限
- 创建资源栈。单击【创建】按钮创建初始资源栈,然后通过单击【运行】按钮,进行第一次代码同步和启动云资源的部署。
步骤三:自动化同步部署
- 验证已部署资源。部署完成后,可以在ROS控制台的资源栈输出查看ECS实例的IP地址。
- 修改参数配置。修改
ros_config.yaml
中配置的参数,将number
参数设为0,并且提交到到main
分支
template-file-path: templates/terraform
parameters:
instance_type: ecs.e-c1m2.large
number: 0
- 触发自动更新。提交代码至主分支后,ROS 资源栈将进行一次更新,将 ECS 实例的数量从 1 变成 0,也就是释放 ECS 实例。
- 结果验证。在ROS控制台的资源栈事件中查询 ECS 实例释放事件,在输出中已查询不到 ECS 实例的 IP 地址。
总结
本文通过GitHub与ROS的深度整合,构建了符合企业级要求的Terraform自动化管理框架。开发者可通过Git Pull Request工作流实现基础设施变更的协同开发,运维团队则能借助ROS的自动化能力确保基础设施的持续一致性。该模式完美契合DevOps理念,显著提升基础设施变更的效率与安全性。