6. 特別なケースのご紹介

以下 Terraform Custom Provider for Smart Data Platform における特別な使い方をケース毎に説明します。

6.1. 最初のテナントを作成する

Smart Data Platform では、最初にテナントを作成いただき、そのテナントに対して各種リソース(サーバーインスタンス等)を作成いただくこととなります。

ここでは、上記のような 最初のテナント をTerraformから作成いただくケースについてご説明します。


この時、当然ながらお客様は未だテナントを所持していません。

そのため Terraform について にてproviderセクションに例示されているような テナントID を記述いただくことができません。

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

resource "ecl_sss_tenant_v1" "tenant_1" {
  name          = "example_tenant"
  description   = "this is the first tenant"
  tenant_region = "jp5"
}

上記はテナントIDを省略して書かれたテナント作成用のtfファイル例です。

一見動作するように見えるのですが、実はこの例ではテナントを作成することができません。

注釈

Terraform Custom Provider for Smart Data Platform では、auth_urlにURLを記載されたKeystoneに対してAPI鍵とAPI秘密鍵、テナントIDを用いて認証を実施し、その応答からSDPFの各機能のエンドポイントを知ります。

一方で、Keystoneに対してAPI鍵とAPI秘密鍵のみを用いて認証を実施した場合には、その応答から各機能へのエンドポイントを知ることができません。

そのため、上記tfファイルではSDPFの管理機能のエンドポイントを知ることができず、テナント作成要求を送信できません。


このようなケースに対して、 Terraform Custom Provider for Smart Data Platform ではproviderに特別なパラメータ force_sss_endpoint を用意しています。

こちらのパラメータを用いると、Keystoneからの応答に依存せず、管理機能のエンドポイントを明示的に指定できます。

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

resource "ecl_sss_tenant_v1" "tenant_1" {
  name          = "example_tenant"
  description   = "this is the first tenant"
  tenant_region = "jp5"
}

上記は force_sss_endpoint を追加したtfファイル例になります。

こちらのtfファイルでは、管理機能に関してのみエンドポイントを固定値として知ることができます。

ここで、ご指定いただくリージョンはauth_urlのリージョンと同じでなければならないことにご注意ください。

注釈

現在、この force_sss_endpoint のような、エンドポイントを固定する用途で用いられるパラメータは、管理機能を対象としたパラメータのみとなっております。

その他のエンドポイントにつきましては、お客さまにて意識いただく必要はなく Terraform Custom Provider for Smart Data Platform が自動的に判定します。

なお、実際の利用用途としまして、

  1. 最初のテナントをつくる
  2. その上で内部にリソースを作成する

という使い方をされるケースが多いかと思います。

そのようなケースにつきましては、|tenantwithresourceurl| をご覧ください。