Terraformを使って、NetApp BlueXP ConnectorをGoogle Cloud Platformに作成してみた

# はじめに
こちらの記事[「Google Cloud Platform上にNetApp BlueXP Connectorを作成してみた」](https://qiita.com/heyanxia/items/2d98f4e58507ae223b65)ではBlueXPのGUIにより、connectorを作成する方法を簡単にご紹介しました。今回はGoogle Cloud ShellのCLIより、TerraformのテンプレートでBlueXP Connectorを作成してみたいです。

* BlueXPのGUIから作成するイメージ：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/f026e576-ee6d-2a2f-5f82-51352090f356.png)
* Google Cloud Shellから作成するイメージ：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/c5639aee-1c4a-f871-b692-a4bfe6633914.png)
* ChatGPTに聞く：
始める前に、そもそもBlueXPとは？疑問をお持ちの方は、こちらの[Keyword](https://qiita.com/heyanxia/items/47772e6de946d9c87705#keyword)から詳細を確認できます。せっかくなら、最近話題になっているOpenAIの[ChatGPT](https://openai.com/blog/chatgpt/)に聞いてみました。Terraformを使ってNetApp BlueXP ConnectorをGoogle Cloud Platformに作成することは可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/70c4c046-51cf-461a-81b1-c44900cadc7a.png)
また、ChatGPTにNetApp BlueXP ConnectorのTerraform テンプレートを生成し見ました。テンプレートはある程度のサンプルなので、要確認・修正です。今回は公開されている[「terraform: netapp-cloudmanager LATEST VERSION 23.1.1」](https://registry.terraform.io/providers/NetApp/netapp-cloudmanager/latest/docs/resources/connector_gcp)により、最新バージョン`23.1.1`にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/9abf9afd-be53-3c3b-d87e-7bb0706a2272.png)
このサンプルのテンプレートを参考して作成してみます。
# 手順
1.Terraform templateに必要な準備
2.Google Cloud Shellから作成
# 1.Terraform templateに必要な準備
* Create service account & enable API
まずこちらの[「Terraform Registry Providers: netapp-cloudmanager_connector_gcp LATEST VERSION 23.1.1」](https://registry.terraform.io/providers/NetApp/netapp-cloudmanager/latest/docs/resources/connector_gcp)ガイドから必要な条件を確認します。Google Cloud リソースを利用する為、`service account`が必要です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/3814a0b2-f926-19f6-b22c-0ed189bdc47f.png)
BlueXPのGUIからConnectorを作成すると同じように、Google Cloud上に`service account`が必要です。こちら[「Create Service accounts」](https://qiita.com/heyanxia/items/2d98f4e58507ae223b65)の手順を参照して作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/0a53bc18-d13b-cc89-3c93-8a45b42f68a3.png)
`Service account`ができたら、Google Cloud Consoleから確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/35648cf8-7540-261e-8b65-5a4fe9316dc6.png)
`Create new key`で下記のようなJsonファイルを保存して後ほど使います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/be528e02-1193-c258-0470-10c10e3a14e6.png)
こちら[「Enable Google Cloud APIs」](https://docs.netapp.com/us-en/cloud-manager-setup-admin/task-creating-connectors-gcp.html#enable-google-cloud-apis)を参照してBlueXP Connectorを作成するのに必要なAPIをenableします。
* BlueXPのGUIより、サンプルテンプレートを自動作成
BlueXPのGUIからリージョンやゾンなどを指定して、より手軽にテンプレートを生成することができます。BlueXPのGUIから先程作成した`Service account`を選びします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/6366a77a-cb38-3c00-6be4-5ce05d316d8d.png)
自動生成した`Code for Terraform Automation`を保存して、今後Connectorを作成する時に利用きます。注意：`provider = "netapp-cloud-manager`を`provider = netapp-cloudmanager`に変更する必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/f0d57294-7cce-360e-5dcc-de5f4a15c8b6.png)
`service_account_path = FILL_ME`は後ほどCLIで実行する時、上記の`Create new key`で保存したJsonファイルにします。
* `refresh_token`
[こちら](https://services.cloud.netapp.com/refresh-token/)にアクセスしてNetApp refresh tokenを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/e26ed394-949d-fab3-59b2-6869aa22c9a3.png)
ここまではTerraformテンプレートに必要な準備は完了です。下記のTerraformテンプレートを`main.tf`としてGoogle Cloud Shellに作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/1f255de6-7897-61d6-1ef0-9efd7f099d92.png)

# 2.Google Cloud ShellからBlueXP connectorを作成
Google Cloud Consoleから、Cloud Shellにアクセスして、上記の`Create new key`のJsonファイルを`bluexp_service_account.json`にコピーします。`main.tf`の中身は、`provider = "netapp-cloudmanager"`、`version = "23.1.1"`と`service_account_path`などを間違いない様に確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/df7b6c24-aee9-092c-38ab-26d9a7963222.png)
* `terraform init`
Google Cloud Shellには既にTerraformが入ってるので、インストールする必要はありません。他のVMで実行する時には事前にインストールする必要があります。`terraform -v`でバージョンを確認して、`terraform init`を実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/26653c60-a175-d4a4-9525-682663ad26ed.png)
* `terraform apply`
次は、`terraform apply`してconnectorを作成します。終わるまでにちょっと時間がかかりますが、途中で`REFRESH`するとVMができる様になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/f11252cd-9d08-1f28-c3ac-9dda642ab645.png)
`Apply complete`になると、BlueXPのGUIから自動に`Active`として反映されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/b45331ac-27d4-8c78-3086-20ef62470b90.png)
* BlueXPを確認
作成したConnectorの動作確認するために、BlueXPのGUIからCloud SyncのData brokerを作ってみて、無事にできました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/892ae071-5b16-ac3b-1f19-121e3eb041ab.png)
* `terraform destroy`
今回terraformテンプレートで作成したConnectorを削除するには`terraform destroy`コマンドで簡単にできます。Connectorの動作確認で作成したData broker VMは手動で削除します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/91feb1c7-53a6-0e15-3e0f-2b9ae547c9bb.png)
注意：今回はテストの為terraformからconnectorだけを作成したので、`terraform destroy`でリソースを指定せずにクリーンナップした。

