Terraformを使って、一括でGoogle Cloud上にNetApp BlueXP ConnectorとCloud Volumes ONTAPを作成してみた

# はじめに
前回は、以下の2つの記事でBlueXPのGUIからConnectorとCVOを作成する手順を紹介しました。

* [「BlueXPを使って、Google Cloud上にNetApp Cloud Volumes ONTAPを作成」](https://qiita.com/heyanxia/private/c7870b3bee82ca41283f)
* [「Google Cloud Platform上にNetApp BlueXP Connectorを作成」](https://qiita.com/heyanxia/items/2d98f4e58507ae223b65)

また、ConnectorのみをTerraformで作成する手順を[「Terraformを使って、NetApp BlueXP ConnectorをGoogle Cloud Platformに作成」](https://qiita.com/heyanxia/items/6f5420beaf28b72ef108)という記事で紹介しました。

今回は、Terraformテンプレートを使用して、一括でConnectorとCVOを作成する手順を紹介します。

# 手順
1.Terraform templateに必要な準備
2.BlueXP ConnectorとCVOをGoogle Cloud Shellから作成
3.CVOにVolumeを追加・確認

# 1.Terraform templateに必要な準備
BlueXP ConnectorとCVOの詳細設定を`main.tf`に準備し、Google Cloud Consoleから`bluexp_service_account.json`をダウンロードします。

* main.tf
1. [refresh_token](https://services.cloud.netapp.com/refresh-token/)にアクセスしてNetApp refresh tokenを作成します。
2. BlueXP Connectorの詳細設定(`account_id`や`service_account_email`など)はこちらの[「BlueXPのGUIより、サンプルテンプレートを自動作成」](https://qiita.com/heyanxia/items/6f5420beaf28b72ef108#1terraform-template%E3%81%AB%E5%BF%85%E8%A6%81%E3%81%AA%E6%BA%96%E5%82%99)を参照できます。`service_account_path`は下記の`bluexp_service_account.json`のpathになります。
3. CVOの設定に関しては`Your_XXX`を間違えないように入れ替えてください。パラメーターの設定はこちらの[「Terraform: Argument Reference」](https://registry.terraform.io/providers/NetApp/netapp-cloudmanager/latest/docs/resources/cvo_volume#argument-reference)、また[「CVO: Supported configurations in Google Cloud」](https://docs.netapp.com/us-en/cloud-volumes-ontap-relnotes/reference-configs-gcp.html#supported-configurations-by-license)から詳細を確認できます。今回はテストの為、`capacity_package_name`を`Freemium`にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/3a1e552a-fa77-2aee-3af9-86164c419641.png)
`instance_type`を`n1-standard-8`にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/a25a338f-f406-57f6-f23a-7757210c5595.png)
`client_id = netapp-cloudmanager_connector_gcp.cl-occm-gcp.client_id`は、BlueXP Connector (`cloudmanager_connector_gcp.cl-occm-gcp`)を作成後に得られる`client_id`を参照するため、そのままにしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/97112dae-d045-5e63-019d-20bd5ffa54b1.png)
詳細なネットワークなどの設定は、BlueXPのGUIからCVOを作成する手順に従い、最後に`Show API request`を参照することもできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/d5e9920c-fcb9-3ce5-6c63-61a846c2a3be.png)

最後にできた`main.tf`はこの様になります。
```
terraform {
  required_providers {
    netapp-cloudmanager = {
      source = "NetApp/netapp-cloudmanager"
      version = "23.1.1"
    }
  }
}

provider "netapp-cloudmanager" {
  refresh_token = "Your_refresh_token"
}

# BlueXP Connector
resource "netapp-cloudmanager_connector_gcp" "cl-occm-gcp" {
  provider = "netapp-cloudmanager"
  name = "gcpbluexpconnector"
  zone = "asia-northeast2-a"
  company = "NetApp"
  project_id = "Your_project_id"
  service_account_email = "cloud-manager-service-account@Your_project.iam.gserviceaccount.com"
  service_account_path = "Your_bluexp_service_account.json"
  account_id = "Your_account_id"
  subnet_id = "Your_subnet_id"
  associate_public_ip = true
}

# CVO on asia-northeast2-a
resource "netapp-cloudmanager_cvo_gcp" "cl-cvo-gcp" {
  provider = netapp-cloudmanager
  name = "terraformcvogcp"
  project_id = "Your_project_id"
  zone = "asia-northeast2-a"
  gcp_service_account = "Your_cvo_serviceaccount@Your_project_id.iam.gserviceaccount.com"
  svm_password = "Yourpassword!"
  client_id = netapp-cloudmanager_connector_gcp.cl-occm-gcp.client_id
  subnet_id = "projects/Your_project_id/regions/asia-northeast2/subnetworks/default"
  vpc_id = "default"
  firewall_rule = "allow-all-ingress"
  gcp_volume_size = "500"
  gcp_volume_size_unit = "GB"
  gcp_volume_type = "pd-standard"
  is_ha = false
  instance_type = "n1-standard-8"
  capacity_package_name = "Freemium"
}

```
* bluexp_service_account.json
[Terraform templateに必要な準備](https://qiita.com/heyanxia/items/6f5420beaf28b72ef108#1terraform-template%E3%81%AB%E5%BF%85%E8%A6%81%E3%81%AA%E6%BA%96%E5%82%99)を参照し、必要なAPIを有効化した後、サービスアカウントを作成します。その後、サービスアカウントから新しいキーを作成して、以下のようなJSONファイルを「bluexp_service_account.json」として保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/be528e02-1193-c258-0470-10c10e3a14e6.png)

# 2.BlueXP ConnectorとCVOをGoogle Cloud Shellから作成
Google Cloud ConsoleからCloud Shellにアクセスして、上記の準備した`bluexp_service_account.json`と`main.tf`を確認して、`terraform init -> terraform apply`で作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/232e846c-afd3-af7b-f56f-9f21e0b33079.png)
BlueXP ConnectorとCVOの詳細設定がチェックされます。ここでパラメーターの設定が間違った場合はこちらの[「Argument Reference」](https://registry.terraform.io/providers/NetApp/netapp-cloudmanager/latest/docs/resources/cvo_volume#argument-reference)から詳細を確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/7c39bb46-df2f-1948-f2fe-1b26349c2749.png)
`yes`を入力してしばらく待って、`Creation complete after 5m38s`で五分ぐらい、BlueXP Connectorが作成されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/6968af50-214c-2e21-58a7-9b4a12d53f25.png)
もう少し待つと、CVOの作成も無事に完了です。Google Cloud Consoleから既に`xxxx-vm`(CVOとConnector両方)というVMインスタンスができました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/9fdc9f96-a48b-0dbb-523e-6ac639bf5327.png)
BlueXPのGUIにも設定した`Freemium`のCVOが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/9bc301cc-3a96-87bd-b6af-f5b23f452a4b.png)
# 3.CVOにVolumeを追加・確認
* CVOにVolumeを追加・確認
こちらの記事[「CVOにVloumeを追加」](https://qiita.com/heyanxia/items/c7870b3bee82ca41283f#3cv0%E3%81%ABvolume%E3%82%92%E8%BF%BD%E5%8A%A0%E7%A2%BA%E8%AA%8D)を参照し、CVOをクリックして、Add Volume->New volumeを選んでWizardに従って、最後`Approve`して追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/f6e31392-c4da-2428-77c7-df3e0f2340fe.png)
今回はテストの為、`Disk Type`を`PD-STANDARD`、1GBにしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/53ff3ceb-4a41-5ee0-84cb-18b4774f6b27.png)
* mount確認
BlueXPのGUIからmountコマンドをコピーします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/88eb20a2-cd3f-73a2-34df-1b976b2c5839.png)
BlueXPのconnectorにSSHで入って、こちらの[「mount確認」](https://qiita.com/heyanxia/items/d158feea4ec4886fd601#3osakaasia-northeast2%E3%81%ABcvstype%E3%81%AEvolume%E3%82%92%E8%BF%BD%E5%8A%A0%E7%A2%BA%E8%AA%8D)を参照し、` sudo yum install -y nfs-utils`をインストールします。ディレクトリを作成して、mountしてファイルを書き込むことができるのを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/0361c7f2-7839-239e-0607-d0cba0b47ba2.png)
* クリーンアップ
`terraform destroy`を実行することで、今回作成したBlueXP ConnectorとCVOを`Destruction complete after 1m14s`のように短時間でクリーンアップすることができました。Google Cloud ConsoleとBlueXPのGUIからもCVOが削除されたことを確認できました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/689d9a69-7af0-402f-a1eb-372af97243c9.png)

