VMware Cloud on AWS SDDC を Terraform で作成する
大家好,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
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
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
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
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) がお送りしました。