【OKIT OCI Designer Toolkit】OCI 構成図作成ツールを使って、3分で環境構築をする

# はじめに

先日リリースされた構成図作成ツール([OKIT OCI Designer Toolkit](https://www.ateam-oracle.com/introduction-to-okit-the-oci-designer-toolkit))を試してみました。現状はOCIコンソールには組み込まれていないので、[githubレポジトリ](https://github.com/oracle/oci-designer-toolkit)からクローンして自身の環境で構築する必要があります。便利な機能として、`Terraform`、`Ansible`スクリプトへExportする事ができるので、設計をこのツールで行うと構築が非常に簡単になります。本稿では、OKIT OCI Designer Toolkitのセットアップ ~ Terraform Applyまでの手順をまとめます。

# OKIT OCI Designer Toolkitとは
[OKIT OCI Designer Toolkit](https://www.ateam-oracle.com/introduction-to-okit-the-oci-designer-toolkit)は、迅速な設計とプロトタイプを作成するためのツールです。
ユーザーインターフェースは以下の画像のようになっており、パレット、キャンバス、プロパティの3つに分かれています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133151/9b3b197e-6236-823b-59c6-9a8d27d4b8dd.png)

パレットからアイコンをドラックアンドドロップで、キャンバスへ持っていくだけで以下のような図を作成できます。めっちゃ簡単！:v:
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133151/2cf20b3a-ff78-6fba-727c-cfe9790b322e.png)

メニューは以下のようになっています。
キャンバスに書いた構成図は、ローカルに保存(jsonファイルでExportされる)か、`テンプレート`として保存ができます。
作成した構成図は、`Image`、`Terraform`、`Ansible`、`Resource Manager`としてExportが可能です。(私の環境ではResorce Manager Exportだけうまく行かなかった。)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133151/913299e8-00f3-50b8-10b9-48f7bd07ccf5.png)


