IBM Cloud Schematicsで仮想サーバを作ってみる

# IBM Cloud Schematicsとは

AWSにはCloud Formationという構成管理サービスがありますが、IBM Cloudにもようやくできました。独自実装されているCloud Formationとは違ってTerraform準拠です。

> https://cloud.ibm.com/schematics/overview

# 仕組み

コントロールのための画面やAPIはIBM Cloudが提供します。TerraformのテンプレートはGitHubまたはGitLabに置いておきます。Cloud FormationだとS3にも置けるのですが残念ながらSchematicsは対応していません。将来に期待したいです。

# 今回やったこと

* IBM Cloudの仮想サーバ（Classic Infrastructure）をTerraformでプロビジョンする
* Terraformのテンプレート置き場として、IBM Cloud ToolchainのGitLabを使用し、かつプライベートリポジトリとする

以下のようなイメージです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/c0c1e1dd-69fd-4ba8-24b4-a964555d9c24.png)

# 検証

## GitLab

### サービスのオーダー

IBM Cloudからオーダーできますがそこは本題ではないので省略します。

### リポジトリの作成

schematics-sampleという名前で作成します。このときリポジトリはプライベートにしておきます。

### アクセストークンの生成

SchematicsからGitLabにアクセスするためのアクセストークンを生成しておきます。GitLabでリポジトリを表示すると画面上部にリンクがありますのでそこを辿るとわかりやすいかもしれません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/cdc7e194-dbf9-c91f-0689-bb5c4e56b912.png)

トークン名は適当に、スコープはapiにしておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/5f293677-fa72-f36d-bb08-7a2b830e08e4.png)

生成したトークンは後で使うので忘れずにメモしておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/1dfdbab2-283f-0514-5935-14e8b4313385.png)

## Terraformテンプレートの作成

tok02ゾーンで1コア1GBの仮想サーバをプロビジョンします。テンプレートの書き方は以下のサイトにIBMさんのサンプルが公開されているのでそれを参考にできますが、間違いがあったり古かったりするので、実際に使う場合は試行錯誤が必要かもしれません。

> https://ibm-cloud.github.io/tf-ibm-docs/

今回は自力で次のようなテンプレートを用意しました。

```provider.tf
# IBM CloudでClassic Infrastructureを使うための設定
provider "ibm" {
  iaas_classic_username = "${var.iaas_classic_username}"
  iaas_classic_api_key  = "${var.iaas_classic_api_key }"
}
```

```variables.tf
# 変数宣言
variable "iaas_classic_username" {}
variable "iaas_classic_api_key" {}
```

```version.tf
# Terraformバージョン前提（なくてもいいだろう）
terraform {
  required_version = ">= 0.11"
}
```

```main.tf
# プロビジョンする仮想サーバのスペックを記述
# see https://ibm-cloud.github.io/tf-ibm-docs/?cm_mc_uid=92470806367715716527401&cm_mc_sid_50200000=62168701578624041505
resource "ibm_compute_vm_instance" "schematics-sample-vm1" {
  hostname             = "schematics-sample-vm1"
  domain               = "example.com"
  os_reference_code    = "CENTOS_7_64"
  datacenter           = "tok02"
  network_speed        = 10
  hourly_billing       = true
  private_network_only = true
  cores                = 1
  memory               = 1024
  disks                = [25]
  local_disk           = false
}
```

これらを先ほどのリポジトリにpushしておきます。

## IBM Cloud Classic InfrastructureのAPIキーの取得

コンソールのIAM画面から確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/4f54dc5b-f1e4-d9ec-e13b-d75fd8e3bf5c.png)

このキーがまだ未作成の場合が画面右上に生成ボタンが表示されるので生成してください。

キーを表示すると次の情報が得られます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/ffb29a49-d496-3264-2682-0139d740d006.png)

APIユーザー名とAPIキーをメモしておいてください。

## Schematicsワークスペースの作成

カタログからSchematicsサービスを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/97aab31b-7e37-155d-2108-0a05218dc2f9.png)

ワークスペースを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/73b8c540-14f6-a3c7-2143-570c8dae9f7e.png)

リポジトリのURLとアクセストークンを入力し、「入力変数の取得」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/f095a921-8bb1-8a9c-0bd8-110ec282d378.png)

GitLabに正しくアクセス出来れば次のようにvariables.tfから変数を取得できるはずです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/8997765b-8140-1f88-2759-b79bc890c12a.png)

ここに先ほど確認したAPIユーザー名とAPIキーを入力します。APIキーのような大事な情報は横の「機密」チェックをしておくと、この後の処理で値の表示がマスクされるようになります。

入力が終わったら「作成」をクリックします。

## プランの生成

Schematicsのコンソールが開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/f5cc226a-7501-7a81-49c5-0b8c502079b0.png)

「生成プラン」をクリックします。

問題なければ次のように正常終了します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/9b51a381-2d56-fae9-1e18-11752c866408.png)

## プランの適用

これで実行準備が整いました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/aa052c76-c946-e106-f94b-aa2f997bf258.png)

「プランの適用」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/27044123-90a1-48c8-095e-ee73be755d4d.png)

成功しました。

デバイスが登録されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/48ee4187-6141-6a19-4b07-4f898cab2f56.png)

# 最後に

今回はとりあえず仮想サーバを1台つくりましたが、ベアメタルやVPC、そしてIBM Cloudの各種サービスにも対応しているようです。これまでIBM Cloudの構成管理は自力で作りこんでいたケースが多かったと思いますが、今後はSchematicsで一元管理ができるようになることでしょう。