使用Terraform部署ECS
Terraform是一個(gè)開源的基礎(chǔ)設(shè)施即代碼工具,允許開發(fā)人員通過聲明式的語言來定義和管理基礎(chǔ)設(shè)施的配置,提供了一種簡潔的方式來創(chuàng)建、修改或刪除ECS資源,減少手動(dòng)操作的繁瑣和錯(cuò)誤,提高基礎(chǔ)設(shè)施的可管理性和可維護(hù)性。本文為您介紹如何安裝與配置Terraform、使用Terraform創(chuàng)建ECS實(shí)例。
更多Terraform信息,請參見什么是Terraform。
支持的資源列表
目前支持Terraform編排和使用云服務(wù)器ECS的部分資源和數(shù)據(jù)源清單,請參見ECS Terraform資源和數(shù)據(jù)源。
Resource:資源,指新創(chuàng)建的資源,用于定義基礎(chǔ)設(shè)施組件,例如一個(gè)ECS實(shí)例、一個(gè)虛擬機(jī)、一個(gè)網(wǎng)絡(luò)安全組等。
Data Source:數(shù)據(jù)源,用于查詢和獲取已有的基礎(chǔ)設(shè)施組件的信息,在Terraform配置中使用這些信息來引用或配置其他資源。
alicloud_auto_provisioning_group:彈性供應(yīng)組
alicloud_disk:塊存儲(chǔ)
alicloud_disk_attachment:磁盤的連接與分離
alicloud_ecs_auto_snapshot_policy:自動(dòng)快照策略
alicloud_ecs_auto_snapshot_policy_attachment:關(guān)聯(lián)自動(dòng)快照策略
alicloud_ecs_capacity_reservation:容量預(yù)定服務(wù)
alicloud_ecs_command:云助手命令
alicloud_ecs_dedicated_host:專有宿主機(jī)
alicloud_ecs_dedicated_host_cluster:專有宿主機(jī)集群
alicloud_ecs_deployment_set:部署集
alicloud_ecs_disk:塊存儲(chǔ)
alicloud_ecs_disk_attachment:磁盤的連接與分離
alicloud_ecs_elasticity_assurance:彈性保障服務(wù)
alicloud_ecs_hpc_cluster:HPC集群
alicloud_ecs_image_component:鏡像組件
alicloud_ecs_image_pipeline:鏡像構(gòu)建模板
alicloud_ecs_instance_set:ECS實(shí)例集
alicloud_ecs_invocation:云助手腳本
alicloud_ecs_key_pair:SSH密鑰對
alicloud_ecs_key_pair_attachment:綁定SSH密鑰對
alicloud_ecs_launch_template:實(shí)例啟動(dòng)模板
alicloud_ecs_network_interface:彈性網(wǎng)卡
alicloud_ecs_network_interface_attachment:附加彈性網(wǎng)卡
alicloud_ecs_network_interface_permission:彈性網(wǎng)卡附加權(quán)限
alicloud_ecs_session_manager_status:會(huì)話狀態(tài)
alicloud_ecs_snapshot_group:快照一致性組
alicloud_ecs_storage_capacity_unit:存儲(chǔ)容量單位包SCU
alicloud_image_copy:復(fù)制鏡像
alicloud_image_export:導(dǎo)出自定義鏡像
alicloud_image_import:導(dǎo)入鏡像文件
alicloud_image_share_permission:鏡像共享權(quán)限
alicloud_instance:ECS實(shí)例
alicloud_key_pair:SSH密鑰對
alicloud_key_pair_attachment:綁定SSH密鑰對
alicloud_launch_template:實(shí)例啟動(dòng)模板
alicloud_network_interface:彈性網(wǎng)卡
alicloud_network_interface_attachment:附加彈性網(wǎng)卡
alicloud_ram_role_attachment:為實(shí)例授予RAM角色
alicloud_reserved_instance:預(yù)留實(shí)例券
alicloud_security_group_rule:安全組規(guī)則
alicloud_disks:塊存儲(chǔ)
alicloud_ecs_auto_snapshot_policies:自動(dòng)快照策略
alicloud_ecs_capacity_reservations:容量預(yù)定服務(wù)
alicloud_ecs_commands:云助手命令
alicloud_ecs_dedicated_host_clusters:專有宿主機(jī)集群
alicloud_ecs_dedicated_hosts:專有宿主機(jī)
alicloud_ecs_deployment_sets:部署集
alicloud_ecs_disks:塊存儲(chǔ)
alicloud_ecs_elasticity_assurances:彈性保障服務(wù)
alicloud_ecs_hpc_clusters:HPC集群
alicloud_ecs_image_components:鏡像組件
alicloud_ecs_image_pipelines:鏡像構(gòu)建模板
alicloud_ecs_invocations:云助手腳本
alicloud_ecs_key_pairs:SSH密鑰對
alicloud_ecs_launch_templates:實(shí)例啟動(dòng)模板
alicloud_ecs_network_interface_permissions:彈性網(wǎng)卡附加權(quán)限
alicloud_ecs_network_interfaces:彈性網(wǎng)卡
alicloud_ecs_prefix_lists:前綴列表
alicloud_ecs_snapshot_groups:快照一致性組
alicloud_ecs_storage_capacity_units:存儲(chǔ)容量單位包SCU
alicloud_instance_type_families:ECS實(shí)例規(guī)格族
alicloud_instance_types:ECS實(shí)例規(guī)格
alicloud_instances:ECS實(shí)例
alicloud_key_pairs:SSH密鑰對
alicloud_network_interfaces:彈性網(wǎng)卡
alicloud_regions:阿里云地域
alicloud_security_group_rules:安全組規(guī)則
alicloud_zones:阿里云可用區(qū)
安裝Terraform并配置權(quán)限
在本地安裝和配置Terraform
在本地使用Terraform,需要安裝并預(yù)配置Terraform。具體操作,請參見在本地安裝和配置Terraform。
為提高權(quán)限管理的靈活性和安全性,建議您創(chuàng)建RAM用戶,并為其授權(quán)。
登錄 RAM控制臺(tái)。
創(chuàng)建一個(gè)RAM用戶,用于執(zhí)行Terraform命令,并為該用戶創(chuàng)建AccessKey。具體步驟請參見創(chuàng)建RAM用戶。
為RAM用戶授權(quán)。具體步驟請參見為RAM用戶授權(quán)。
創(chuàng)建環(huán)境變量,用于存放身份認(rèn)證信息。
在AccessKey管理頁面上創(chuàng)建和查看您的AccessKey。
若無對應(yīng)環(huán)境變量,在執(zhí)行terraform模板時(shí)無法確認(rèn)身份信息,將會(huì)導(dǎo)致調(diào)用失敗。
使用在線服務(wù)(免安裝和權(quán)限配置)
如果您不想安裝Terraform,直接使用在線服務(wù)Cloud Shell。
阿里云Cloud Shell是一款幫助您運(yùn)維的免費(fèi)產(chǎn)品,預(yù)裝了Terraform的組件,并配置好身份憑證(Credentials)。因此您可直接在Cloud Shell中運(yùn)行Terraform的命令。更多信息,請參見在Cloud Shell中使用Terraform。
通過Cloud Shell使用Terraform時(shí),由于其銷毀特性會(huì)導(dǎo)致數(shù)據(jù)丟失,因此建議您使用Cloud Shell做簡單、快速的操作,例如調(diào)試。更多使用限制,請參見使用限制。
使用Terraform創(chuàng)建并管理ECS
下文以創(chuàng)建ECS為例,介紹如何使用Terraform創(chuàng)建并管理ECS資源。
創(chuàng)建terraform.tf文件,輸入以下內(nèi)容,并保存在當(dāng)前的執(zhí)行目錄中。
resource "alicloud_vpc" "vpc" { vpc_name = "tf_test_foo" cidr_block = "172.16.0.0/12" } resource "alicloud_vswitch" "vsw" { vpc_id = alicloud_vpc.vpc.id cidr_block = "172.16.0.0/21" zone_id = "cn-beijing-f" }
運(yùn)行
terraform init
進(jìn)行初始化,下載所需插件。運(yùn)行
terraform apply
開始創(chuàng)建。運(yùn)行
terraform show
查看已創(chuàng)建的專有網(wǎng)絡(luò)和交換機(jī)。您也可以登錄VPC控制臺(tái)查看專有網(wǎng)絡(luò)和交換機(jī)的屬性。
在terraform.tf文件中增加以下內(nèi)容。
resource "alicloud_security_group" "default" { name = "default" vpc_id = alicloud_vpc.vpc.id } resource "alicloud_security_group_rule" "allow_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 = "192.168.0.0/16" }
運(yùn)行
terraform apply
開始創(chuàng)建。運(yùn)行
terraform show
查看已創(chuàng)建的安全組和安全組規(guī)則。您也可以登錄ECS控制臺(tái)查看安全組和安全組規(guī)則。
在terraform.tf文件中增加以下內(nèi)容。
resource "alicloud_instance" "instance" { # cn-beijing availability_zone = "cn-beijing-f" security_groups = alicloud_security_group.default.*.id # series III instance_type = "ecs.e-c1m1.large" system_disk_category = "cloud_essd" image_id = "aliyun_2_1903_x64_20G_alibase_20240628.vhd" instance_name = "test_foo" vswitch_id = alicloud_vswitch.vsw.id internet_max_bandwidth_out = 10 password = "Terraform@Example" } output "public_ip" { value = alicloud_instance.instance.public_ip }
說明在上述示例中,指定了
internet_max_bandwidth_out= 10
,因此會(huì)自動(dòng)為實(shí)例分配一個(gè)公網(wǎng)IP,輸出到 output 中,供后續(xù)訪問實(shí)例使用。詳細(xì)的參數(shù)解釋請參見 阿里云參數(shù)說明。
運(yùn)行
terraform apply
開始創(chuàng)建。運(yùn)行
terraform show
查看已創(chuàng)建的ECS實(shí)例,并獲取publicip。運(yùn)行ssh root@<publicip>,并輸入設(shè)定好的密碼來訪問ECS實(shí)例。
完整代碼
您也可以在OpenAPI 門戶調(diào)試運(yùn)行代碼。一鍵運(yùn)行
resource "alicloud_vpc" "vpc" {
vpc_name = "tf_test_foo"
cidr_block = "172.16.0.0/12"
}
resource "alicloud_vswitch" "vsw" {
vpc_id = alicloud_vpc.vpc.id
cidr_block = "172.16.0.0/21"
zone_id = "cn-beijing-f"
}
resource "alicloud_security_group" "default" {
name = "default"
vpc_id = alicloud_vpc.vpc.id
}
resource "alicloud_security_group_rule" "allow_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 = "192.168.0.0/16"
}
resource "alicloud_instance" "instance" {
# cn-beijing
availability_zone = "cn-beijing-f"
security_groups = alicloud_security_group.default.*.id
# series III
instance_type = "ecs.e-c1m1.large"
system_disk_category = "cloud_essd"
image_id = "aliyun_2_1903_x64_20G_alibase_20240628.vhd"
instance_name = "test_foo"
vswitch_id = alicloud_vswitch.vsw.id
internet_max_bandwidth_out = 10
password = "Terraform@Example"
}
output "public_ip" {
value = alicloud_instance.instance.public_ip
}
相關(guān)文檔
更多實(shí)踐教程,請參見Terraform的教程。
更多Terraform的常用命令,請參見Terraform常用命令。
更多創(chuàng)建ECS實(shí)例的方式,請參見ECS實(shí)例交付(創(chuàng)建)方式。
資源編排服務(wù)為Terraform提供了托管的能力,您可以創(chuàng)建Terraform類型的模板,定義阿里云、AWS或Azure資源,配置資源參數(shù)和資源間的依賴關(guān)系。更多信息,請參見在資源編排(ROS)中使用Terraform。