VMware 仮想環境を Terraform でセットアップしてみた (Content Library 作成編)

# 1. はじめに
[Terraform](https://registry.terraform.io/)でVMware仮想環境の構成管理やデプロイ自動化にトライしてみたくなり、実際に試した手順の備忘録をまとめます。

次のAWSが提供しているGitHubリポジトリを参考にして、VMware仮想環境にContent Libraryを自動デプロイした際の手順をまとめます。

本ブログではVMware Cloud on AWS環境を利用していますが、APIは共通なので自宅やオンプレミスのVMware仮想環境でも挙動は同じかと思います。

https://github.com/aws-ia/terraform-vsphere-content-library

また、VMware Cloud on AWS のAPIはVMwareから公開されています。

https://developer.vmware.com/apis/vmc/latest/

# 2. まずは手順の概要から

実際に私が辿ったおおまかな手順です。

(1) 作業用LinuxマシンにTeraformのインストール
(2) Terraformスクリプトのダウンロード
(3) Terraformスクリプトに利用するVMware仮想環境の情報を追記
(4) Content Libraryの自動デプロイ
(5) お片付け

:::note
前提条件
インターネットアクセス可能なVMware仮想環境および作業用Linuxマシンがあることを前提としています。

VMware仮想環境はVMware Cloud on AWSを利用し、作業用LinuxマシンにはAmazon EC2でUbuntu Linuxを利用しています。また作業用LinuxマシンからはVMware Cloud on AWSのvCenterにHTTPSでアクセスできるようにFirewall設定も事前に設定しています。
:::

# 3. 手順の詳細について

## (1) 作業用LinuxマシンにTeraformのインストール

公式ガイドに従って、Terraformをインストールします。

https://www.terraform.io/downloads

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/6fd3fdf0-a526-4254-084e-62296d0ca959.png)

## (2) Terraformスクリプトのダウンロード

作業用LinuxマシンにTerraformスクリプトを準備します。
私は作業端末でZipファイルをダウンロードして編集したあと、Fileziilaで対象ファイルを作業用Linuxマシンに送っています。

今回は次のサンプルTerraformスクリプトを利用します。

https://github.com/aws-ia/terraform-vsphere-content-library/tree/main/examples/basic

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/faf95955-92b1-912c-459a-6fc872469606.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/b7af7f06-ff67-84bc-eb0f-059e7089b777.png)


## (3) Terraformスクリプトに利用するVMware仮想環境のアクセス情報を追記

VMware仮想環境のvCenterアクセス情報を追記します。
私は今回variablesファイルに直接書き込んでいます。ちなみにコードエディターとしてVisual Studio Codeを利用しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/6aafe62c-4c4a-5796-d7ab-48194389c613.png)

```tf:variables.tf
variable "vsphere_user" {
  type        = string
  default     = "vCenter Adminユーザ名"
}

variable "vsphere_password" {
  type        = string
  default     = "vCenter Adminiユーザーパスワード"
}

variable "vsphere_server" {
  type        = string
  default     = "vCenter アクセスURL"
}

```


> 参考にしているTerraform Providerは次のとおりです。
>> [![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/5c0bc8f7-51f0-e3ee-71fb-237930198f53.png)](https://registry.terraform.io/providers/hashicorp/vsphere/latest/docs#argument-reference)

## (4) Content Libraryの自動デプロイ

対象のディレクトリまで遷移して、Terraformのお作法に従い呪文を唱えます。

```
# terraform init
# terraform plan
# terraform apply
```

> ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/eb920242-8e5a-2b4a-9af5-c17860c41194.png)
> ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/bfbd1175-4f2a-353d-c6e1-1b3d224f46a2.png)
> ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/3250bea8-1fe0-7998-f940-433e6c4b20f9.png)

vSphereコンソールから見ると次のようになります。
コンテンツライラブリが作成され、その他のアイテムとして指定されていたvmware-toolsのファイルもダウンロードされています。
> ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/70355291-c80e-7a9e-dee6-386b11ae31b1.png)
> ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/adb6c9ff-da2e-6384-f281-61d751bc3fd5.png)

## (5)　お片付け

(4)と同様に、Terraformのお作法に従い滅びの呪文を唱えます。

```
# terraform destroy
```

> ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/dea86e8b-f931-56c5-59e4-7095b1b8b2ac.png)
> ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/d346e9a5-55d1-d2b5-a070-9f107c78a2d1.png)

vSphereコンソールから見ると次のようになります。
作成したコンテンツライラブリおよびその中のファイルも削除されました。
> ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/8efdc8a9-859c-4b9c-fdd1-6e1e5201ac4f.png)

# 5. さいごに

いかがでしたでしょうか。VMware仮想環境をすでに触ったことがある方であれば、Terraform自体には不慣れでも案外すんなり試せたかと思います。
これを機にVMware仮想環境の自動化にも興味を持っていただければ幸いです。