Terraform是一個開源的基礎設施即代碼工具,允許開發人員通過聲明式的語言來定義和管理基礎設施的配置,提供了一種簡潔的方式來建立、修改或刪除ECS資源,減少手動操作的繁瑣和錯誤,提高基礎設施的可管理性和可維護性。本文為您介紹如何安裝與配置Terraform、使用Terraform建立ECS執行個體。
Terraform準系統
Terraform是IT基礎架構自動化編排工具,可以用代碼來管理維護IT資源。更多資訊,請參見Terraform產品介紹。
Terraform的命令列介面CLI(Command Line Interface)提供一種簡單機制,用於將設定檔部署到阿里雲或其他任意支援的雲上,並對其進資料列版本設定。它編寫了描述雲資源拓撲的設定檔中的基礎結構,例如虛擬機器、儲存賬戶和網路介面。
Terraform通過Provider支援新的基礎架構,讓您在阿里雲上能夠便於使用簡單範本語言來定義、預覽和部署雲基礎結構。
Terraform可以建立、修改和刪除多種阿里雲產品的相關資源。
關於阿里雲與Terraform整合的更多資訊,請參見Alibaba Cloud Provider。
Terraform安裝
CloudShell
阿里雲Cloud Shell是一款協助您營運的免費產品,預裝了Terraform的組件,您可直接在Cloud Shell中運行Terraform的命令。
首先,確保您有一個合法的、有相關許可權的阿里雲帳號。
其次,開啟瀏覽器,訪問Cloud Shell的地址https://shell.alibabacloud.com。
登入成功後,執行如下指令
terraform您將看到,Terraform組件已經內建在CloudShell中,並且可以直接使用。

更多Cloud Shell使用方式,請參見使用雲命令列。
手動安裝
使用先行編譯包
登入Terraform官網,找到對應作業系統的zip包,並下載。
在下載完成後,請將程式包解壓到/usr/local/bin。其餘檔案在複製完成後均可刪除,這並不會影響Terraform正常運行。
最後,請確保Terraform目錄在PATH變數中已完成定義,不同作業系統會有所不同。
Windows
進入控制台 -> 系統 -> 系統設定 -> 環境變數。
在系統變數中向下滾動,直到找到 PATH。
單擊編輯並進行相應更改。
請務必在前一個末尾添加分號,因為這是分隔字元,即 c:\path;c:\path2
啟動新控制台以使設定生效。
更多資訊參見:在Windows系統定義全域路徑。
Mac或Linux
列印您的PATH配置
echo $PATH將Terraform二進位檔案移動到列出的位置之一。此命令假定二進位檔案當前位於您的Downloads檔案夾中並且您的PATH包含/usr/local/bin,但如果您的位置不同,您可以自訂命令中的目錄。
mv ~/Downloads/terraform /usr/local/bin/更多資訊參見:
使用源
如果您期望從原始碼編譯二進位檔案,可以複製HashiCorp Terraform程式碼程式庫
git clone https://github.com/hashicorp/terraform.git您將會看到如下進度提示資訊,並等待其執行完成。

執行完成後,您執行命令的目錄下會新增一個terraform名稱的目錄。通過cd指令進入該目錄。
cd terraform然後,執行install 指令,這將會編譯目錄並將編譯後的包移動到$GOPATH/bin/terraform目錄中
go install當您看到如下提示資訊,則說明正在編譯中。等待完成後即可進行下一步操作。

