大家好,AWS事業本部の西野です。
VMware Cloud on AWS の SDDC を Terraform で作成してみました。
VMware が公式で提供している VMware Cloud on AWS Provider を使用していきます。
事前準備
VMware Cloud on AWS Provider を使用するためには API トークンおよび 組織ID が必要です。
API トークンの取得
API トークンの取得方法については以下のブログをご参照ください。
VMware Cloud on AWS の SDDC を CLI から操作する | DevelopersIO
組織 ID の確認
VMware の CSP ポータルにログインし、画面右上部のユーザー名・組織名が書かれている部分をクリックします。
組織名が表示されている部分の下に組織 ID があります。
サンプルコード
provider.tf
provider.tf
terraform {
required_providers {
vmc = {
source = "vmware/vmc"
version = "1.13.0"
}
}
}
provider "vmc" {
refresh_token = var.api_token
org_id = var.org_id
}
Provider の引数には前項で取得した API トークンと組織 ID を指定します。
main.tf
main.tf
resource "vmc_sddc" "sddc_1" {
sddc_name = var.sddc_name
vpc_cidr = var.vpc_cidr
num_host = 2
provider_type = "AWS"
region = var.sddc_region
skip_creating_vxlan = false
delay_account_link = false
host_instance_type = "I3_METAL"
account_link_sddc_config {
customer_subnet_ids = [var.customer_subnet_ids[0]]
connected_account_id = data.vmc_connected_accounts.my_accounts.id
}
}
data "vmc_connected_accounts" "my_accounts" {
account_number = var.aws_account_number
}
i3.metal 2 ノードの SDDC を作成するサンプルです。
注意するべきなのは account_link_sddc_config における customer_subnet_ids
の指定です。
customer_subnet_ids
には list(string) 型を渡してあげる必要があります。ストレッチクラスターを利用する場合は接続先のサブネットが2つになるためです。今回は Single AZ で作成するので、 list の中に1つだけサブネット ID を含め先頭の要素を指定してあげています。
(実際の中身については後述する terraform.tfvars をご参照ください。)
connected_account_id
にはリンク先 AWS アカウントに紐付けられた UUID を指定してあげる必要があります。当初、12桁の AWS アカウント ID を直接記述したところ、Bad request になり apply が失敗してしまいました。
当該 UUID は Data Source である vmc_connected_accounts の属性になっているのでそこから引っ張ってきましょう。
variables.tf
variables.tf
variable "api_token" {
description = "API token is used to authenticate when calling VMware Cloud Services APIs."
type = string
}
variable "org_id" {
description = "Organization Identifier."
type = string
}
variable "sddc_name" {
description = "Name of the SDDC."
type = string
}
variable "vpc_cidr" {
description = "(Optional) SDDC management network CIDR."
type = string
default = "10.2.0.0/16"
}
variable "sddc_region" {
description = "The region of the cloud resources to work in."
type = string
}
variable "customer_subnet_ids" {
description = "VPC subnet used for ENI connectivity."
type = list(string)
}
variable "aws_account_number" {
description = "AWS Account ID."
type = string
}
今回作成するリソースに必要な variables を定義しています。(特筆すべき点はなし)
terraform.tfvars
terraform.tfvars
api_token = "_87IYXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXxXX"
org_id = "exxxxxxx-aaaa-bbbb-cccc-123456789012"
sddc_name = "Classmethod True Trial SDDC"
sddc_region = "ap-northeast-1"
aws_account_number = "123456789012"
customer_subnet_ids = ["subnet-0f7661cXXXXXXXXXX"]
冒頭で確認した API トークンと組織 ID をこのように指定します。
customer_subnet_ids
は先述したとおり list(string) 型として記述してあげます。
参考
Docs overview | vmware/vmc | Terraform Registry
終わりに
このブログがほんの少しでも世界を良くできれば嬉しいです。 AWS事業本部の西野 (@xiyegen) がお送りしました。