CML2をGCPで利用する

# はじめに
Cisco のエミュレータソフトであるCML２をGoogleクラウドで試します。
[こちら](https://www.youtube.com/watch?v=Z9briGXNRpI)の動画を参考にしてます。
[AWSにて試した方](https://qiita.com/basabasakhr/items/4d30909c77667d12b86e)より安いので、今のところクラウドでやるならこちらがベターですね。

# 手順の概要
- ローカルPCの仮想化ソフトにてCMLのインストール
- CML2のセットアップ
- CML2のVMエクスポート
- Googleストレージへエクスポートしたファイルのアップロード
- インポート
- 仮想化のネストの有効化やHWの調整など
- インスタンスにてCML2のセットアップ

# 手順
### 1.OVFファイルの準備
[前半](https://qiita.com/basabasakhr/items/4d30909c77667d12b86e)は以前の記事と同一になるので、6.VMエクスポートまで実施します。

### 2.OVFファイルのアップロード
OVFファイルをCloudストレージへアップロードします。
ナビゲーションメニューのCloud Strage>ブラウザを選択。
![cloud strage.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224980/1c01b22b-d8ce-5657-16e2-d562d2b32ada.png)

バケットの作成をクリック。
![make strage.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224980/4ff2c6d7-dc46-9bd1-a0f9-b892350379b7.png)

名前をつけるだけでOKです。
![make strage2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224980/c7bbad33-db15-824c-3183-de16b517a41c.png)

バケットが作成できたら、バケット名をクリックして詳細へ移動します。
ファイルをアップロードから、OVFファイルをアップロードします。
(私は例によってエクスポートした3ファイルをアップしました。。)
結構時間がかかるのでお茶して待ちます。

### 3.GCPのAPI有効化
操作はGoogle Cloud Shellから行います。
Cloud Shellをアクティブにするをクリック。
![スクリーンショット 2021-05-03 9.04.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224980/43b0fca9-cff7-eb5b-c718-6e9a44dcfada.png)


最初にCloud Buildを有効にします。
初めて行う場合、有効なアカウントがないと怒られます。

```
$ gcloud services enable cloudbuild.googleapis.com
ERROR: (gcloud.services.enable) You do not currently have an active account selected.
Please run:

  $ gcloud auth login
to obtain new credentials.
If you have already logged in with a different account:
    $ gcloud config set account ACCOUNT

to select an already authenticated account to use.
```

言われた通りのコマンドを実施して、認証します。
認証後、project idが表示されます。

```
$ gcloud auth login
Go to the following link in your browser:
    https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=32555940559.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A
2.0%3Aoob&scope=openid+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform+https%3A%2F%2Fww
w.googleapis.com%2Fauth%2Fappengine.admin+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcompute+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Faccounts.reauth&sta
te=lzmNxVFVmnZC0JrtmwJ3kvuPGw89Fe&prompt=consent&access_type=offline&code_challenge=fNEnter verification code: **** # 上記URLにて表示されたコードをペースト

You are now logged in as [*****].
Your current project is [quantum-reducer-312413].  You can change this setting by running:
  $ gcloud config set project PROJECT_ID
```

再度同じコマンドを実行します。

```
$ gcloud services enable cloudbuild.googleapis.com

Operation "operations/acf.p2-487738041377-0ed0e42f-7d17-45a1-baab-4f5078e7c662" finished successfully.
```

続いて下記。
出力まで時間がかかりますが、成功しました。

```
$ gcloud services enable compute.googleapis.com

Operation "operations/acf.p2-487738041377-4460e93c-2a93-493c-b677-a5b7a5471364" finished successfully.
```

IAMRoleにprojectの権限を付与します。
最初に自身のプロジェクト情報を確認します。
情報はナビゲーションメニューのホーム>ダッシュボード>プロジェクト情報に記載されてます。
![スクリーンショット 2021-05-02 6.35.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224980/7fac9b9a-274e-abe4-bcd3-a06792ecee57.png)

情報をコピーしておきます。
![スクリーンショット 2021-05-02 6.36.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224980/c3488fb5-fcb9-3487-cf7b-8bf21baf90bc.png)

下記のコマンドの"project-id"を自身のプロジェクトIDに、"project-num"をプロジェクト番号の値に変更して一気にペーストします。

```
gcloud projects add-iam-policy-binding project-id \
   --member serviceAccount:project-num@cloudbuild.gserviceaccount.com \
   --role roles/compute.admin
gcloud projects add-iam-policy-binding project-id \
   --member serviceAccount:project-num@cloudbuild.gserviceaccount.com \
   --role roles/iam.serviceAccountUser
gcloud projects add-iam-policy-binding project-id \
   --member serviceAccount:project-num@cloudbuild.gserviceaccount.com \
   --role roles/iam.serviceAccountTokenCreator
```

### 4.インスタンスの作成
続いてインスタンスの作成ですが、作成前に必要な情報を確認します。

gsutil URIの確認方法
ナビゲーションメニューのCloud Strage>ブラウザ>該当のバケット名>該当のOVFファイルをクリック
ファイルの詳細情報が表示されるので、gsutil URIをコピー。

![スクリーンショット 2021-05-02 11.37.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224980/4bb118ad-33b1-bfcb-1689-24f3d68347fd.png)

インスタンスの作成はGoogle Cloud Shellから行います。

下記コマンドの"INSTANCE_NAME"をお好きな名前に変え、
"gs:PATH_TO_OVF_FILE"はOVFファイルのgsutil URIに変えてください。
１時間近くかかるので待ちます。

```
gcloud compute instances import INSTANCE_NAME \
--os=centos-8 \
--zone us-central1-b \
--source-uri=gs:PATH_TO_OVF_FILE
```

進行状況は、
ナビゲーションメニューのCompute Engine>VMインスタンスから確認できます。
作成が完了すると指定したインスタンス名の名前で緑のチェックが入ります。
この時点でインスタンスが起動してます。（この状態で長時間放置してしまいました。。課金注意。。）

![スクリーンショット 2021-05-03 5.22.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224980/51446ea4-40fb-e521-a8bd-d23ea78ec54c.png)


### 5.VMインスタンスの設定

ファイアウォールを設定します。
該当のインスタンス名をクリックし、詳細に移動します。
鉛筆マークの編集をクリックし
![スクリーンショット 2021-05-03 6.09.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224980/503b5c95-d072-067b-88cf-8abf23bbd30e.png)


ファイアウォールの下記二つともチェックボックスをONにして保存します。

- HTTP トラフィックを許可する
- HTTPS トラフィックを許可する
![スクリーンショット 2021-05-03 6.13.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224980/235232c2-a570-26e0-475f-fd88579a3761.png)


### 6.CML2へログイン
VMインスタンスの一覧から、外部IPアドレスをコピーします。
通常通り、httpsにてコピーしたIPアドレスへアクセス。
![スクリーンショット 2021-05-03 6.18.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224980/d6bf170f-c354-a5f2-6caa-4e9762f9e999.png)

もうログインできるかと思いますので、コピーしたアドレスHTTPSへアクセス。
ユーザーアカウントでログインします。
ログイン後、右下のSystem Health Issueをクリックすると２つ問題があります。
![スクリーンショット 2021-05-03 6.16.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224980/1778e620-d2c9-9017-7754-f494a03588f3.png)

Licensingの他にHW AccelerationがチェックNGとなっているので、インスタンスのタイプを変更します。


### 7.インスタンスのクローン
VMインスタンスをスペック要求に合わせるため、インスタンスをクローンします。
VMインスタンスの一覧に戻り、インスタンスを停止します。

![スクリーンショット 2021-05-03 6.22.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224980/6a120d26-1cc9-48b2-05e8-7b33252335ff.png)

停止したインスタンスをクリックして、詳細に移動します。
ブートディスクのデバイス名をコピーします。

![スクリーンショット 2021-05-03 6.25.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224980/4bd3d6ba-537d-fbef-cdbd-1bb6a35931b2.png)

下記のコードの"DISK1"を先程コピーしたデバイス名に置き換えて新たなイメージを作成します。

```
gcloud compute images create cml2-kvm-image \
--source-disk DISK1 --source-disk-zone us-central1-b \
--licenses "https://www.googleapis.com/compute/v1/projects/vm-options/global/licenses/enable-vmx"
```

少し時間がかかった後の実行結果です。
STATUSがREADYになればOKです。

```
gcloud compute images create cml2-kvm-image \
> --source-disk cml2-test --source-disk-zone us-central1-b \
> --licenses "https://www.googleapis.com/compute/v1/projects/vm-options/global/licenses/enable-vmx"
Created [https://www.googleapis.com/compute/v1/projects/quantum-reducer-312413/global/images/cml2-kvm-image].
NAME            PROJECT                 FAMILY  DEPRECATED  STATUS
cml2-kvm-image  quantum-reducer-312413                      READY
```

先程作成したイメージを、cml2-finalという名前のインスタンスで新たに作成します。

```
gcloud compute instances create cml2-final --zone us-central1-b \
--min-cpu-platform "Intel Haswell" \
--image cml2-kvm-image
```

作成できました。
![スクリーンショット 2021-05-03 6.51.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224980/23f90f64-8b4c-749e-75fd-adfd9e0c30c4.png)


### 8.インスタンスの設定
再度、該当インスタンスのファイアウォールにてHTTPとHTTPSを有効にします。
![スクリーンショット 2021-05-03 6.53.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224980/99d0069b-5ed0-a912-738e-7f57ed107a17.png)

また、SSHの1122ポートも有効にします。
ナビゲーションメニューのVPCネットワーク>ファイアウォールを選択。
![スクリーンショット 2021-05-03 6.54.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224980/2afddaa3-7ebe-d693-0dfe-dcb440446c4b.png)

画面上部のファイアウォール ルールを作成をクリック。
名前は適当にcmlとしておきます。

- ターゲットはネットワーク上のすべてのインスタンス
- ソースIPの範囲は0.0.0.0/0
- ポートに1122,9090,22を追加
![スクリーンショット 2021-05-03 7.05.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224980/5cebadaf-6bca-699e-4b81-747e6f23e268.png)

再度、CML2にログインします。
VMインスタンスの外部IPアドレスからHTTPSアクセス。
System Health Issueを見ると、Number of available CPUs　が問題ありあそうです。
![スクリーンショット 2021-05-03 7.06.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224980/0995ebb9-fbd2-61a6-83d1-68c07df258db.png)


### 9.インスタンスタイプの変更
一度ターミナルからssh接続します。

```
❯ ssh sysadmin@34.69.100.212 -p 1122   
```

電源OFF！

```
$ sudo poweroff
```

VMインスタンスの一覧から該当のインスタンスの電源OFFを確認して、インスタンス名をクリック。
編集を選んで、マシンタイプにてn1-standard-8を選択して保存します。
![スクリーンショット 2021-05-03 7.24.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224980/47f438b1-300f-3155-5eb2-af23b5d8eee2.png)

インスタンスを開始します。

IPアドレスを固定したい場合は以下の設定をします。
使ってなくても課金されるので、お好みとお財布状況に合わせて。(私はしません。。)
ナビゲーションメニューのVPCネットワーク>外部IPアドレスを選択。
![スクリーンショット 2021-05-03 7.28.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224980/188832f8-df7a-9481-d82c-49051b7a265a.png)

種類>静的を選択、名前を適当につけて予約。
![スクリーンショット 2021-05-03 7.40.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224980/d1c5bd4a-b649-a931-48cd-cb764c3f0b16.png)

### 10.CML2からライセンス登録
CML2にログインして、ライセンスの登録をしたら、完了です！
(説明は[以前の記事](https://qiita.com/basabasakhr/items/4d30909c77667d12b86e#4cml%E3%81%B8gui%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9)にもあるので割愛です。)

## 最後に
AWSのベアメタルタイプと比較しても料金はgoogleの方が断然いいですね。
当然スペック差はありますが、必要に応じて増やしていけるので無駄なコストがかからないです。
最初からGCPでやっていればよかった。。。。

![スクリーンショット 2021-05-03 8.10.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224980/6701349a-585e-5393-9b96-fe0a9d644c66.png)