Terraform 是一款开源的基础设施即代码(IaC)工具,支持通过声明式配置文件管理阿里云资源的完整生命周期。本文介绍如何通过可视化界面或命令行两种方式快速上手 Terraform,完成第一个阿里云资源的创建。
选择使用方式
Terraform 提供可视化和命令行两种使用方式,根据实际需求选择:
方式 | 适用场景 | 优势 | 限制 |
不熟悉参数、首次使用、快速调试 | 图形化表单配置,无需编写代码 | 仅支持单资源操作 | |
快速体验、生产环境、复杂编排 | 支持多资源编排和状态管理 | 依赖 CLI 环境 |
选择 CLI 方式时,可通过Cloud Shell或本地安装准备环境。
使用Terraform Explorer
Terraform Explorer 是阿里云基于 Terraform 提供的在线调试工具,支持通过表单自动生成 Terraform 配置文件并在线执行。更多信息,请参见 Terraform Explorer 介绍。
以下以创建一个专有网络 VPC 为例,介绍 Terraform Explorer 的两种使用方式:自定义参数和示例模板。
自定义参数创建资源
如需根据实际需求配置参数,按以下步骤操作:
登录Terraform Explorer,选择产品和资源类型,参照资源文档填写参数,单击发起调试。
创建 VPC 的主要参数如下。更多参数信息,请参见 alicloud_vpc。
参数名称
参数描述
示例值
vpc_name
VPC 名称
tf-test-vpc
cidr_block
VPC 私网网段
192.168.0.0/16
description
VPC 描述信息
The VPC was created using Terraform.

在模板详情页签确认参数无误后,单击预览查看执行计划。

在预览详情页签确认待创建资源的信息,单击执行。

在执行详情页签查看结果。执行成功会提示 "
Apply complete! Resources: 1 added, 0 changed, 0 destroyed."。执行失败时,请根据提示修改参数后重新调试。
在资源详情页签查看已创建的资源信息。

(可选)修改资源:调整参数后单击预览并执行,重复步骤 2~4。更新成功会提示 "
Apply complete! Resources: 0 added, 1 changed, 0 destroyed."。
(可选)释放资源:在执行详情页签单击销毁资源,然后在预览详情页签单击执行。

使用示例模板创建资源
如果对资源参数不熟悉或仅希望快速体验,可直接使用 Terraform Explorer 提供的示例模板。
登录Terraform Explorer,选择相应的产品、资源类型及示例模板,单击发起调试。在右侧的示例模板页签可查看模板详情。

在模板详情页签单击预览并执行。

在执行详情页签,您可以查看执行结果。

(可选)若您希望释放已创建的资源,在执行详情页签单击销毁资源,然后在预览详情页签单击执行。

