4. 便利な使い方¶
以下Terraformにおける、より便利な使い方について簡単に記載します。
4.1. 依存性の有るリソースを作成する¶
作成するリソース間に依存関係を設けたい場合があります。
例えば以下のようなケースです。
- ロジカルネットワークを作成してから、その配下にサブネットを作成したい
- キーペアを作成してから、それをインスタンスに埋め込みたい
Terraformはこうした依存関係を考慮しながらリソースの作成、削除を行うことが可能です。
依存関係を設定するには2つの方法があります。
4.1.1. resourceセクションから、別なリソースを参照させる¶
上記の例1( ロジカルネットワークを作成してから、その配下にサブネットを作成したい
)に対応したtfファイル例を示します。
resource "ecl_network_network_v2" "network_1" {
name = "network-1"
}
resource "ecl_network_subnet_v2" "subnet_1" {
name = "subnet-1"
network_id = ecl_network_network_v2.network_1.id
cidr = "192.168.1.0/24"
gateway_ip = "192.168.1.1"
}
上記の例では、1つ目のresourceセクションでロジカルネットワークを作成しています。
2つ目のresourceセクションではサブネットを作成していますが、その際サブネット作成時のパラメータである network_id
に、ecl_network_network_v2.network_1.id
を指定しています。
これは、 1つ目のresourceセクションで作成したロジカルネットワークのIDを参照する
という意味になります。
このように記載することで、Terraformによるリソース作成時は、
- まずロジカルネットワークを作成する
- 次に、そのIDを参照しつつサブネットを作成する
という挙動が行われますし、リソースの削除時には、
- まずサブネットを削除する
- 次に、(依存関係が解消されたので)ロジカルネットワークを削除する
という挙動が行われます。
4.1.2. resourceセクションにおいて、depends_onを利用する¶
tfファイル上は表わせない暗黙の依存関係が Smart Data Platform のAPI側で存在するような場合、 resourceセクションから、別なリソースを参照させる の方法では不十分な場合があります。
その場合、 depends_on
というパラメータをresourceセクションに記載することで、強制的に依存関係を設けることが可能です。
具体的な例を以下に示します。
resource "ecl_network_network_v2" "network_1" {
name = "network_1"
plane = "data"
}
resource "ecl_network_subnet_v2" "subnet_1" {
name = "subnet_1"
network_id = ecl_network_network_v2.network_1.id
cidr = "192.168.1.0/24"
gateway_ip = "192.168.1.1"
allocation_pools {
start = "192.168.1.100"
end = "192.168.1.200"
}
}
resource "ecl_compute_instance_v2" "instance_1" {
name = "instance_1"
block_device {
uuid = "1f7ff189-f7a4-4d74-99cc-7860614d2ae7"
source_type = "image"
volume_size = 40
boot_index = 0
destination_type = "volume"
delete_on_termination = true
}
network {
uuid = ecl_network_network_v2.network_1.id
}
depends_on = [ecl_network_subnet_v2.subnet_1] <-- depends_on による依存関係の強制付与
}
インスタンスを定義しているresourceセクションにおいて、 depends_on
によるサブネットへの依存関係が定義されています。
上記の例では、 ecl_compute_instance_v2.instance1
自体は ecl_network_network_v2.network_1.id
のみを参照していますが、 depends_on = [ecl_network_subnet_v2.subnet_1]
を追加することで強制的に ecl_network_subnet_v2.subnet_1
への依存関係を追加しています。