1.1.2.4. Terraformの準備をする

本書中の設定値の「< >」の表記については、ご利用の環境により各自入力いただく箇所となります("<"から">"までを設定値に置き換えてください)。
各コマンドの実行については、rootユーザーに昇格して実行する前提で記載しています。

各種ツールをインストールする

注釈

  • Terrafromのインストール方法については、「Install Terraform」をご参照ください。
  1. 以下コマンドを実行し、「yum-utils」をインストールします。
    # yum install yum-utils
    
  2. 以下コマンドを実行し、「Terraform」のインストールに必要なリポジトリを追加します。
    # yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
    
  3. 以下コマンドを実行し、「Terraform」をインストールします。
    # yum install terraform
    
  4. 以下コマンドを実行し、「Terraform」がインストールされていることを確認します(本項記載時の「Terraform」のバージョンは"1.4.6"です)。
    # terraform -version
    
    Terraform v1.4.6
    on linux_amd64
    

設定ファイルを作成する

注釈

  1. 以下のコマンドを実行し、「Create.tf」を作成します。

    注釈

    • 「SDPFポータルのAPI鍵」および「SDPFポータルのAPI秘密鍵」については、「8.3. ユーザー情報を確認して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"
      }
    
    }