GCP環境でのCloud Volumes ONTAP(CVO)デプロイ 準備

# GCP環境での Cloud Volumes ONTAP デプロイ作業 準備
[TerraformでCloud Volumes ONTAPデプロイ自動化](https://qiita.com/yoihoka/private/ad0166bcaca0e3964f60)の記事で、GCPの環境への NetApp Cloud Volumes Ontap（CVO)デプロイ自動化をする手順を紹介していますが、その作業に必要な事前準備事項の具体的な実施手順を紹介します。

本手順では、NetApp Cloud Centaral / GCP の２つの環境での準備作業を実施します。本記事では、GCP側の準備作業は、Linuxサーバにgcloud CLI 導入しコマンドベースで実施する方法でご紹介します。GUIでの操作を実施したい場合は、[こちら](https://docs.netapp.com/ja-jp/occm/task_getting_started_gcp.html)のサイトを参考にしてください。

##前提
以下の環境で試しています

- GCPアカウントは作成済み
- Google Cloud SDK 347.0.0
- CentOS 7.7

なお、この記事で書かれている 手順やファイルは動作を保証されたものではありません。
各環境に合わせてテスト・確認をしたうえで自己責任にて利用していただければと思います。

##事前準備の内容
必要な事前準備事項としては、大きく２種類あります。

1. NetApp Cloud Centralでの準備事項 
   NetApp Cloud Centralという統合ポータルのサイトで アカウントを作成し、terraform実行時に必要となるToken（認証情報）を取得します。

2. GCP での 事前準備
GCP環境で Cloud Volumes Ontapデプロイ用のカスタムRole権限を付与したサービスアカウントを作成します。あわせて、Cloud Volumes Ontapが動作するGCEインスタンスをデプロイするための、プロジェクト/VCP/Subnet作成とGoogle Cloud API 有効化を実施します。
今回の記事では、上記操作を gcloud CLIを利用して、コマンドベースで実施します。

既に作成済みのものがある場合はそちらを利用することも可能ですが、今回は新規に作成する手順を紹介します。

##作業の流れ
1. NetApp Cloud Centralでの準備事項 : 
 1. アカウント作成 
 2. Token取得
 3. (オプション)Cloud Manager アカウントのID確認
 
2. GCP での 事前準備
 1. gcloudコマンド実行準備
 2. 新規プロジェクト作成
 3. サービスアカウント作成・Private Key(サービスアカウントキー)ファイル取得
 4. Cloud Volumes ONTAP用カスタムRole作成・権限付与
 5. API 有効化
 6. VPC / Subnet作成


## 1. NetApp Cloud Centralでの準備事項
NetApp Cloud Centralという統合ポータルで アカウントを作成してログインし、Tokenを取得します。

### 1-1. アカウント作成
[NetAppのCloud Cenral](https://cloud.netapp.com/)にアクセスして、画面右上のSign Upをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/981926/dfcc4703-1683-4784-e0d5-0460b92752a8.png)

Sign Upをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/981926/7b75b06a-474e-0fa8-f763-7fbfdf4e0eac.png)

電子メールアドレス、ログイン用のパスワード 、会社名、フルネームを入力して、Sign Upをクリックします。なお、このフォームに入力した電子メールアドレスが、NetApp Cloud CentralのユーザーIDになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/981926/e74b5fb4-d807-73d7-ac6f-a4f97022980b.png)

NetApp Cloud Centralから自動でメールが送信されますので、メールに記載されているリンクをクリックして、登録プロセスを完了します。

改めてログインする場合は、[NetApp Cloud Central](https://cloud.netapp.com/)のサイトでloginをクリックし、登録時に入力した電子メールアドレス、ログイン用のパスワードを入力してLOGINをクリックします。

### 1-2. Token取得
Cloud Centralへログインし、Fabric View画面 左ペインから API → "Learn how to authenticate"をクリックし、"Refresh Token Access (Required for federated users)"→"Refresh Token Generator"をクリックして、"Refresh Token Generator"ページにアクセスします。
（[こちら](https://services.cloud.netapp.com/refresh-token)から直接アクセスも可能）

"Generate Refresh Token"をクリックし、表示された “Refresh Token” を 記録します。 （Terraform TFファイルで利用）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/981926/9cb07964-e8b6-1bd3-fa5f-1882a3229aba.png)

なお、Tokenは 長期的な認証情報 となるため、取り扱いに注意してください。
また、作成後のページにも記載がありますが再表示できません。
Token情報がわからなくなった場合は一度Revokeするなどの対処が必要になります。

### (オプション)1-3. Cloud Manager アカウントの ID確認
この作業は、複数のCloud Managerアカウントを利用する場合に 実施してください。
（本記事に記載のとおりに 新規NetApp Cloud Centralアカウントを作成した場合は、通常、実施の必要がありません）


[Cloud Manager](https://cloudmanager.netapp.com/)にアクセスして、画面上部のAccount -> Manage Account を選択して、Account ID (account-xxxxxxxx)を確認します。

 ※ ロールがAccount Adminのアカウントである必要がある点に注意してください

複数のアカウントを使っていると明示的にアカウント IDを指定しないとエラーになることが多いので、オプション指定することをお勧めします。

## 2. GCP での 事前準備
GCPでの事前準備を実施します。
前提事項にも記載の通り、GCPアカウントは作成済みの前提となります。
最初に、Linuxサーバにgcloud CLIを導入し、 その後、gcloud CLIのコマンドベースで、GCP環境での準備事項を進めていきます。

### 2-1. gcloudコマンド実行準備
以下の手順を実施して、gCloud CLIを導入します。

なお、gCloud CLIの導入手順は[GCPのサイト](https://cloud.google.com/sdk/docs/install)で公開されているので、最新情報等はそちらを参照ください。

```plaintext
$ sudo tee -a /etc/yum.repos.d/google-cloud-sdk.repo << EOM
[google-cloud-sdk]
name=Google Cloud SDK
baseurl=https://packages.cloud.google.com/yum/repos/cloud-sdk-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=0
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
       https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOM
$ sudo yum install -y google-cloud-sdk
```

### 2-2. 新規gcpプロジェクト作成
gcloud initを実行し、画面の指示に従って新規gcpプロジェクトを作成します。
(既存gcpプロジェクトを利用することも可能ですが、ここでは新規プロジェクトを作成する場合の手順を掲載しています）

```plaintext
$ gcloud init
〜〜出力省略〜〜
Go to the following link in your browser:

    https://accounts.google.com/o/oauth2/xxxxxxxxx〜〜〜access_type=offline

You must log in to continue. Would you like to log in (Y/n)?  ← yを入力
〜〜出力省略〜〜
Enter verification code: ← 表示されたURLにブラウザ起動してアクセスし、取得したコードを入力
〜〜出力省略〜〜
 [6] Create a new project
Please enter numeric choice or text value (must exactly match list
item):  ←  ”Create a new project"に対応する番号(例だと"6")を入力
〜〜出力省略〜〜
Enter a Project ID. Note that a Project ID CANNOT be changed later.
Project IDs must be 6-30 characters (lowercase ASCII, digits, or
hyphens) in length and start with a lowercase letter.  ← ProjectID(例：tproject0726 
)を入力
〜〜出力省略〜〜
Your Google Cloud SDK is configured and ready to use!
〜〜出力省略〜〜
$ 
```

### 2-3. サービスアカウント作成・Private Key(サービスアカウントキー)ファイル取得
サービスアカウントを作成し、Private Key(サービスアカウントキー)ファイルを取得します。
ここでは、サービスアカウント名"netapp-teraform-user01"の前提のコマンド例を記載します。

最初に、環境変数にサービスアカウント名・プロジェクト名をセットします。
なお、この環境変数は後続作業でも利用しています。


```plaintext
$ SA=netapp-teraform-user01
$ PROJECT_ID=`gcloud config list --format="text(core.project)" | awk '{print $NF}'`
$ echo $SA
$ echo $PROJECT_ID
$ mkdir -p ~/terraform ~/terraform/cloud-manager ~/terraform/cloud-manager/gcp_cred
```

サービスアカウントを作成します。

```plaintext
$ gcloud iam service-accounts create ${SA} --display-name ${SA}
```

作成したサービスアカウントのPrivate key(サービスアカウントキー）ファイル取得し、取得したファイルのパーミッションを変更します。

```plaintext
$ gcloud iam service-accounts keys create ~/terraform/cloud-manager/gcp_cred/netapp-teraform-user01.json --iam-account ${SA}@${PROJECT_ID}.iam.gserviceaccount.com
$ chmod 600 ~/terraform/cloud-manager/gcp_cred/netapp-teraform-user01.json
$ ls -l ~/terraform/cloud-manager/gcp_cred/netapp-teraform-user01.json
```

### 2-4. Cloud Volumes Ontap用カスタムRole作成・サービスアカウントへの権限付与

カスタムRole作成用のYAMLファイルを取得します。

```plaintext
$ curl -OL https://occm-sample-policies.s3.amazonaws.com/Setup_As_Service_3.7.3_GCP.yaml
$ curl -OL https://occm-sample-policies.s3.amazonaws.com/Policy_for_Cloud_Manager_3.10.0_GCP.yaml
$ ls -l *.yaml
```
なお、このYAMLファイルの最新版は、[NetAppのサイト](https://mysupport.netapp.com/site/info/cloud-manager-policies)から取得可能です。
("Connector deployment policy for GCP" / " Cloud Manager policy for GCP" から 最新リンクを確認)
それぞれ新しいファイルバージョンがでている場合はそちらをダウンロードして利用してください。


YAMLファイルを利用してカスタムRoleを作成します。

```plaintext
$ gcloud iam roles create NetApp_Cloud_Central --project=${PROJECT_ID} --file=./Setup_As_Service_3.7.3_GCP.yaml
   → y を入力
$ gcloud iam roles create NetApp_Cloud_Manager --project=${PROJECT_ID} --file=./Policy_for_Cloud_Manager_3.10.0_GCP.yaml
   → y を入力
$ gcloud iam roles list --project=${PROJECT_ID}

```

作成したカスタムRoleをサービスアカウントに権限付与します。

```plaintext
$ gcloud projects add-iam-policy-binding ${PROJECT_ID} --member serviceAccount:${SA}@${PROJECT_ID}.iam.gserviceaccount.com --role projects/${PROJECT_ID}/roles/NetApp_Cloud_Central
$ gcloud projects add-iam-policy-binding ${PROJECT_ID} --member serviceAccount:${SA}@${PROJECT_ID}.iam.gserviceaccount.com --role projects/${PROJECT_ID}/roles/NetApp_Cloud_Manager
$ gcloud projects get-iam-policy ${PROJECT_ID} --flatten="bindings[].members" --format="table(bindings.role)" --filter=bindings.members:${SA}@${PROJECT_ID}.iam.gserviceaccount.com

```

### 2-5. API 有効化
Cloud Volumes Ontapを利用するのに必要な各APIを有効化します。

```plaintext
$ gcloud services enable deploymentmanager.googleapis.com logging.googleapis.com cloudresourcemanager.googleapis.com compute.googleapis.com iam.googleapis.com
$ gcloud services list

```
コマンド実行後、"Billing account for project 'xxxxxxx' is not found"のようなエラーメッセージが表示される場合は、作成したプロジェクトと請求アカウントがリンクしていない可能性があります。その場合は[GCP Console](https://console.cloud.google.com/?hl=ja)にアクセスして作成したプロジェクトを選択し、ナビゲーションバーから お支払い→請求先アカウントをリンク で 請求アカウントの設定をしてから、コマンドを再実行してください。



なお、最新のAPI一覧は[NetAppのサイト](https://docs.netapp.com/us-en/occm/task_getting_started_gcp.html)で確認可能です。変更が発生している場合は追加・変更を行ってください。


### 2-6. VPC / Subnet作成
```plaintext
$ gcloud compute networks create primary-vpc2 --subnet-mode=custom
$ gcloud compute networks list
$ gcloud compute networks subnets create subnet11  --network=primary-vpc2 --range=192.168.170.0/24 --region=asia-northeast1
$ gcloud compute networks subnets list

```

## まとめ
Cloud Volumes ONTAP(CVO)デプロイ のための　事前準備手順を 紹介させていただきました。

本記事の記載の手順を全て実施していれば、別記事の[TerraformでCloud Volumes ONTAPデプロイ自動化](https://qiita.com/yoihoka/private/ad0166bcaca0e3964f60)の事前準備が完了したことになりますので、ぜひTerraformでのデプロイを試してみてください。

また、本記事に記載の準備を完了していれば、terraformを利用しないで[Cloud Manager](https://cloudmanager.netapp.com/)から手動でCloud Volumes ONTAP(CVO)をデプロイすることも可能です。Cloud Volumes Ontap(CVO)の 手動でのデプロイ手順 は [動画](https://www.youtube.com/hashtag/cloudvolumesontap)で公開していますので、そちらを試したい方は確認してみてください。