OCIのコンテナインスタンスを利用して、爆速でDaaS環境を構築する

# はじめに
OCIではコンテナインスタンス(Container Instances)と呼ばれる、サーバ管理不要でコンテナを起動できる機能があります。
別途リソース費用は発生しますが、dockerの構築など不要でコンテナを高速に立ち上げることができます。
k8sをはじめとしたコンテナ・オーケストレーション・プラットフォームを必要としないコンテナ化されたシステムの立ち上げに適しているサービスとなります。

*OKEと呼ばれるk8s環境もOCIでは利用可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2470077/e293c0e0-83d8-60b4-00e9-9c917d3fcfd8.png)
[OCI Container Instances概要](https://speakerdeck.com/oracle4engineer/oci-container-instances?slide=3)より抜粋

今回はこちらの機能を利用して、Kasm Technologies社から提供されているコンテナイメージを利用し、Daas(VNC)環境を爆速で立ち上げ、
ブラウザ経由でデスクトップ環境にアクセスできることを試してみたいと思います。

# 前提条件
- VNCなどのネットワークリソースを構築済みであること
    Internet Gatewayの設置やルーティング設定も忘れずに

- 適切にセキュリティリスト、ネットワークセキュリティグループ(NSG)を付与すること
    httpsで利用するポートを開けておく必要があります。
    今回はNSGを新しく作り、tcpの6901を開けておきます   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2470077/a18b5c7f-f2f3-3b3b-6f1f-39d186dfd51a.png)

# 早速構築
### コンテナインスタンス画面への遷移
開発者サービス→コンテナ・インスタンスへ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2470077/e6563316-0f4f-50ed-278a-4e9fc0acdb31.png)

### 基本項目の設定
コンテナインスタンスの作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2470077/7e9b7fec-3699-6fb0-cd84-e1b65b13e7e1.png)

すると設定画面に遷移する

- インスタンス面の記入
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2470077/528e9b02-c282-05a2-4c7a-11cd187fb470.png)

- シェイプの選択
お好みで選択ください　＊課金に係る箇所になります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2470077/0db4ef26-1e5f-2fb0-d117-b70ff9eedf5f.png)

- 設置したいVNCを選択
パブリックサブネットに設置、パブリックIPv4アドレスも割り当ててください
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2470077/9c5b69d9-eb34-eeab-2172-c7972632c427.png)

- NSGの選択
事前に作成しておいた、6901ポート開放済みのNSGを付与しておきましょう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2470077/d41a9104-483e-f9ae-fb06-73b6cdc9ffdf.png)

### コンテナ情報の設定

- イメージの選択を押す
Nameは任意でOK
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2470077/7f16d69a-ceee-332a-92ab-ac7c768f9a29.png)

- 外部レジストリタブの選択
せっかくなのでOracleLinuxを立ち上げてみる
　レジストリ・ホスト名：docker.io
　リポジトリ：kasmweb/oracle-9-desktop
　タグ：1.14.0
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2470077/7452fd8b-799b-c5d2-b9ed-a766a7503482.png)

[Default Docker Images](https://kasmweb.com/docs/latest/guide/custom_images.html#default-docker-images)よりお好きなイメージを利用することが出来ます。
タグも必要に応じて最新のものに差し替えてください

- 環境変数
ログインする際のパスワードになります。
キーは"VNC_PW"、値は任意で設定してください
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2470077/b77cd333-e744-0232-cd79-6f88b56fdf3e.png)

- 問題なかったら次へを押し、項目確認の上作成

# 動作確認
### 立ち上がり確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2470077/c7f21bac-5087-a8f8-de20-9c27b8171467.png)
作成から数分でインスタンスがアクティブになります。
正しくNSGが付与されたことを確認し、パブリックIPアドレスをコピーしておく

### ブラウザからアクセス
https://[publicip]:6901　にアクセス
*s付き注意

chromeの場合証明書無しエラーが出るが、詳細設定→xxx.xxx.xxx.xxxにアクセスする、でアクセス可能
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2470077/6f37c815-ae0c-7ed1-fbab-ffe09575bbc3.png)

ログイン情報
ユーザ名：kasm_user
パスワード:環境変数(VNC_PW)で決めた値
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2470077/d2383f60-326a-b61c-962b-e751eb9df708.png)

Webブラウザ経由でアクセス可能に
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2470077/be63da86-2d18-7ee0-122c-c06fd26c4c25.png)

もちろんDaaS環境から、OCI環境内の別リソースへのプライベートアクセスも可能になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2470077/9e54c87f-2732-4bea-22ca-3e48670ba654.png)



# おわりに
LinuxのDaaS環境を構築するには、パッケージのインストール含め結構な工数が必要になりますが、
こちらの手順であれば、たったこれだけの手順でDaaS環境の構築が可能になります。
しかもブラウザ経由でのアクセスなためクライアント側の環境構築も不要です。

Webサーバの動作検証など、GUIが必要になる場面での検証用途で利用頂けると良いと思います。

よりセキュアにアクセスするには、利用していない時間帯はインスタンスを停止させることや、セキュリティリスト・ネットワークセキュリティグループのソースIPを指定することをご検討ください。

:::note alert
SSL証明書が無効状態でのアクセスになりますので、この設定のままで本番用途での利用は控えてください
:::

## 参考
https://docs.oracle.com/ja-jp/iaas/Content/container-instances/overview-of-container-instances.htm

https://kasmweb.com/docs/latest/guide/custom_images.html#default-docker-images