Schematics/terraformを使い分散クラウドSatelliteをIBM Cloud上に自動構築

# １. 目的

IBM Cloud Satelliteを、AWSやAzureの上に作成する時は、IBM Catalogからボタンを押下すればSatelliteのlocationをセットアップしてControle Planeの作成まで自動的に実施されます。これに対してIBM Cloud上に作成する時は、現在は手動作成する以外に方法がありません。最低6台の仮想Server作成からはじめてHostAttachShellをダウンロードして流した後にROKSクラスターの作成まで非常に手間暇かかる作業になります(最低半日)。これをIBM Cloud Schematicsを利用して自動構築できるようにしました。

IBM Cloud Schematicsは各種Serviceの導入/管理自動化を目的にTerraformによるInfrastructure as Codeを実現するための開発支援・実行環境を提供します。

IBMCloudのSchematicsで利用できるTerraformのサンプルがGitHub上に各種公開されており、これをベースに一部修正を加えて利用しております。(修正内容は"4.サンプルTerraformの修正内容"にて後述)

以下Satelliteセットアップの際のScematicsの利用手順及び利用したTerraformを紹介します。

Schematicsによる自動化対象範囲
1.VPC新規作成/仮想Server6台作成,他各種VPCサービス作成
2.Satellite Location作成
3.Server上のHostAttach Shell実行によりHost割り当て
4.Satellite Controle Plane作成
5.ROKSクラスター作成

(注意)
1.　IBM Cloud上にIBM Cloud Satelliteを作成するのはテストまたはPOC用途に限定されます(サポート対象)
https://cloud.ibm.com/docs/satellite?topic=satellite-ibm

2.　IBM Cloud上のSatelliteの手動セットアップについて下記を参照ください。
https://qiita.com/nori0315/items/a93229d561ce8c3bcd5b

# 2. Schematicsの作成/実行
SchematicsはCLIインターフェースを利用することもできますが、ここではIBMCloud Portalから入りGUIにより利用します。

###  APIキーの作成
まずSatelliteを作成するためにのAPI Keyを作成します。
![スクリーンショット 2022-07-20 11.48.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132988/87721e3d-c57b-db26-8b25-7f4efdf8291e.png)

###  Workspaceの作成
IBM Cloud CatalogからSchematicsを選択してワークスペース作成ボタンを押下すると下記画面現れるのでterraformのディレクトリィのあるgithubのリポジトリーを入力します。

