在Windows中使用Terraform
本文為您介紹在Windows中,如何快速使用Terraform創建阿里云資源。
使用Terraform進行基礎設施即代碼(IaC)管理,包含以下幾個主要步驟。
安裝Terraform:確保您的系統能夠識別并執行Terraform命令。
編寫Terraform配置文件:配置文件是Terraform的核心,用于描述資源的創建、配置和依賴關系,如創建VPC、ECS、OSS等。
初始化與創建資源:將基礎設施設計變為現實的關鍵步驟。
查看和管理資源:在部署后,可以便捷地查看和管理基礎設施環境,確保其符合最新的需求和設計。
銷毀資源:當不再需要所創建的資源時,可以銷毀相應目錄下已創建資源。
1. 安裝Terraform
訪問Terraform官網,下載適合您的Windows操作系統版本的Terraform二進制文件并解壓。
配置環境變量,將Terraform的安裝路徑添加到系統環境變量Path中。
在桌面右鍵單擊此電腦,選擇屬性 -> 高級系統設置 -> 環境變量 -> 系統變量/用戶變量。
在系統變量/用戶變量中單擊Path,選擇編輯 -> 新建,輸入文件所在目錄的路徑,單擊確定完成配置。
驗證安裝成功,同時按下Win+R鍵,輸入
cmd
單擊確定,打開命令提示符。執行terraform --version
,如果出現以下信息則表示安裝成功。Terraform v1.9.3 on windows_amd64
2. 編寫Terraform配置文件
配置文件是Terraform的核心,用于定義在云端或本地部署的基礎設施資源,如VPC、ECS、OSS等。
創建一個新的文件夾,例如命名為ecs,并在該文件夾下創建一個Terraform配置文件,例如配置文件名稱為main.tf。
為每個Terraform項目創建獨立執行目錄可以確保資源組織清晰,避免狀態文件混淆,便于版本控制和團隊協作,同時有利于實現環境隔離和模塊化管理,提高配置管理的可維護性和安全性。
編寫Terraform配置文件,以創建ECS為例。將 ECS 實例及其依賴的資源(VPC,安全組等)以代碼化的方式定義到配置文件中。為了方便起見,您可以將以下代碼復制到main.tf中。
重要示例中創建的ECS為按量計費,資源創建后將會產生相關費用。
示例中使用了環境變量作為Terraform認證方式,更多信息,請參見Terraform身份認證。
創建ECS所需要的資源如下:
Resource
說明
創建VPC實例
創建vSwitch實例
創建安全組實例
創建安全組的出入訪問規則
創建ECS實例
variable "name" { type = string default = "tf-test" } # 設置地域 variable "region" { type = string default = "cn-beijing" } # 公網帶寬,當大于0的時候,將為實例分配一個公網。 variable "internet_max_bandwidth_out" { type = number default = 10 } # 設置ECS實例規格 variable "instance_type" { type = string default = "ecs.e-c1m1.large" } # 設置鏡像ID variable "image_id" { default = "ubuntu_18_04_64_20G_alibase_20190624.vhd" } # 設置標簽 variable "tags" { type = map(string) default = { From = "Terraform" Usage = "demo" } } provider "alicloud" { region = var.region } # 獲取zone_id data "alicloud_zones" "default" { available_instance_type = var.instance_type available_resource_creation = "VSwitch" available_disk_category = "cloud_ssd" } # 創建VPC resource "alicloud_vpc" "vpc" { vpc_name = var.name cidr_block = "172.16.0.0/12" } # 創建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" { name = var.name vpc_id = alicloud_vpc.vpc.id } # 向安全組添加入方向放行規則 resource "alicloud_security_group_rule" "allow_tcp_22" { type = "ingress" ip_protocol = "tcp" nic_type = "intranet" policy = "accept" port_range = "22/22" priority = 1 security_group_id = alicloud_security_group.default.id cidr_ip = "0.0.0.0/0" } # 創建ECS resource "alicloud_instance" "instance" { availability_zone = data.alicloud_zones.default.zones.0.id security_groups = alicloud_security_group.default.*.id instance_type = var.instance_type system_disk_category = "cloud_essd_entry" image_id = var.image_id instance_name = var.name vswitch_id = alicloud_vswitch.vsw.id internet_max_bandwidth_out = var.internet_max_bandwidth_out tags = var.tags } output "ecs_id" { value = alicloud_instance.instance.id } output "ecs_ip" { value = alicloud_instance.instance.public_ip }
3. 初始化與創建資源
Terraform配置文件編寫完成后,需要先初始化工作目錄,然后再創建資源。
3.1 Terraform初始化
在cmd中切換到步驟2所創建的文件夾,然后執行terraform init
命令進行初始化。terraform init
命令是使用任何Terraform配置文件之前必須執行的第一個命令,主要目的是初始化一個Terraform工作目錄,包括下載必要的阿里云提供商插件以及各種其他記錄文件。
# 切換到D盤
d:
# 切換到步驟2中的文件夾路徑的命令,tool/terraform/projects/ecs是步驟2創建的文件夾路徑,您可根據實際路徑替換。
cd tool/terraform/projects/ecs
# 執行初始化命令
terraform init
當您因網絡延遲等原因導致terraform init超時,無法正常下載Provider等情況時,可通過配置阿里云鏡像站解決,具體操作步驟,請參見Terraform Init 加速方案配置。
3.2 創建資源
執行
terraform plan
創建一個執行計劃,并詳細展示了在執行 terraform apply 時將創建、修改或銷毀的所有資源信息。執行
terraform apply
時,將根據terraform plan
生成的執行計劃來創建資源。在創建過程中,需要按照提示輸入yes,以繼續創建資源。關于變量如何傳值,請參見Variable 介紹中的變量設置方式。
4. 查看和管理資源
在部署后,您也能輕松地管理和維護您的基礎設施環境,確保其符合最新的需求和設計。
4.1 查看資源
通過
terraform show
命令查看資源的詳細信息。通過
terraform state list
命令列出所有已創建的資源。通過
terraform state show <資源類型>.<資源名稱>
查看某個資源的詳細信息。通過阿里云控制臺查看已創建資源信息。
4.2 管理資源
Terraform在完成資源的創建和修改后,會將資源的狀態和屬性信息保存在terraform.tfstate文件中。我們可以使用terraform state
相關命令對state進行管理。更多信息,請參見Terraform State 介紹。
4.3 資源變更
修改配置文件(如main.tf或者其他.tf文件)中需要變更的資源定義,例如您想添加新的安全組入方向放行規則。
resource "alicloud_security_group_rule" "allow_tcp_443" { type = "ingress" ip_protocol = "tcp" nic_type = "intranet" policy = "accept" port_range = "443/443" priority = 1 security_group_id = alicloud_security_group.default.id cidr_ip = "0.0.0.0/0" }
執行
terraform plan
命令預覽所做的變更。如果變更符合預期,執行
terraform apply
命令,來應用這些變更到您的基礎設施。執行此命令時,Terraform會要求您確認是否確實要進行這些變更。輸入yes
并回車后,變更會被應用。
5. 資源銷毀
當不再需要所創建的資源時,可以通過terraform destroy
命令銷毀所有已創建的資源。