4. 便利な使い方¶
以下Terraformにおける、より便利な使い方について簡単に記載します。
4.1. 依存性の有るリソースを作成する¶
作成するリソース間に依存関係を設けたい場合があります。
たとえば FIC-Routerを作成してから、そのFIC-Routerを利用したFIC-Connectionを作成したい というようなケースです。
Terraformはこうした依存関係を考慮しながらリソースの作成、削除を行うことが可能です。
依存関係を設定するには2つの方法があります。
- resourceセクションから、別なリソースを参照させる
- resourceセクションにおいて、depends_onを利用する
たとえば以下のような例をご覧ください。
resource "fic_eri_router_v1" "router_1" {
name = "terraform_router_1"
area = "JPEAST"
user_ip_address = "10.0.0.0/27"
redundant = true
}
resource "fic_eri_port_v1" "port_1" {
name = "terraform_port_1"
switch_name = "[Switch名]"
port_type = "10G"
vlan_ranges {
start = 1137
end = 1152
}
}
resource "fic_eri_port_v1" "port_2" {
name = "terraform_port_2"
switch_name = "[Switch名]"
port_type = "10G"
depends_on = [fic_eri_port_v1.port_1]
vlan_ranges {
start = 1153
end = 1168
}
}
resource "fic_eri_router_paired_to_port_connection_v1" "connection_1" {
name = "terraform_connection_1"
source_router_id = fic_eri_router_v1.router_1.id
source_group_name = "group_1"
source_information {
ip_address = "10.0.1.1/30"
as_path_prepend_in = "4"
as_path_prepend_out = "4"
}
source_information {
ip_address = "10.0.1.5/30"
as_path_prepend_in = "2"
as_path_prepend_out = "1"
}
source_route_filter_in = "fullRoute"
source_route_filter_out = "fullRouteWithDefaultRoute"
destination_information {
port_id = fic_eri_port_v1.port_1.id
vlan = fic_eri_port_v1.port_1.vlan_ranges.0.start
ip_address = "10.0.1.2/30"
asn = "65000"
}
destination_information {
port_id = fic_eri_port_v1.port_2.id
vlan = fic_eri_port_v1.port_2.vlan_ranges.0.start
ip_address = "10.0.1.6/30"
asn = "65000"
}
bandwidth = "10M"
}
上記の例では、
- 1つ目のresourceセクションである resource "fic_eri_router_v1" "router_1" においてFIC-Routerを作成
- 2つ目、3つ目のresourceセクションである "fic_eri_port_v1" "port_1" および "fic_eri_port_v1" "port_2" において2つのFIC-Portを作成
- 4つ目のresourceセクションである "fic_eri_router_paired_to_port_connection_v1" "connection_1" においてFIC-Connectionを作成
ということをやっています。
ここでFIC-Connectionの作成部を見てみましょう。
resource "fic_eri_router_paired_to_port_connection_v1" "connection_1" {
name = "terraform_connection_1"
source_router_id = fic_eri_router_v1.router_1.id <-- 重要
source_group_name = "group_1"
(略)
この中で利用されている fic_eri_router_v1.router_1.id
という表記は
fic_eri_router_v1.router_1 として作成したリソースの id に設定された値を参照するという意味を持ちます。
このように記載することで、Terraformによるリソース作成時は、
- まずFIC-Routerを作成する
- 次に、そのFIC-RouterのIDを参照しつつFIC-Connectionを作成する
という挙動が行われます。
他にもFIC-Portの作成部に以下のような表記があります。
resource "fic_eri_port_v1" "port_2" {
name = "terraform_port_2"
switch_name = "[Switch名]"
port_type = "10G"
depends_on = [fic_eri_port_v1.port_1] <-- 重要
vlan_ranges {
start = 1153
end = 1168
}
}
この depends_on
というパラメータをresourceセクションに記載することで、強制的な依存関係を設けることが可能になります。
上記の例では、 fic_eri_port_v1.port_2
は fic_eri_port_v1.port_1
に依存する
ということを明確にしています。これによりTerraformは以下のような処理を行う必要があると認識し、リソースの作成や削除の順序を自動的に制御します。
fic_eri_port_v1.port_2
の作成前にfic_eri_port_v1.port_1
の作成が完了している必要があるfic_eri_port_v1.port_2
の削除が終わるまでfic_eri_port_v1.port_1
の削除をしてはならない