その他のリファレンスは以下を参考にどうぞ。
[インストールガイド](https://github.com/oracle/oci-designer-toolkit/blob/master/documentation/Installation.md)
[ユーザーガイド](https://github.com/oracle/oci-designer-toolkit/blob/master/documentation/Usage.md)
[サポートガイド](https://github.com/oracle/oci-designer-toolkit/blob/master/documentation/ArtefactSupport.md)


# 手順
本稿で行った手順は以下になります。

- Terraformのセットアップ
- OKIT OCI Designer Toolkitのセットアップ
- OKIT OCI Designer Toolkitでデザイン
- Terraformで環境構築

# 3分で環境構築してみた
#### Terraformのセットアップ
私は既にTerraformのセットアップを完了していたので、ここはスキップします。
初めての方は以下をご参照ください。
[10分で理解するTerraform](https://qiita.com/Chanmoro/items/55bf0da3aaf37dc26f73)

#### OKIT OCI Designer Toolkitのセットアップ
私はOracle Linux OSのOCI Compute上に作成しましたが、ローカル環境でも問題なく動作すると思います。
本稿は`Docker`を利用します。
80portを利用するので、対象マシンのポートが空いている事を確認した上で以下を実行します。
（Macユーザーの場合、以下でポートの使用状況を確認できます。）

```
$sudo lsof -i:80
```


それでは、OKIT OCI Designer Toolkitのセットアップをしていきます。

```
$ git clone https://github.com/oracle/oci-designer-toolkit.git

# docker serviceを起動させて、ビルド
$ cd oci-designer-toolkit/docker/
$ ./build-docker-image.sh

# サービススタート
$ cd oci-designer-toolkit/docker/
$ ./start-okit-server.sh
```
これだけでセットアップ完了です。サービススタート後、以下にアクセスする事ができます。
`http://localhost/okit/designer`

#### OKIT OCI Designer Toolkitでデザイン
今回は左のFragmentsから一つ選択しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133151/e4da4590-2018-4393-c5c4-4a7575257e98.png)
Exportすると、`okit-terraform.zip`というファイルを得る事ができます。構造はこんな感じです。

```
$ tree okit-terraform
okit-terraform
├── main.tf
├── terraform.tfvars
└── variables.tf

0 directories, 3 files
```


#### Terraformで環境構築
先ほどExportしたtfファイルを使って、環境構築をしていきます。
`plan`する前に、`terraform.tfvars`へ情報を追記する必要があります。
OCIDや鍵情報が空欄になっているのでそこを埋めます。

```terraform:terraform.tfvars
tenancy_ocid = ""
user_ocid = ""
fingerprint = ""
private_key_path = ""
region = ""
compartment_ocid = ""
```

完了したら、initからはじめていきます。

```
# 対象のパスへ入った状態でinit
$ terraform init

# 次にPlanを実行
$ terraform plan

# 最後にApply
$ terraform apply

# 消すときはデストロイ
$ terraform destroy

```

成功しました:raised_hand:
`Apply complete! Resources: 8 added, 0 changed, 0 destroyed`

コンソールで確認したところ、ちゃんと作成されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133151/560f657c-fb41-05e6-deca-5c8bd8a93f58.png)

# `plan`は通って`apply`中にこけるパターン

OCIにはリソース制限があり、それに引っかかるケースがあると思います。
この場合だと、ネットワークコンポーネントは作られたけど、インスタンが作成されていない状態。
うまく行かなかったとしても、手動で消さない方がいいと思います。

```
oci_core_vcn.Okit_Bastion_Vcn: Creating...
oci_core_vcn.Okit_Bastion_Vcn: Creation complete after 1s [id=******]
oci_core_route_table.Okit_Rt001: Creating...
oci_core_internet_gateway.Okit_Bastion_Ig: Creating...
oci_core_security_list.Okit_Sl001: Creating...
oci_core_security_list.Okit_Bastion_Sl: Creating...
oci_core_route_table.Okit_Rt001: Creation complete after 1s [id=******]
oci_core_internet_gateway.Okit_Bastion_Ig: Creation complete after 1s [id=******]
oci_core_route_table.Okit_Bastion_Rt: Creating...
oci_core_security_list.Okit_Sl001: Creation complete after 2s [id=******]
oci_core_security_list.Okit_Bastion_Sl: Creation complete after 2s [id=******]
oci_core_route_table.Okit_Bastion_Rt: Creation complete after 1s [id=*******]
oci_core_subnet.Okit_Bastion_Sn: Creating...
oci_core_subnet.Okit_Bastion_Sn: Creation complete after 1s [id=********]
oci_core_instance.Okit_Bastion_Server: Creating...

Error: Service error:LimitExceeded. The following service limits were exceeded: vm-standard2-1-count. Request a service limit increase from the service limits page in the console. . http status code: 400. Opc request id: 4cccbe3293aaf8632c53e40cad3265da/689D1F376548947E682A4F7F7FE95A68/33472F7DBA11573A82AD057036342311
```

失敗の場合、serialは更新されないと思うので、制限を解除後再度`apply`を実行します。

```
Plan: 1 to add, 0 to change, 0 to destroy.

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes

oci_core_instance.Okit_Bastion_Server: Creating...
oci_core_instance.Okit_Bastion_Server: Still creating... [10s elapsed]
oci_core_instance.Okit_Bastion_Server: Still creating... [20s elapsed]
oci_core_instance.Okit_Bastion_Server: Still creating... [30s elapsed]
oci_core_instance.Okit_Bastion_Server: Still creating... [40s elapsed]
oci_core_instance.Okit_Bastion_Server: Still creating... [50s elapsed]
oci_core_instance.Okit_Bastion_Server: Still creating... [1m0s elapsed]
oci_core_instance.Okit_Bastion_Server: Still creating... [1m10s elapsed]
oci_core_instance.Okit_Bastion_Server: Still creating... [1m20s elapsed]
oci_core_instance.Okit_Bastion_Server: Still creating... [1m30s elapsed]
oci_core_instance.Okit_Bastion_Server: Still creating... [1m40s elapsed]
oci_core_instance.Okit_Bastion_Server: Still creating... [1m50s elapsed]
oci_core_instance.Okit_Bastion_Server: Still creating... [2m0s elapsed]
oci_core_instance.Okit_Bastion_Server: Creation complete after 2m1s [id=*********]

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
```


最後はデストロイして、さようなら:angel:

# 参考情報
[OKIT OCI Designer Toolkit](https://www.ateam-oracle.com/introduction-to-okit-the-oci-designer-toolkit)
[インストールガイド](https://github.com/oracle/oci-designer-toolkit/blob/master/documentation/Installation.md)
[ユーザーガイド](https://github.com/oracle/oci-designer-toolkit/blob/master/documentation/Usage.md)
[サポートガイド](https://github.com/oracle/oci-designer-toolkit/blob/master/documentation/ArtefactSupport.md)