# 最後に
今回は、Google Cloud ShellのCLIからTerraformを使用して、BlueXP ConnectorとCVOをGoogle Cloudに一発で作成してみました。ボリュームは手動で追加してマウントしましたが、[Terraform Providers:netapp-cloudmanager_volume](https://registry.terraform.io/providers/NetApp/netapp-cloudmanager/latest/docs/resources/cvo_volume)により、NFSボリュームもTerraformで追加できます。次回はまた、Terraformを使用してボリュームを追加してみましょう！

# 参考リンク
1.[NetApp BlueXP: Create a Connector in Google Cloud from BlueXP](https://docs.netapp.com/us-en/cloud-manager-setup-admin/task-creating-connectors-gcp.html#quick-start)
2.[Google Cloud Platform:Creating a custom role](https://cloud.google.com/iam/docs/creating-custom-roles#creating_a_custom_role)
3.[Google Cloud Platform:Creating a service account](https://cloud.google.com/iam/docs/creating-managing-service-accounts#creating)
4.[BlueXP: Learn about Connectors](https://docs.netapp.com/us-en/cloud-manager-setup-admin/concept-connectors.html#when-a-connector-is-required)
5.[GCP region: Tokyo](https://cloud.google.com/compute/docs/regions-zones?hl=en)
6.[Cloud Volumes ONTAP 9.12.1 release notes:Supported configurations in Google Cloud](https://docs.netapp.com/us-en/cloud-volumes-ontap-relnotes/reference-configs-gcp.html#supported-configurations-by-license)
7.[Terraform(google provider) で Service Account に Role をバインドするときの罠](https://qiita.com/takat0-h0rikosh1/items/f821fe4e308226123bac)
8.[Terraformを使って、NetApp BlueXP ConnectorをGoogle Cloud Platformに作成してみた](https://qiita.com/heyanxia/items/6f5420beaf28b72ef108)
9.[BlueXPを使って、Google Cloud上にNetApp Cloud Volumes ONTAPを作成してみた](https://qiita.com/heyanxia/private/c7870b3bee82ca41283f)
10.[Terraform: netapp-cloudmanager_cvo_gcp](https://registry.terraform.io/providers/NetApp/netapp-cloudmanager/latest/docs/resources/cvo_gcp)