1.1.2.4. Terraformを準備する¶
本書中の設定値の「< >」の表記については、ご利用の環境により各自入力いただく箇所となります("<"から">"までを設定値に置き換えてください)。
各コマンドの実行については、rootユーザーに昇格して実行する前提で記載しています。
各種ツールをインストールする¶
注釈
- Terrafromのインストール方法については、「Install Terraform」をご参照ください。
- 以下コマンドを実行し、「yum-utils」をインストールします。
# yum install yum-utils
- 以下コマンドを実行し、「Terraform」のインストールに必要なリポジトリを追加します。
# yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
- 以下コマンドを実行し、「Terraform」をインストールします。
# yum install terraform
- 以下コマンドを実行し、「Terraform」がインストールされていることを確認します(本項記載時の「Terraform」のバージョンは"1.4.6"です)。
# terraform -version
Terraform v1.4.6 on linux_amd64
設定ファイルを作成する¶
注釈
- 各リソースの設定方法については、「Terraform ECL DOCUMENTATION」をご参照ください。
- 以下のコマンドを実行し、「Create.tf」を作成します。
注釈
- 「SDPFポータルのAPI鍵」および「SDPFポータルのAPI秘密鍵」については、「8.4. API鍵を新規生成/再生成する」をご参照ください。
- 「jpX」および「対象のSDPFクラウドのテナントID(jpXリージョン)」については、「8.2. テナントIDを確認する」をご参照ください。
- 「OSのテンプレート名」については、「3.2. メニュー詳細」内にある対象のOSをクリックし「3.2.申し込み方法」をご参照ください。
- 「vSRX_<最新バージョン>_2CPU_4GB_8IF_STD」については、「2. ファイアウォール機能」内にある「バージョン」をご参照ください。EOL情報も記載されています。
# mkdir /etc/terrafrom/work # cd /etc/terrafrom/work # touch Create.tf # chmod 600 Create.tf # vi Create.tf
terraform { required_providers { ecl = { source = "nttcom/ecl" version = "2.4.6" } } } /* プロバイダー */ provider "ecl" { auth_url = "https://keystone-<jpX>-ecl.api.ntt.com/v3/" user_name = "<SDPFポータルのAPI鍵>" password = "<SDPFポータルのAPI秘密鍵>" tenant_id = "<対象のSDPFクラウドのテナントID(jpXリージョン)>" user_domain_id = "default" project_domain_id = "default" } /* ロジカルネットワーク */ resource "ecl_network_network_v2" "network_vm" { name = "network_vm" admin_state_up = "true" } resource "ecl_network_subnet_v2" "subnet_1" { network_id = ecl_network_network_v2.network_vm.id cidr = "172.16.201.0/24" gateway_ip = "172.16.201.7" dns_nameservers = ["8.8.8.8","8.8.4.4"] host_routes{ destination_cidr = "169.254.0.0/17" next_hop = "172.16.201.7" } } resource "ecl_network_network_v2" "network_ficgw" { name = "network_ficgw" admin_state_up = "true" } resource "ecl_network_subnet_v2" "subnet_ficgw" { network_id = ecl_network_network_v2.network_ficgw.id cidr = "172.16.202.0/28" } resource "ecl_network_network_v2" "network_inetgw" { name = "network_inetgw" admin_state_up = "true" } resource "ecl_network_subnet_v2" "subnet_inetgw" { network_id = ecl_network_network_v2.network_inetgw.id cidr = "172.16.203.0/28" } /* サーバーインスタンス */ data "ecl_imagestorages_image_v2" "image_1" { most_recent = true name = "<OSのテンプレート名>" } resource "ecl_compute_volume_v2" "volume_1" { name = "Alkano-sv01-root-volume" size = 100 image_id = data.ecl_imagestorages_image_v2.image_1.id } resource "ecl_compute_instance_v2" "boot-from-volume" { name = "Alkano-sv01" flavor_id = "8CPU-16GB" block_device { uuid = ecl_compute_volume_v2.volume_1.id source_type = "volume" boot_index = 0 destination_type = "volume" delete_on_termination = true } network { uuid = ecl_network_network_v2.network_vm.id fixed_ip_v4 = "172.16.201.61" } } /* 共通機能GW */ data "ecl_network_common_function_pool_v2" "common_function_pool_1" { } resource "ecl_network_common_function_gateway_v2" "common_function_gateway_1" { name = "common_function_gateway_1" common_function_pool_id = data.ecl_network_common_function_pool_v2.common_function_pool_1.id } /* FIC接続GW */ data "ecl_network_fic_gateway_v2" "fic_gateway_1" { } resource "ecl_network_gateway_interface_v2" "fic_gw_interface_1" { name = "fic_gateway_interface_1" fic_gw_id = data.ecl_network_fic_gateway_v2.fic_gateway_1.id netmask = 28 network_id = ecl_network_network_v2.network_ficgw.id gw_vipv4 = "172.16.202.10" primary_ipv4 = "172.16.202.11" secondary_ipv4 = "172.16.202.12" service_type = "fic" vrid = 1 depends_on = [ecl_network_subnet_v2.subnet_ficgw] } resource "ecl_network_static_route_v2" "static_route_1" { name = "to-vSRX" fic_gw_id = data.ecl_network_fic_gateway_v2.fic_gateway_1.id destination = "0.0.0.0/0" nexthop = "172.16.202.7" service_type = "fic" depends_on = [ecl_network_gateway_interface_v2.fic_gw_interface_1] } resource "ecl_network_static_route_v2" "static_route_2" { name = "to-vm" fic_gw_id = data.ecl_network_fic_gateway_v2.fic_gateway_1.id destination = "172.16.201.0/24" nexthop = "172.16.202.7" service_type = "fic" depends_on = [ecl_network_gateway_interface_v2.fic_gw_interface_1] } /* インターネット接続GW */ data "ecl_network_internet_service_v2" "internet_service_1" { } data "ecl_network_qos_options_v2" "qos_options_1" { name = "10Mbps-BestEffort" } resource "ecl_network_internet_gateway_v2" "internet_gateway_1" { name = "internet_gateway_1" internet_service_id = data.ecl_network_internet_service_v2.internet_service_1.id qos_option_id = data.ecl_network_qos_options_v2.qos_options_1.id } resource "ecl_network_public_ip_v2" "public_ip_1" { name = "public_ip_1" internet_gw_id = ecl_network_internet_gateway_v2.internet_gateway_1.id submask_length = 32 } resource "ecl_network_gateway_interface_v2" "inet_gw_interface_1" { name = "inet_gw_interface_1" internet_gw_id = ecl_network_internet_gateway_v2.internet_gateway_1.id netmask = 28 network_id = ecl_network_network_v2.network_inetgw.id gw_vipv4 = "172.16.203.10" primary_ipv4 = "172.16.203.11" secondary_ipv4 = "172.16.203.12" service_type = "internet" vrid = 1 depends_on = [ecl_network_subnet_v2.subnet_inetgw] } resource "ecl_network_static_route_v2" "static_route_3" { name = "to-vSRX" internet_gw_id = ecl_network_internet_gateway_v2.internet_gateway_1.id destination = format("%s/%s",ecl_network_public_ip_v2.public_ip_2.cidr,ecl_network_public_ip_v2.public_ip_2.submask_length) nexthop = "172.16.203.7" service_type = "internet" depends_on = [ecl_network_gateway_interface_v2.inet_gw_interface_1, ecl_network_public_ip_v2.public_ip_2] } /* vSRX */ data "ecl_vna_appliance_plan_v1" "appliance_plan_1" { name = "vSRX_<最新バージョン>_2CPU_4GB_8IF_STD" } /* 1号機 */ resource "ecl_vna_appliance_v1" "appliance_1" { name = "vSRX#1" description = "" default_gateway = "172.16.202.10" availability_zone = "zone1-groupa" virtual_network_appliance_plan_id = data.ecl_vna_appliance_plan_v1.appliance_plan_1.id /* vSRX Interface(FIC接続GW用ロジカルネットワーク) */ interface_1_info { name = "I/F_to_fic-gw" network_id = ecl_network_network_v2.network_ficgw.id } interface_1_fixed_ips { ip_address = "172.16.202.8" } /* vSRX Interface(サーバーインスタンス用ロジカルネットワーク) */ interface_2_info { name = "I/F_to_vm" network_id = ecl_network_network_v2.network_vm.id } interface_2_fixed_ips { ip_address = "172.16.201.8" } /* vSRX Interface(インターネット接続GW用ロジカルネットワーク) */ interface_3_info { name = "I/F_to_inet-GW" network_id = ecl_network_network_v2.network_inetgw.id } interface_3_fixed_ips { ip_address = "172.16.203.8" } /* vSRX Interface(共通機能GW用ロジカルネットワーク) */ interface_4_info { name = "I/F_to_Common-features-GW" network_id = ecl_network_common_function_gateway_v2.common_function_gateway_1.network_id } interface_4_fixed_ips { ip_address = "169.254.0.8" } /* vSRX 冗長化(SDPFポータル側の許可されたアドレスペア設定) */ interface_1_allowed_address_pairs { ip_address = "172.16.202.7" mac_address = "" type = "vrrp" vrid = "10" } interface_2_allowed_address_pairs { ip_address = "172.16.201.7" mac_address = "" type = "vrrp" vrid = "20" } interface_3_allowed_address_pairs { ip_address = "172.16.203.7" mac_address = "" type = "vrrp" vrid = "30" } interface_4_allowed_address_pairs { ip_address = "169.254.0.7" mac_address = "" type = "vrrp" vrid = "40" } } /* 2号機 */ resource "ecl_vna_appliance_v1" "appliance_2" { name = "vSRX#2" description = "" default_gateway = "172.16.202.10" availability_zone = "zone1-groupb" virtual_network_appliance_plan_id = data.ecl_vna_appliance_plan_v1.appliance_plan_1.id /* vSRX Interface(FIC接続GW用ロジカルネットワーク) */ interface_1_info { name = "I/F_to_fic-gw" network_id = ecl_network_network_v2.network_ficgw.id } interface_1_fixed_ips { ip_address = "172.16.202.9" } /* vSRX Interface(サーバーインスタンス用ロジカルネットワーク) */ interface_2_info { name = "I/F_to_vm" network_id = ecl_network_network_v2.network_vm.id } interface_2_fixed_ips { ip_address = "172.16.201.9" } /* vSRX Interface(インターネット接続GW用ロジカルネットワーク) */ interface_3_info { name = "I/F_to_inet-GW" network_id = ecl_network_network_v2.network_inetgw.id } interface_3_fixed_ips { ip_address = "172.16.203.9" } /* vSRX Interface(共通機能GW用ロジカルネットワーク) */ interface_4_info { name = "I/F_to_Common-features-GW" network_id = ecl_network_common_function_gateway_v2.common_function_gateway_1.network_id } interface_4_fixed_ips { ip_address = "169.254.0.9" } /* vSRX 冗長化(SDPFポータル側の許可されたアドレスペア設定) */ interface_1_allowed_address_pairs { ip_address = "172.16.202.7" mac_address = "" type = "vrrp" vrid = "10" } interface_2_allowed_address_pairs { ip_address = "172.16.201.7" mac_address = "" type = "vrrp" vrid = "20" } interface_3_allowed_address_pairs { ip_address = "172.16.203.7" mac_address = "" type = "vrrp" vrid = "30" } interface_4_allowed_address_pairs { ip_address = "169.254.0.7" mac_address = "" type = "vrrp" vrid = "40" } }