1. Terraform について

1.1. Terraform とは

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

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

Terraformの概要

1.2. Terraform の設定ファイル

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

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

provider "ecl" {
  auth_url          = "https://keystone-[Region]-ecl.api.ntt.com/v3/"
  user_name         = "[API Key]"
  password          = "[API Secret Key]"
  tenant_id         = "[Tenant ID]"
  user_domain_id    = "default"
  project_domain_id = "default"
}

resource "ecl_compute_volume_v2" "volume_1" {
  name = "volume-1"
  size = 15
}

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

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

1.3. Terraform Custom Provider for Smart Data Platform の設定ファイルの構成

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

また、状況に応じて、

も利用いただけます。

1.3.1. provider セクション

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

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

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

1.3.2. resource セクション

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

下記の例では、 サーバーインスタンスサービス における ボリューム を、以下の条件で作成しています。

  • name が volume-1
  • size が 15GB
resource "ecl_compute_volume_v2" "volume_1" {
    name = "volume-1"
    size = 15
}

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

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

1.3.3. data セクション

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

例として、ある Terraform管理外で作成済みの ロジカルネットワーク配下に Terraformにより新規にサブネットを追加する 場合を考えます。

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

  1. API経由でロジカルネットワーク一覧を取得する
  2. その中から、条件に見合うロジカルネットワークを検索する
  3. そのIDを指定してサブネットを作成する

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

resource "ecl_network_subnet_v2" "subnet_1" {
    name = "subnet_1"
    cidr = "192.168.1.0/24"
    network_id = "[検索したネットワークのIDを記載]"
}

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

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

  data "ecl_network_subnet_v2" "subnet_1" {
      name = "my_subnet_1" <-- (*1)
  }

  resource "ecl_network_subnet_v2" "subnet_1" {
      name = "subnet_1"
      cidr = "192.168.1.0/24"
      network_id = data.ecl_network_subnet_v2.subnet_1.id <-- (*2)
}
1 data セクションでサブネットの検索条件を指定しています。ここでは、 namemy_subnet_1 となっているサブネットを取得するように指定しています
2 data セクションで取得したサブネットのIDを参照するように指定しています。結果、上記 *1 の検索結果である my_subnet_1 のIDが使用されます

注釈

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