也可以在调用历史中进行继续调试、销毁资源等操作。
使用Terraform CLI
通过命令行使用 Terraform,需要先准备 CLI 环境,然后编写配置文件并执行命令创建资源。根据实际情况选择以下任一方式准备 Terraform CLI 环境:
Cloud Shell(推荐):免安装,适合快速体验和学习测试。
本地安装:适合生产环境、持续集成和长期使用。
Cloud Shell
阿里云 Cloud Shell 是一款免费的运维工具,已预装 Terraform 并配置好身份凭证,可直接运行 Terraform 命令。
登录Cloud Shell
打开浏览器,访问 Cloud Shell。更多信息,请参见使用云命令行。
建议使用 RAM 用户登录。为确保阿里云账号安全,非必要时避免使用阿里云账号直接访问云资源。
切换 Terraform 版本
Cloud Shell 默认的 Terraform 版本可能较低,建议切换到 1.2 及以上版本以确保功能完整可用。
查看当前Terraform版本:
terraform version
查看 Cloud Shell 中内置的可用版本列表:
tfenv list
切换到指定版本(以 1.9.5 为例):
tfenv use 1.9.5
本地安装
适用于生产环境和复杂编排场景,需要先安装 Terraform 并配置身份凭证。
通过包管理器安装(推荐)
macOS
使用Homebrew安装:
#安装HashiCorp的tap,用来定义包在homebrew的位置
brew tap hashicorp/tap
#执行安装指令,安装Terraform
brew install hashicorp/tap/terraform更新到最新版本:
#更新Homebrew
brew update
#更新terraform
brew upgrade hashicorp/tap/terraformWindows
使用Chocolatey安装:
choco install terraformLinux
以 yum 包管理器为例:
yum install -y dnf-plugin-releasever-adapter
yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
yum install terraform手动安装
如果包管理器不可用,可选择以下方式手动安装。
使用预编译包
从 Terraform 官网下载对应操作系统的 zip 包并解压。
将
terraform二进制文件移动到系统PATH目录中:macOS 或 Linux
mv ~/Downloads/terraform /usr/local/bin/Windows
进入控制面板 > 系统 > 系统设置 > 环境变量。
在系统变量中找到 PATH,单击编辑。
添加 Terraform 所在目录路径,确保与前一条目之间用分号分隔(如
c:\path;c:\path2)。启动新的命令行窗口以使配置生效。
从源码编译
需要预先安装 Go 语言环境。
克隆 Terraform 源码仓库:
git clone https://github.com/hashicorp/terraform.git进入目录并编译安装:
cd terraform go install编译完成后,二进制文件会放置在
$GOPATH/bin/目录中。确保
$GOPATH/bin已添加到系统 PATH 中。配置方式与使用预编译包中的步骤 2 相同。
验证安装
运行以下命令确认 Terraform 已正确安装:
terraform version命令成功执行并显示版本号,表示安装完成。
案例:创建 ECS 实例
以下以创建一台 ECS 实例为例,演示 Terraform 资源编排的完整流程:创建 VPC → 创建交换机 → 创建安全组 → 创建 ECS 实例。
创建工作目录并编写 Terraform 配置文件
main.tf:mkdir tf-demo && cd tf-demo vim main.tf将以下代码复制到
main.tf:provider "alicloud" { region = var.region } # 资源创建的地域 variable "region" { default = "cn-beijing" } # ECS实例名称 variable "instance_name" { default = "tf-cloudshell-test" } # ECS实例规格 variable "instance_type" { default = "ecs.n2.small" } # 公网出带宽,值为0时,表示不开通公网 variable "internet_bandwidth" { default = 10 } # ECS系统镜像 variable "image_id" { default = "ubuntu_18_04_64_20G_alibase_20190624.vhd" } # ECS系统盘类型 variable "disk_category" { default = "cloud_efficiency" } # ECS实例登录密码 variable "password" { default = "TF-test@1234" } # 创建VPC resource "alicloud_vpc" "vpc" { vpc_name = "tf_test_foo" cidr_block = "172.16.0.0/12" } # 根据实例规格和云盘类型查询存在资源的可用区 data "alicloud_zones" "default" { available_disk_category = var.disk_category available_resource_creation = "VSwitch" available_instance_type = var.instance_type } # 创建vSwitch resource "alicloud_vswitch" "vsw" { vpc_id = alicloud_vpc.vpc.id cidr_block = "172.16.0.0/21" zone_id = data.alicloud_zones.default.zones.0.id } # 创建安全组 resource "alicloud_security_group" "default" { security_group_name = "default" vpc_id = alicloud_vpc.vpc.id } # 创建安全组入方向规则 resource "alicloud_security_group_rule" "allow_all_tcp" { type = "ingress" ip_protocol = "tcp" nic_type = "intranet" policy = "accept" port_range = "1/65535" priority = 1 security_group_id = alicloud_security_group.default.id cidr_ip = "0.0.0.0/0" } resource "alicloud_instance" "instance" { # 绑定安全组 security_groups = alicloud_security_group.default.*.id instance_type = var.instance_type system_disk_category = var.disk_category image_id = var.image_id instance_name = var.instance_name # 所在交换机 vswitch_id = alicloud_vswitch.vsw.id internet_max_bandwidth_out = var.internet_bandwidth password = var.password }重要示例中的安全组规则开放了所有 TCP 端口(1-65535)且来源 IP 为 0.0.0.0/0,仅适用于测试环境。生产环境请根据实际需求限制端口范围和来源 IP。
初始化 Terraform 工作目录:
terraform init预览执行计划,确认将要创建的资源:
terraform plan
创建资源。输出
Apply complete!表示创建成功:terraform apply
不再需要这些资源时,执行以下命令释放:
terraform destroy