VMware Cloud on AWS の NSX-T を Terraform で操作する

VMware Cloud on AWS の NSX-T は Terraform から操作できます。
2023.06.02

大家好,AWS事業本部の西野です。

VMware Cloud on AWS の NSX-T を Terraform で操作してみました。

VMware が公式で提供している NSX Terraform Provider を使用します。

事前準備

VMware Cloud on AWS の環境で NSX Terraform Provider を使用するためには API トークンおよび NSX API のパブリックエンドポイント URL が必要です。 以下、それぞれの取得方法を解説します。

API トークンの取得

API トークンの取得方法については以下のブログをご参照ください。

VMware Cloud on AWS の SDDC を CLI から操作する | DevelopersIO

NSX API のパブリックエンドポイント URL

NSX API のパブリックエンドポイント URL は様々な方法で取得できますが、ここでは PowerCLI を用いて取得します。
PowerCLI のインストール・利用手順については以下のブログをご参照ください。

VMware Cloud on AWS の SDDC を CLI から操作する | DevelopersIO

上記ブログの手順で Connect-VMC コマンドレットによる SDDC 環境への接続を済ませたのち、以下のコマンドレットを実行します。

PS > get-vmcsddc -Name <SDDC 名> | select-object NsxApiPublicEndpointUrl

NsxApiPublicEndpointUrl
-----------------------
https://nsx-XXX-XXX-XXX-XXX.rp.vmwarevmc.com/vmc/reverse-proxy/api/orgs/{Org ID}/sddcs/{SDDC ID}/sks-nsxt-manager

こうして取得できるのが NSX API のパブリックエンドポイント URL です。
Terraform にパラメータとして渡してあげる必要があるのでメモしておきます。

操作可能なリソースおよびデータソース

Terraform によって操作可能なリソースおよびデータソースには制限があるようです。
以下が本稿執筆時点で有効なリソースおよびデータソースのリストです。

リソース

本稿末尾の参考リンク内のリストに Fixed Segments(nsxt_policy_fixed_segment) は含まれていないものの、当該リソースのページには VMC 環境で有効な旨が記載されていました。また、nsxt_policy_segment(Resource) のページを参照する限り、VMC 環境においては nsxt_policy_fixed_segment によるセグメント作成が推奨されているようです。

データソース

サンプルコード

provider.tf

provider.tf

terraform {
  required_providers {
    nsxt = {
      source = "vmware/nsxt"
    }
  }
}

provider "nsxt" {
  host                 = var.nsx_api_public_endpoint_url
  vmc_token            = var.vmc_token
  allow_unverified_ssl = true
  enforcement_point    = "vmc-enforcementpoint" 
}

vmc_token には API トークンを、host には NSX API のパブリックエンドポイント URL をそれぞれ指定します。
VMware Cloud on AWS 環境の場合、enforcement_point には常に "vmc-enforcementpoint" を指定します。

main.tf

main.tf

resource "nsxt_policy_fixed_segment" "terraform_segment" {
  display_name        = "terraform_segment"
  description         = "Terraform provisioned Segment"
  connectivity_path   = data.nsxt_policy_tier1_gateway.mygateway.path

  subnet {
    cidr        = "192.168.201.1/24"
    dhcp_ranges = ["192.168.201.2-192.168.201.250"]

    dhcp_v4_config {
      server_address = "192.168.201.253/24"
      lease_time     = 86400
    }
  }
}

data "nsxt_policy_tier1_gateway" "mygateway" {
  display_name = "Compute Gateway"
}

connectivity_path にはセグメントを接続する Tier-1 Gateway を指定します。今回は既に作成済みの Tier-1 Gateway (Compute Gateway) にセグメントを接続したかったため、データソースを利用しました。

variables.tf

variables.tf

variable "nsx_api_public_endpoint_url" {
    description = "NSX API Base URL"
    type        = string
}
variable "vmc_token" {
    description = "API token is used to authenticate when calling VMware Cloud Services APIs."
    type        = string
}

今回作成するリソースに必要な variables を定義しています。(特筆すべき点はなし)

terraform.tfvars

terraform.tfvars

nsx_api_public_endpoint_url = "https://nsx-XXX-XXX-XXX-XXX.rp.vmwarevmc.com/vmc/reverse-proxy/api/orgs/{Org ID}/sddcs/{SDDC ID}/sks-nsxt-manager"
vmc_token = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

冒頭で確認した API トークンおよび NSX API のパブリックエンドポイント URL をこのように指定します。

apply してみた

サンプルコードで定義したセグメントを無事作成できています。

参考

Docs overview | vmware/nsxt | Terraform Registry
VMware NSX-T Terraform Provider for VMConAWS | Guides | vmware/nsxt | Terraform Registry
VMware NSX-T Terraform Provider for VMConAWS | Guides | vmware/nsxt | Terraform Registry

終わりに

このブログがほんの少しでも世界を良くできれば嬉しいです。 AWS事業本部の西野 (@xiyegen) がお送りしました。