全部產品
Search
文件中心

Elastic Compute Service:使用Terraform部署ECS

更新時間:Nov 01, 2024

Terraform是一個開源的基礎設施即代碼工具,允許開發人員通過聲明式的語言來定義和管理基礎設施的配置,提供了一種簡潔的方式來建立、修改或刪除ECS資源,減少手動操作的繁瑣和錯誤,提高基礎設施的可管理性和可維護性。本文為您介紹如何安裝與配置Terraform、使用Terraform建立ECS執行個體。

更多Terraform資訊,請參見什麼是Terraform

支援的資源清單

說明
  • Resource:資源,指新建立的資源,用於定義基礎設施組件,例如一個ECS執行個體、一個虛擬機器、一個網路安全性群組等。

  • Data Source:資料來源,用於查詢和擷取已有的基礎設施組件的資訊,在Terraform配置中使用這些資訊來引用或配置其他資源。

安裝Terraform並配置許可權

在本地安裝和配置Terraform

在本地使用Terraform,需要安裝並預配置Terraform。具體操作,請參見在本地安裝和配置Terraform

  • 由於阿里雲帳號(主帳號)擁有資源的所有許可權,其AccessKey一旦泄露風險巨大,所以建議您使用滿足最小化許可權需求的RAM使用者的AccessKey。具體操作方式請參見建立AccessKey

  • 建立環境變數,用於存放身份認證資訊。

    AccessKey管理頁面上建立和查看您的AccessKey。

    若無對應環境變數,在執行terraform模板時無法確認身份資訊,將會導致調用失敗。

使用線上服務(免安裝和許可權配置)

如果您不想安裝Terraform,直接使用線上服務Cloud Shell

阿里雲Cloud Shell是一款協助您營運的免費產品,預裝了Terraform的組件,並配置好身份憑證(Credentials)。因此您可直接在Cloud Shell中運行Terraform的命令。更多資訊,請參見在Cloud Shell中使用Terraform

重要

通過Cloud Shell使用Terraform時,由於其銷毀特性會導致資料丟失,因此建議您使用Cloud Shell做簡單、快速的操作,例如調試。更多使用限制,請參見使用限制

使用Terraform建立並管理ECS

下文以建立ECS為例,介紹如何使用Terraform建立並管理ECS資源。

  1. 建立專用網路和交換器。

    1. 建立terraform.tf檔案,輸入以下內容,並儲存在當前的執行目錄中。

      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"
      }
    2. 運行terraform init進行初始化,下載所需外掛程式。

    3. 運行terraform apply開始建立。

    4. 運行terraform show查看已建立的專用網路和交換器。

      您也可以登入VPC控制台查看專用網路和交換器的屬性。

  2. 在上一步建立的專用網路中建立一個安全性群組,並添加一個允許192.168.0.0/16地址塊訪問的安全性群組規則。

    1. 在terraform.tf檔案中增加以下內容。

      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"
      }
    2. 運行terraform apply開始建立。

    3. 運行terraform show查看已建立的安全性群組和安全性群組規則。

      您也可以登入ECS控制台查看安全性群組和安全性群組規則。

  3. 建立ECS執行個體。

    1. 在terraform.tf檔案中增加以下內容。

      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,因此會自動為執行個體分配一個公網IP,輸出到 output 中,供後續訪問執行個體使用。

      • 詳細的參數解釋請參見 阿里雲參數說明

    2. 運行terraform apply開始建立。

    3. 運行terraform show查看已建立的ECS執行個體,並擷取publicip。

    4. 運行ssh root@<publicip>,並輸入設定好的密碼來訪問ECS執行個體。

完整代碼

說明

您也可以在OpenAPI 門戶調試運行代碼。一鍵運行

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
}

相關文檔

更多實踐教程,請參見Terraform的教程

更多Terraform的常用命令,請參見Terraform常用命令

更多建立ECS執行個體的方式,請參見ECS執行個體交付(建立)方式

ROS提供了Terraform託管服務,因此您可以直接在ROS控制台部署Terraform模板。詳細操作,請參見建立Terraform類型資源棧