注意:如果提示zsh: command not found: go,則您需要先安裝go的環境。
最終,確保terraform目錄在PATH中定義並可用。 PATH定義取決於您所使用的作業系統。
Mac或Linux
列印您的PATH配置
echo $PATH將 Terraform 二進位檔案移動到列出的位置之一。此命令假定二進位檔案當前位於您的Downloads檔案夾中並且您的PATH包含/usr/local/bin,但如果您的位置不同,您可以自訂命令中的目錄。
mv ~/Downloads/terraform /usr/local/bin/更多資訊參見:
Windows
進入控制台 -> 系統 -> 系統設定 -> 環境變數。
在系統變數中向下滾動,直到找到 PATH。
單擊編輯並進行相應更改。
請務必在前一個末尾添加分號,如:c:\path;c:\path2
啟動新控制台以使設定生效。
更多資訊參見:在Windows系統定義全域路徑。
macOS Homebrew
Homebrew 是一款在Mac系統上經常使用的包安裝工具。藉助Homebrew可以通過簡單的指令安裝Terraform。
第一步,安裝HashiCorp的tap,用來定義包在Homebrew的位置。
brew tap hashicorp/tap第二步,執行安裝指令,安裝Terraform
brew install hashicorp/tap/terraform安裝指令將索引最新的版本並進行安裝,如果在安裝一段時間後希望更新到最新版本。可以通過重新執行upgrade指令進行。
更新最新版本的Terraform,首先需要更新Homebrew。
brew update然後,運行upgrade指令更新到最新版本。
brew upgrade hashicorp/tap/terraformLinux
Alibaba Cloud Liunx
yum install -y dnf-plugin-releasever-adapter
yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
yum install terraform

