1. Terraform について

1.1. Terraform とは

HashiCorp社 により開発されているインフラなどの構築自動化ツールであり、 AWS(Amazon Web Service) , Google Cloud などの主要なクラウドサービスを一括して制御することが可能です。

Terraform Custom Provider for Flexible InterConnect をご利用いただくことで、 Flexible InterConnect についても Terraform から制御いただくことが可能となります。

../../../_images/overview2.png

1.2. Terraform の設定ファイル

Terraform では、以下のような設定ファイルを基に各種クラウドサービス(など)のリソースを制御します。

簡単な設定ファイルの例を以下に示します。

provider "fic" {
  auth_url          = "https://api.ntt.com/keystone/v3/"
  user_name         = "[API鍵]"
  password          = "[API秘密鍵]"
  tenant_id         = "[テナントID]"
  user_domain_id    = "default"
  project_domain_id = "default"
}

resource "fic_eri_port_v1" "port_1" {
  name            = "terraform_port_1"
  switch_name     = "[Switch名]"
  port_type       = "10G"
  number_of_vlans = 16
  is_activated    = false
}

設定ファイルは HCL (HashiCorp Configuration Language) という言語で記載し、拡張子 .tf として保存します。

以下、設定フィアルを tfファイル と記載します。

1.3. Terraform Custom Provider for Flexible InterConnect の設定ファイルの構成

Terraform Custom Provider for Flexible InterConnect の tfファイルには最低2つのセクションを記載します。

また、状況に応じて、

も利用いただけます。

1.3.1. provider セクション

provider セクションには、 Terraform Custom Provider for Flexible InterConnect が利用する Flexible InterConnect の認証情報を記載します。

具体例を以下に示します。

provider "fic" {
  auth_url          = "https://api.ntt.com/keystone/v3/"
  user_name         = "[API鍵]"
  password          = "[API秘密鍵]"
  tenant_id         = "[テナントID]"
  user_domain_id    = "default"
  project_domain_id = "default"
}

1.3.2. resource セクション

resource セクションには、 Flexible InterConnect 上に作成するリソースに関する情報を記載します。

下記の例では、 FIC-Port を作成しています。

resource "fic_eri_port_v1" "port_1" {
  name            = "terraform_port_1"
  switch_name     = "[Switch名]"
  port_type       = "10G"
  number_of_vlans = 16
  is_activated    = false
}

なお、 tfファイル上定義されたリソース(上記例においてはFIC-Portが該当)は、Terraform内部では fic_eri_port_v1.port_1 という識別子で扱われます。

(セクションの冒頭に書かれる resource より右の2つの値を . でつなげたものになります)

1.3.3. data セクション

data セクションを利用することで、resource セクション上の各種リソースのパラメータに、APIから取得した値を渡すことが可能となります。

例として、ある物理スイッチに Terraformにより新規にポートを作成する 場合を考えます。

この場合、通常以下のような操作が必要になります。

  1. API経由で条件に見合うスイッチを検索する
  2. そのスイッチ名を指定してポートを作成する

tfファイルとしては以下のようになります。

resource "fic_eri_port_v1" "port_1" {
  name            = "terraform_port_1"
  switch_name     = "[検索したSwitch名を記載]"
  port_type       = "10G"
  number_of_vlans = 16
  is_activated    = false
}

data セクションを利用すると、上記1の操作もtfファイル内で完結することが可能です。

具体例としては以下のようになります。

data "fic_eri_switch_v1" "switch_1" {
  area      = "JPEAST"            # <-- (*1)
  location  = "NTTComTokyo(NW1)"  # <-- (*1)
  port_type = "10G"               # <-- (*1)
}
resource "fic_eri_port_v1" "port_1" {
  name            = "terraform_port_1"
  switch_name     = data.fic_eri_switch_v1.switch_1.name  # <-- (*2)
  port_type       = "10G"
  number_of_vlans = 16
  is_activated    = false
}
1 data セクションでスイッチの検索条件を指定しています。
2 data セクションで取得したスイッチ名を参照するように指定しています。

注釈

tfファイルにはその他にもさまざまな定義が可能です。
詳細なご利用方法につきましては、 Terraform Configuration をご参照ください。