(https://github.com/saka0315/terraform-provider-ibm/tree/master/examples/ibm-satellite)

![スクリーンショット 2022-07-20 10.02.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132988/00c14ee5-f623-779f-4706-114507e6082b.png)

画面をスクロールして新規作成するワークスペース名を入力、ここではロケーションは北アメリカを選択して次へのボタンを押下します。

![スクリーンショット 2022-07-20 10.03.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132988/ef4421f9-a4fb-9596-996d-3926837973b1.png)

下記の確認画面が出るので右下の作成ボタンを押します。

![スクリーンショット 2022-07-20 10.03.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132988/4069e8d6-8121-5ada-d162-80a33a05e0d5.png)

左メニューからジョブを選択して、該当のワークスペースの作成が成功したことを確認します。

![スクリーンショット 2022-07-20 10.05.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132988/c4921440-2615-2201-7706-7939f15b3dd1.png)

###  設定変数の入力/確認

左メニューから設定を選択して、画面スクロールするとterraform のvariables.tfで定義した変数一覧が現れます。
![スクリーンショット 2022-07-20 10.10.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132988/d1e715d5-3b69-872b-8234-d7df126fa260.png)

一番上にあるibmcloud_api_keyに先ほど作成したAPIキーを入力して機密ボタンにチェックを入れ保存します。
![スクリーンショット 2022-07-20 10.10.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132988/5aed1d8d-e647-247a-4527-64b3066bf942.png)

他の変数は環境に合わせて適宜入力/保存してください。ここではDefault値を利用するものとします。

|入力項目|変数名|デフォルト値|
|:-----------|:------------:|:------------:|
|リソースグループ名|resource_group　|Default|
|satelliteリージョン|　ibm_region　|us-east|
|satelliteロケーション名 | location　| satelllite-ibm |
|Satellite管理リージョン名|　managed_from　| wdc |
|ロケーションゾーン |location_zones　|us-east-1, us-east-2, us-east-3|
|VPC各種リソースのプレフィクス名|　is_prefix| satellite-ibm |
|VPC仮想サーバーのFlavor| profile | bx2-4x16 |
|ROKSクラスター名|　cluster |satellite-ibm-cluster|
|ROKS配置ゾーン|　cluster_zones | us-east-1,us-east-2, us-east-3|
|ROKSバージョン|　kube_version |4.8_openshift|

### Planの生成
右上のプラン生成ボタンを押してプランを生成(terraform plan)して、入力内容のチェツクを行います。

![スクリーンショット 2022-07-20 10.12.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132988/28acd3cd-f8f3-29ff-05db-df065b3d9bea.png)

Planの生成の失敗時は、ジョブの画面のログよりエラーメッセージを確認
して、設定画面の変数入力もしくはterraformスクリプトに原因がないかを確認します。terraformスクリプト修正した場合は設定画面の"最新をプル"を押下すればワークスペースの更新ジョブが流れます。

### Planの適用
プランの生成が成功した後に、右上のプランの適用ボタンを押してPlanの適用(terraform apply)を実施します。
![スクリーンショット 2022-07-20 11.15.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132988/8e38b11f-ff2f-3f5a-f7a5-175bd30dfef2.png)

### Schematics/Satellite/VPCの確認
ジョブ画面よりプランの適用が成功したことが確認できました。

![スクリーンショット 2022-07-20 13.05.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132988/a2f91545-0815-2add-98f3-e8c05d0ea148.png)

次にSchematicsにより各種リソースが正常に作成されたことを確認します、
下記はVPCの仮想サーバーの画面になり、satellite-ibm-instance-0 ~ satellite-ibm-instance-05まで、bx2-4x16のフレーバーで作成されていることがわかります。

![スクリーンショット 2022-07-20 13.10.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132988/fbb17b48-ad9d-cc0f-519d-28419bae7ff6.png)

Satelliteの概要画面です。　"satelllite-ibm"の名前でロケーションが作成され、6台のHostが割り当て済みで正常に稼働していることがわかります。また右上に"Schematicsで管理"のボタンが現れ、以後は変更ある場合は当画面ではなくSchematics画面で管理することになります。

![スクリーンショット 2022-07-20 13.10.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132988/9cb79222-a1cc-5b32-9971-e54f95db02a9.png)

ROKS概要画面から"satellite-ibm-cluster"の名前でクラスターが作成され、正常に稼働されていることが確認できます。
![スクリーンショット 2022-07-20 13.10.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132988/feb0ce0d-78d2-fff0-00b3-d137e968cc9f.png)

またOpenshift Webコンソールにアクセスできることが確認できました
![スクリーンショット 2022-07-20 13.21.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132988/5fc6ed49-cfe3-73c2-306a-1740ab83412a.png)

アプリケーションをBuild/Deployする時は、SatelliteではDefaultで内部Image Registryを提供していないので事前にICOS等に作成する必要があります。

# 3. Schematicsからの削除
これまで作成したSatellite関連リソースを削除するときは左
メニューのジョブを選び該当のワークスペースを選択して
アクションボタンより"リソースの破棄"を選択することによりワークスペース
削除されます。

![スクリーンショット 2022-07-20 13.25.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132988/20398da9-00fd-5dcd-85db-ae379bc93238.png)

# 4. サンプルTerraformの修正内容について
IBMより提供されているTerraformは下記内容を修正しています。
(https://github.com/saka0315/terraform-provider-ibm/tree/master/examples/ibm-satellite)
### 1. modules/cluster/main.tf　バグ修正
ROKS ClusterのWorkerPool作成時にエラー発生したので
DefaultのWorker Poolを利用するように修正しています。
(Worker Poolの入力部をコメントアウト)
### 2. variables.tf　
・変数profileを追加 (仮想サーバーのフレーバー選択）
VPC Server仕様を変更できるようにしました。デフォルトは"bx2-4x16" (4vCPU,16GRAM)
・変数kube_versionのデフォルト値の変更
4.7_openshift=>4.8_openshiftに変更
・変数resource_groupのデフォルト値の追加
　"Default"を設定