全部產品
Search
文件中心

Terraform:使用Terraform快速建立資源

更新時間:Jun 25, 2026

Terraform 是一款開源的基礎設施即代碼(IaC)工具,支援通過聲明式設定檔管理阿里雲資源的完整生命週期。本文介紹如何通過可視化介面或命令列兩種方式快速上手 Terraform,完成第一個阿里雲資源的建立。

選擇使用方式

Terraform 提供可視化和命令列兩種使用方式,根據實際需求選擇:

方式

適用情境

優勢

限制

Terraform Explorer

不熟悉參數、首次使用、快速調試

圖形化表單配置,無需編寫代碼

僅支援單資源操作

Terraform CLI

快速體驗、生產環境、複雜編排

支援多Resource Orchestration Service和狀態管理

依賴 CLI 環境

選擇 CLI 方式時,可通過Cloud Shell本地安裝準備環境。

使用Terraform Explorer

Terraform Explorer 是阿里雲基於 Terraform 提供的線上調試工具,支援通過表單自動產生 Terraform 設定檔並線上執行。更多資訊,請參見 Explorer 介紹

以下以建立一個Virtual Private Cloud 為例,介紹 Terraform Explorer 的兩種使用方式:自訂參數和樣本模板。

自訂參數建立資源

如需根據實際需求配置參數,按以下步驟操作:

  1. 登入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.

  2. 模板详情頁簽確認參數無誤後,單擊预览查看執行計畫。

    terraform {
      required_providers {
        alicloud = {
          source = "aliyun/alicloud"
          version = "1.231.0"
        }
      }
    }
    provider "alicloud" {
      region  = "cn-beijing"
    }
    resource "alicloud_vpc" "default" {
      cidr_block  = "192.168.0.0/16"
      description = "The VPC was created using Terraform."
      vpc_name    = "tf-test-vpc"
    }
  3. 預覽詳情頁簽確認待建立資源的資訊,單擊執行

    預覽結果顯示 成功,提示 Plan: 1 to add, 0 to change, 0 to destroy,即將建立 alicloud_vpc.default 資源,其中 cidr_block192.168.0.0/16descriptionThe VPC was created using Terraform.,其餘屬性將在執行後產生。

  4. 執行詳情頁簽查看結果。執行成功會提示 "Apply complete! Resources: 1 added, 0 changed, 0 destroyed."。執行失敗時,請根據提示修改參數後重新調試。

  5. 资源详情頁簽查看已建立的資源資訊。

    資源地址為 alicloud_vpc.default,頁面展示 VPC 的各項屬性,包括:

    • cidr_block192.168.0.0/16

    • nametf-test-vpc

    • descriptionThe VPC was created using Terraform.

    • create_time:VPC 的建立時間

    • classic_link_enabledenable_ipv6 等網路設定

    • resource_group_idroute_table_idrouter_id 等資源關聯資訊

  6. (可選)修改資源:調整參數後單擊预览并执行,重複步驟 2~4。更新成功會提示 "Apply complete! Resources: 0 added, 1 changed, 0 destroyed."。

  7. (可選)釋放資源:在執行詳情頁簽單擊销毁资源,然後在預覽詳情頁簽單擊執行

    執行完成後,執行詳情頁簽顯示執行結果為成功,提示 Apply complete! Resources: 0 added, 0 changed, 1 destroyed,表示 1 個 VPC 資源已被成功銷毀。

使用樣本模板建立資源

如果對資源參數不熟悉或僅希望快速體驗,可直接使用 Terraform Explorer 提供的樣本模板。

  1. 登入Terraform Explorer,選擇相應的產品资源类型樣本模板,單擊发起调试。在右側的樣本模板頁簽可查看模板詳情。

    在左側 輸入參數 地區可查看和修改模板所需參數(如將 name 設定為 terraform-example),並可通過 新增參數 添加更多參數。

  2. 模板详情頁簽單擊预览并执行

    該樣本模板為Terraform格式,定義了一個alicloud_vpc資源,配置包括ipv6_isp為BGP、cidr_block10.0.0.0/8enable_ipv6為true等參數。

  3. 執行詳情頁簽,您可以查看執行結果。

  4. (可選)若您希望釋放已建立的資源,在執行詳情頁簽單擊销毁资源,然後在預覽詳情頁簽單擊執行

說明

也可以在調用歷史中進行继续调试销毁资源等操作。

使用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 及以上版本以確保功能完整可用。

  1. 查看當前Terraform版本:

    terraform version
    shell@Alicloud:~$ terraform version
    Terraform v0.12.31
    Your version of Terraform is out of date! The latest version
    is 1.12.2. You can update by downloading from https://www.terraform.io/downloads.html
  2. 查看 Cloud Shell 中內建的可用版本列表:

    tfenv list
    shell@Alicloud:~$ tfenv list
      1.9.5
      1.5.7
      1.3.7
      0.13.7
    * 0.12.31 (set by /usr/local/tfenv/version)
  3. 切換到指定版本(以 1.9.5 為例):

    tfenv use 1.9.5
    shell@Alicloud:~$ tfenv use 1.9.5
    Switching default version to v1.9.5
    Switching completed

