日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

資源依賴

更新時間:

本文將介紹資源依賴關系。

在構建基礎設施時,您可能希望有一個可視化的依賴圖來表示基礎設施架構,進而了解您的基礎設施是如何連接和相互依賴的。

Terraform 在執(zhí)行時,會從你的配置文件中自動構建依賴圖,進而生成執(zhí)行計劃并刷新狀態(tài)。例如一個創(chuàng)建 ECS 的配置文件:

provider "alicloud" {
  # 配置你的阿里云憑據(jù)和地域信息
  # 配置你的阿里云憑據(jù),出于安全考慮,建議不要在這個文件中直接包含你的阿里云AccessKey和SecretKey,推薦使用環(huán)境變量或其它安全方式設置憑據(jù):
  # export ALICLOUD_ACCESS_KEY="<你的阿里云Access Key>"
  # export ALICLOUD_SECRET_KEY="<你的阿里云Secret Key>"
  region = "cn-hangzhou"
}

# 創(chuàng)建 VPC
resource "alicloud_vpc" "my_vpc" {
  vpc_name   = "main-vpc"
  cidr_block = "10.0.0.0/16"
}

# 創(chuàng)建 VSwitch
resource "alicloud_vswitch" "my_vswitch" {
  vpc_id       = alicloud_vpc.my_vpc.id
  cidr_block   = "10.0.1.0/24"
  zone_id      = "cn-hangzhou-h"
  vswitch_name = "main-vswitch"
}

# 創(chuàng)建安全組
resource "alicloud_security_group" "my_sg" {
  vpc_id = alicloud_vpc.my_vpc.id
  name   = "main-security-group"
}

# 配置安全組規(guī)則允許 SSH 訪問
resource "alicloud_security_group_rule" "allow_ssh" {
  type              = "ingress"
  ip_protocol       = "tcp"
  nic_type          = "intranet"
  policy            = "accept"
  port_range        = "22/22"
  priority          = 1
  security_group_id = alicloud_security_group.my_sg.id
  cidr_ip           = "0.0.0.0/0"
}

# 創(chuàng)建 ECS 實例
resource "alicloud_instance" "my_instance" {
  instance_name              = "Ubuntu20-Instance"
  image_id                   = "ubuntu_20_04_x64_20G_alibase_20240508.vhd" # Ubuntu 20.04 的鏡像 ID
  instance_type              = "ecs.c6.large"                              # 2核4G
  security_groups            = [alicloud_security_group.my_sg.id]
  vswitch_id                 = alicloud_vswitch.my_vswitch.id
  internet_charge_type       = "PayByTraffic"
  instance_charge_type       = "PostPaid"
  system_disk_category       = "cloud_efficiency"
  password                   = "Abc@12345" # 設置登錄密碼
  internet_max_bandwidth_out = 10          # 設置帶寬大于 0,自動分配公網(wǎng) IP

  tags = {
    Name = "ubuntu20"
  }
}

ECS 實例的創(chuàng)建同時依賴于安全組和 VSwitch 的創(chuàng)建,依賴關系的建立是通過屬性值 security_groups 和 vswitch_id 的賦值來建立依賴關系,Terraform 在執(zhí)行時通過創(chuàng)建依賴圖來確定資源操作的正確順序。在有多個資源的復雜情況下,對于不存在依賴關系的資源,Terraform 將并行執(zhí)行操作。

依賴關系

Terraform 有兩種依賴關系:隱式依賴(Implicit Dependence)和顯式依賴(Explicit Dependence)。隱式依賴是 Terraform 已知的,而顯式依賴是未知的。

隱式依賴(Implicit Dependence)

當一個資源的創(chuàng)建依賴于另一個資源創(chuàng)建后的信息時,需要用到隱式依賴來讓 Terraform 知曉依賴關系。

在這個示例中,VSwitch 和安全組的創(chuàng)建依賴于 VPC;ECS 實例的創(chuàng)建依賴于 VSwtich 和安全組;安全組規(guī)則的創(chuàng)建依賴于安全組,這些依賴關系是隱式的。

針對隱式依賴關系,Terraform 通過屬性值引用賦值的方式來知曉。

image (21).png

例如,instance 的 vswitch_id 參數(shù)值是對 my_vswitch 資源的引用,進而建立了 instance 資源對 vswitch 資源的隱式依賴關系。

針對隱式依賴關系,Terraform 能夠推斷出依賴關系并根據(jù)這些依賴關系知道不同資源創(chuàng)建的順序,進而確保配置文件中定義的所有資源都能按照這個順序創(chuàng)建成功。

在這個例子中,資源之間的依賴關系和創(chuàng)建順序正如下圖所示:

graph.svg

當 Terraform 讀取配置時,它將首先確保 vpc my_vpc 在 vswtich my_vswitch 和安全組 my_sg 之前創(chuàng)建,同時也會確保在 ECS 實例 my_instance 會在 my_vswitch 和 my_sg 之后完成創(chuàng)建。然后,將所有資源的屬性保存在狀態(tài)文件中,并將 my_vswitch 和 my_sg 中的 vpc_id 參數(shù)設置為 my_vpc 的 id 的值,將 my_instance 的 vswitch_id 和 security_groups 的值設置為 my_vswitch 和 my_sg 的值。

顯示依賴(Explicit Dependence)

有時,某個資源只能在另一個資源創(chuàng)建后才能創(chuàng)建,在這種情況下,你需要顯式地引入依賴關系,該依賴關系配置在 Terraform 配置代碼內部,對 Terraform 不可見。在這種情況下,你可以使用 depends_on 來顯式聲明依賴關系。

depends_on 參數(shù)給你更多的靈活性來控制 Terraform 在配置中處理資源的順序。無論資源類型是什么,depends_on 可以在模塊內使用,該值可以是指向資源的表達式。

例如,假設你需要在上述例子的基礎上再增加兩個端口 443 和 8080 的訪問規(guī)則,并希望 8080 端口規(guī)則在 443 端口規(guī)則創(chuàng)建成功之后才創(chuàng)建。這種依賴關系對 Terraform 不可見,必須顯式提及。你可以使用 depends_on 顯式聲明 8080 端口規(guī)則對 443 端口規(guī)則的依賴:

image (22).png

在通過表達式賦值時,Terraform 將處理元參數(shù) depends_on 中指定的資源,并確保在創(chuàng)建 8080 訪問規(guī)則之前先創(chuàng)建 443 訪問規(guī)則。在執(zhí)行 terraform apply 后,你將注意到 8080 訪問規(guī)則是在 443 訪問規(guī)則之后創(chuàng)建的。

graph (1).svg

最后,我們需要注意的是,資源定義的順序并不會影響 Terraform 執(zhí)行的方式,因此你可以按照對你和你的團隊最有意義的方式來組織配置文件。