# 注意事項
`Failed to generate a toke`の場合は`refresh token`が期限切れになる可能性があります。[こちら:refresh-token](https://services.cloud.netapp.com/refresh-token/)から再生成できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/21bd32f1-db03-4fc3-57f0-a8aa109e61d0.png)

# 最後に
Terraformのテンプレートを使って、Google Cloud上にBlueXP Connectorを作成することができました。今回は必要な`Service acount`をGoogle Cloud Shell CLIより作成しましたが、[Terraform:google_service_account](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/google_service_account)のガイドにより、`Service account`もTerraformで作成できると記載されています。

# 参考リンク
1.[Terraform](https://developer.hashicorp.com/terraform/downloads)
2.[NetApp/terraform-provider-netapp-cloudmanager](https://github.com/NetApp/terraform-provider-netapp-cloudmanager#building-the-provider)
3.[NetApp Cloud Manager connector for GCP](https://docs.ansible.com/ansible/latest/collections/netapp/cloudmanager/na_cloudmanager_connector_gcp_module.html#parameter-refresh_token)
4.[refresh-token](https://services.cloud.netapp.com/refresh-token/)
5.[Terraform：netapp-cloudmanager](https://registry.terraform.io/providers/NetApp/netapp-cloudmanager/latest/docs/resources/connector_gcp)
6.[Terraform tutorials:Google Cloud Platform Build](https://developer.hashicorp.com/terraform/tutorials/gcp-get-started/google-cloud-platform-build)
7.[netapp-cloudmanager_connector_gcp: service_account_path](https://registry.terraform.io/providers/NetApp/netapp-cloudmanager/latest/docs/resources/connector_gcp)
8.[Google Cloud Platform上にNetApp BlueXP Connectorを作成してみた](https://qiita.com/heyanxia/items/2d98f4e58507ae223b65)
9.[Cloud AutomationTerraform & BlueXP Console: How to Use BlueXP Console Terraform Provider](https://bluexp.netapp.com/blog/cvo-blg-terraform-cloud-manager-terraform-provider)