本地安裝

適用於生產環境和複雜編排情境,需要先安裝 Terraform 並配置身份憑證。

通過包管理器安裝(推薦)

macOS

使用Homebrew安裝:

#安裝HashiCorp的tap,用來定義包在homebrew的位置
brew tap hashicorp/tap
#執行安裝指令,安裝Terraform
brew install hashicorp/tap/terraform

更新到最新版本:

#更新Homebrew
brew update
#更新terraform
brew upgrade hashicorp/tap/terraform

Windows

使用Chocolatey安裝:

choco install terraform

Linux

yum 包管理器為例:

yum install -y dnf-plugin-releasever-adapter
yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
yum install terraform

手動安裝

如果包管理器不可用,可選擇以下方式手動安裝。

使用先行編譯包

  1. 從 Terraform 官網下載對應作業系統的 zip 包並解壓。

  2. 將 terraform 二進位檔案移動到系統 PATH 目錄中:

    • macOS 或 Linux

      mv ~/Downloads/terraform /usr/local/bin/
    • Windows

      1. 進入控制台 > 系統 > 系統設定 > 環境變數。

      2. 在系統變數中找到 PATH,單擊編輯。

      3. 添加 Terraform 所在目錄路徑,確保與前一條目之間用分號分隔(如 c:\path;c:\path2)。

      4. 啟動新的命令列視窗以使配置生效。

從源碼編譯

需要預先安裝 Go 語言環境

  1. 複製 Terraform 源碼倉庫:

    git clone https://github.com/hashicorp/terraform.git
  2. 進入目錄並編譯安裝:

    cd terraform
    go install

    編譯完成後,二進位檔案會放置在 $GOPATH/bin/ 目錄中。

  3. 確保 $GOPATH/bin 已添加到系統 PATH 中。配置方式與使用先行編譯包中的步驟 2 相同。

驗證安裝

運行以下命令確認 Terraform 已正確安裝:

terraform version

命令成功執行並顯示版本號碼,表示安裝完成。

案例:建立 ECS 執行個體

以下以建立一台 ECS 執行個體為例,示範 Terraform Resource Orchestration Service的完整流程:建立 VPC → 建立交換器 → 建立安全性群組 → 建立 ECS 執行個體。

  1. 建立工作目錄並編寫 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。

  2. 初始化 Terraform 工作目錄:

    terraform init
  3. 預覽執行計畫,確認將要建立的資源:

    terraform plan
    shell@Alicloud:~/tf-demo$ terraform plan
    data.alicloud_zones.default: Reading...
    data.alicloud_zones.default: Read complete after 1s [id=1373912221]
    Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
      + create
    Terraform will perform the following actions:
      # alicloud_instance.instance will be created
      + resource "alicloud_instance" "instance" {
          + availability_zone                  = (known after apply)
          + cpu                                = (known after apply)
          + create_time                        = (known after apply)
          + credit_specification               = (known after apply)
          + deployment_set_group_no            = (known after apply)
          + description                        = (known after apply)
          + dry_run                            = false
          + enable_jumbo_frame                 = (known after apply)
          + expired_time                       = (known after apply)
          + host_name                          = (known after apply)
          + http_endpoint                      = (known after apply)
          + http_put_response_hop_limit        = (known after apply)
          + http_tokens                        = (known after apply)
          + id                                 = (known after apply)
          + image_id                           = "ubuntu_18_04_64_20G_alibase_20190624.vhd"
          + instance_charge_type               = (known after apply)
          + instance_name                      = "tf-cloudshell-test"
          + instance_type                      = "ecs.n2.small"
          + internet_charge_type               = (known after apply)
          + internet_max_bandwidth_in          = (known after apply)
          + internet_max_bandwidth_out         = 10
          + io_optimized                       = (known after apply)
          + ipv6_address_count                 = (known after apply)
          + ipv6_addresses                     = (known after apply)
          + key_name                           = (known after apply)
          + maintenance_action                 = (known after apply)
          + memory                             = (known after apply)
          + network_interface_id               = (known after apply)
          + network_interface_traffic_mode     = (known after apply)
          + os_name                            = (known after apply)
          + os_type                            = (known after apply)
          + password                           = (sensitive value)
          + period                             = (known after apply)
          + primary_ip_address                 = (known after apply)
  4. 建立資源。輸出 Apply complete! 表示建立成功:

    terraform apply
    Apply complete! Resources: 5 added, 0 changed, 0 destroyed.
  5. 不再需要這些資源時,執行以下命令釋放:

    terraform destroy

相關文檔