provider裡面提供了資源,接下來就開始定義阿裡雲的資源了。我們将阿裡雲的插件也就是provider安裝好了,接下來就是調用裡面的資源。
在terraform裡面最重要的就是資源,資源主要來自provider裡面,每個資源裡面都有很多屬性。
什麼是資源呢,比如網絡,vpc,安全組,ecs執行個體以及DNS的域名記錄,這些都是資源。
可以了解每個産品都是資源。
既然是要往配置檔案裡面寫資源,那麼它也是有它的格式的。
它的關鍵字是resource,後面就是資源的類型,後面就是自己定義資源的名稱,資源的名稱是自己定義的,因為我可能建立2個vpc,vpc的名稱肯定不能讓它一緻,
vpc是阿裡雲的專有網絡,你可以了解為這個就是網段,建立多個vpc,vpc之間是有隔離的邏輯的。
比如可以建立測試環境的vpc,也可以建立生産環境的,它其實就是一個網段。
要申請阿裡雲的資源就需要知道在代碼裡面怎麼寫這些資源。如果不了解這些,強烈建議去阿裡雲的控制台上看看是如何使用的。
可以看到裡面有region資訊,專有網絡的名稱,位址段。
除了專有網絡之外,這裡還有交換機,填寫名稱和可用區,網段的建議,如下所示。
隻要屬性上面的界面,然後使用代碼的方式來實踐。現在就要去tf的配置檔案裡面寫我們申請哪些資源。
VPC
Example Usage
Basic Usage(聲明一個專有網絡,專有網絡名稱和其網段)
resource "alicloud_vpc" "vpc" {
vpc_name = "tf_test_foo"
cidr_block = "172.16.0.0/12"
}
- cidr_block - (Optional) The CIDR block for the VPC. The
is Optional and default value is cidr_block
after v1.119.0+.172.16.0.0/12
- vpc_name - (Optional, Available in v1.119.0+) The name of the VPC. Defaults to null.
你要寫資源就需要打開文檔了,搜尋VPC。
第一個就是關鍵字+資源類型+自定義資源的名稱(這個名稱就是對應阿裡雲控制台建立vpc名稱那一欄)網段自己去配置設定。
注意這裡交換機和vpc是一起建立的,你得确定交換機屬于哪個vpc裡面,屬于哪個專有網絡。
這裡會有綁定的關系。下面就是資源的屬性
交換機要關聯vpc,怎麼關聯呢?通過vpc_id這個屬性,怎麼拿到這個資源的id呢?就需要資源參數的引用,也就是在一個資源裡面引用另外一個資源屬性或者參數。
這就需要資源類型(alicloud_vpc).name(定義的資源名稱 vpc).屬性(比如引用執行個體化之後的id)
在vpc裡面沒有定義id,因為需要建立完之後才有id,這裡引用的是執行個體化之後的id,如果在路由器裡面要使用vpc_name,那麼直接可以這樣寫vpc_id = alicloud_vpc.vpc.vpc_name
有些參數是建立完之後才可以拿到的。
ECS安全組
類似于虛拟的防火牆,一般不開安全組,不開端口,那麼通路不了。是以需要在安全組裡面添加一些規則讓安全組去關聯。
阿裡雲登入 - 歡迎登入阿裡雲,安全穩定的雲計算服務平台
注意安全組也需要關聯VPC,是以在建立安全組的代碼裡面也會引用vpc id的資訊。
最後安全組無非就是開通端口這些。
Terraform Registry
安全組組成為 安全組+規則 組裡面包含一組規則
resource "alicloud_security_group" "group" {
name = "new-group"
vpc_id = alicloud_vpc.vpc.id
security_group_type = "normal"
}
vpc_id = alicloud_vpc.vpc.id 要關聯vpc,這是還是要引用其id。
- security_group_type - (Optional, ForceNew, Available in 1.58.0+) The type of the security group. Valid values:
: basic security group. normal
: advanced security group For more information.enterprise
可以看到一個是普通類型,一個是企業類型,這裡設定為普通的。
最後就是建立安全組規則。
這裡有個出入方向,得選一個是出方向還是入方向,然後授權是允許還是拒絕。
優先級怎麼設定。
協定是什麼等等這些參數。
這裡開放端口,如果開放一個端口就是80/80,如果是範圍就是1-65535。
這個就需要引入安全組的id,security_group_id = alicloud_security_group.group.id,資源類型+名稱+資源的屬性,這樣就可以引用,并且關聯上。
resource "alicloud_security_group_rule" "allow_80_tcp" {
type = "ingress"
ip_protocol = "tcp"
nic_type = "intranet"
policy = "accept"
port_range = "80/80"
priority = 1
security_group_id = alicloud_security_group.group.id
cidr_ip = "0.0.0.0/0"
}