Windows Chocolatey
Chocolatey是一款在Mac系統上經常使用的包安裝工具。藉助Chocolatey可以通過簡單的指令安裝Terraform。
choco install terraformTerraform 身份認證
基於環境變數配置身份認證是將訪問憑證儲存在特定的環境變數中,當執行Terraform命令時,如果配置模板中沒有顯式聲明訪問憑證,那麼將嘗試從如下的環境變數中擷取。具體環境變數的設定方式如下:
Windows
在案頭按右鍵此電腦,選擇。
在系統變數/使用者變數中,單擊建立,建立以下環境變數。
變數名
變數描述
變數值
ALICLOUD_ACCESS_KEY
Access Key Id
yourAccessKeyID
ALICLOUD_SECRET_KEY
Access Key Secret
yourAccessKeySecret
ALICLOUD_SECURITY_TOKEN(可選)
如果是 STS 的訪問憑證,此處需要配置Security Token
yourSTSToken
Linux
使用export命令配置的臨時環境變數僅對當前會話有效,當會話退出之後所設定的環境變數將會丟失。如需長期保留環境變數,可將export命令配置到作業系統的啟動設定檔中。
# Access Key Id
$ export ALICLOUD_ACCESS_KEY="<你的 Access Key ID>"
# Access Key Secret
$ export ALICLOUD_SECRET_KEY="<你的 Access Key Secret>"
# 如果是 STS 的訪問憑證,此處需要配置 security_token
$ export ALICLOUD_SECURITY_TOKEN="<你的訪問 Token>"設定了環境變數之後,provider塊可以不在配置模板中顯式聲明或者只聲明地區資訊:
provider "alicloud" {
region = "cn-hangzhou"
}當然,region也是支援通過環境變數 ALICLOUD_REGION進行配置的。如果 region 沒有顯式聲明也沒有配置環境變數,cn-beijing 將是其預設配置值。
支援的資源清單
Resource:資源,指新建立的資源,用於定義基礎設施組件,例如一個ECS執行個體、一個虛擬機器、一個網路安全性群組等。
使用Terraform建立並管理ECS
下文以建立ECS為例,介紹如何使用Terraform建立並管理ECS資源。
建立一個工作目錄,並在該工作目錄中建立名為main.tf的設定檔。以下代碼將建立一個ECS執行個體,以及建立ECS執行個體所需的VPC、安全性群組與交換器資源。將以下代碼複製到main.tf中。
# 定義一個變數region,預設值為"cn-beijing",用於指定阿里雲地區 variable "region"{ default = "cn-beijing" } # 配置阿里雲provider,使用變數region中定義的地區 provider "alicloud"{ region = var.region } # 定義一個字串類型的變數instance_type,預設值為"ecs.e-c1m1.large",用於指定ECS執行個體類型 variable "instance_type" { type = string default = "ecs.e-c1m1.large" } # 使用資料來源查詢可用性區域資訊,通過指定的執行個體類型、資源建立類型(如VSwitch)以及磁碟種類來過濾結果 data "alicloud_zones" "default" { available_instance_type = var.instance_type available_resource_creation = "VSwitch" available_disk_category = "cloud_essd" } # 定義一個變數vpc_cidr_block,預設值為"172.16.0.0/16",用於指定VPC的CIDR塊 variable "vpc_cidr_block" { default = "172.16.0.0/16" } # 定義一個變數vsw_cidr_block,預設值為"172.16.0.0/24",用於指定VSwitch的CIDR塊 variable "vsw_cidr_block" { default = "172.16.0.0/24" } # 產生一個介於10000到99999之間的隨機整數,用於確保某些資源名稱的唯一性 resource "random_integer" "default" { min = 10000 max = 99999 } # 建立名為vpc-test的VPC,並使用隨機整數確保名稱唯一性 resource "alicloud_vpc" "vpc" { vpc_name = "vpc-test_${random_integer.default.result}" cidr_block = var.vpc_cidr_block } # 建立安全性群組,名稱包含隨機整數以保證唯一性,並關聯至上述VPC resource "alicloud_security_group" "group" { security_group_name = "test_${random_integer.default.result}" # 替換了這裡的欄位名 vpc_id = alicloud_vpc.vpc.id } # 建立一條允許所有TCP流量進入的安全性群組規則,與之前建立的安全性群組關聯 resource "alicloud_security_group_rule" "allow_all_tcp" { type = "ingress" ip_protocol = "tcp" nic_type = "intranet" # 修改了這裡,將nic_type改為'intranet' policy = "accept" port_range = "1/65535" priority = 1 security_group_id = alicloud_security_group.group.id cidr_ip = "0.0.0.0/0" } # 建立VSwitch,名稱中包含隨機整數以確保唯一性,並與VPC、可用性區域關聯 resource "alicloud_vswitch" "vswitch" { vpc_id = alicloud_vpc.vpc.id cidr_block = var.vsw_cidr_block zone_id = data.alicloud_zones.default.zones[0].id vswitch_name = "vswitch-test-${random_integer.default.result}" } # 建立ECS執行個體,設定多個參數如可用性區域、安全性群組、執行個體類型等,並使用隨機整數保證執行個體名稱的唯一性 resource "alicloud_instance" "instance" { 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" system_disk_name = "test_foo_system_disk_${random_integer.default.result}" system_disk_description = "test_foo_system_disk_description" image_id = "aliyun_2_1903_x64_20G_alibase_20240628.vhd" instance_name = "test_ecs_${random_integer.default.result}" vswitch_id = alicloud_vswitch.vswitch.id internet_max_bandwidth_out = 10 password = "Terraform@Example" # 使用者根據自己實際情況修改 }執行如下命令,初始化Terraform運行環境。
terraform init返回資訊如下,則Terraform初始化成功。
Terraform has been successfully initialized! You may now begin working with Terraform. Try running "terraform plan" to see any changes that are required for your infrastructure. All Terraform commands should now work. If you ever set or change modules or backend configuration for Terraform, rerun this command to reinitialize your working directory. If you forget, other commands will detect it and remind you to do so if necessary.執行如下命令,開始執行代碼。
terraform apply在執行過程中,根據提示輸入
yes並按下Enter鍵,等待命令執行完成,若出現以下資訊,則表示代碼執行成功。You can apply this plan to save these new output values to the Terraform state, without changing any real infrastructure. Do you want to perform these actions? Terraform will perform the actions described above. Only 'yes' will be accepted to approve. Enter a value: yes Apply complete! Resources: 6 added, 0 changed, 0 destroyed.結果驗證
執行terraform show命令
您可以在工作目錄中,使用以下命令查詢Terraform已建立資源的詳細資料:
terraform show
登入控制台查看
登入雲端服務器管理主控台,進入頁面,左上方選擇地區,此例中選擇華北2(北京),查看已建立的ECS執行個體。

相關文檔
更多實踐教程,請參見Terraform的教程。
更多Terraform的常用命令,請參見常用命令。
ROS提供了Terraform託管服務,因此您可以直接在ROS控制台部署Terraform模板。詳細操作,請參見建立Terraform類型資源棧。