Azure使いが Oracle Cloud に挑戦してみる（Compute 編）

# はじめに
* 普段はお仕事で Azure 使っています。
* 縁があり Oracle Cloud を触る機会ができたので **Azureユーザ目線での記録** を残してみたいと思います。

# やってみること
* ここはベタな IaaS パターンで。
* VM立ててサイトを公開するまでやってみます。

# ともあれダッシュボード
* Oracle Cloud へ ログインし、まずは Azure で言うところの **ダッシュボード** を見てみましょう

![oc-01.png](https://qiita-image-store.s3.amazonaws.com/0/216852/149ef14e-3bd8-c8c9-2614-8889423c03ed.png)

![az-01.png](https://qiita-image-store.s3.amazonaws.com/0/216852/d4da7d51-2e3a-5255-5455-d34cac961297.png)


* 上：Oracle Cloud ダッシュボード
* 下：Azureダッシュボード（参考までに）
* 画面左側：各種サービスアクセスのためのメニューがあり、クリックして色々とインスタンス一覧表示やら追加やらができる模様（このあたりは馴染みありますね）
* 画面右側：Oracle Cloud、上部には下見切れていますがインスタンスの状況等表示されています。このあたりも馴染みありです。

# VMを立てる
* Azure だと **Azure Virtual Machine** というサービスですが
* Oracle Cloud では Oracle Cloud Infrastructure の **Compute** というサービスを利用するようです
* ダッシュボードの左側の一覧から **サービス** → **Compute** と辿ると別サイト（console.xxx.oracle.com, xxx はリージョン）にリダイレクトされます
    * ちなみにブラウザ(Firefoxで確認)のシークレットモードでアクセスすると「ブラウザの IndexedDB 機能使えないエラー」画面に出くわしました…orz ・・・なので普通のモードで。

![02.png](https://qiita-image-store.s3.amazonaws.com/0/216852/1973e86e-f830-bd5d-aee5-63b85cd82f5f.png)

* 上の画面が **Compute** のトップ画面のようです
    * ちゃっかり **Oracle Cloud Infrastructure** のポータルに遷移しています
* [Create Instance] ボタンから 新規にインスタンスを作成していきます

## 入力項目

### Name your instance
* インスタンスの名前を入力します

### Select an availability domain for your instance
* 利用可能なドメインを選択します
* 詳細：https://docs.cloud.oracle.com/iaas/Content/General/Concepts/regions.htm
    * つまみ読み
        * Oracle Cloud Infrastructure（= Compute や Virtual Cloud Network 等）は リージョン および Availability Domain にホストされる
        * リージョンはいくつかの Availability Domain から構成される
    * ・・・高可用性や耐障害性を意識するシーンに適切なものを選ぶ必要がありそうです
        * Azure の各リソースをデプロイするリージョン に該当？

### Choose an operating system or image source
* VMのイメージソースを選択します
* 今回はデフォルトで選択されていた以下を利用します
    * Oracle Linux 7.6
    * Image Build: 2018.11.19-0

### Choose instance type
* Compute インスタンスの種類を選択します
* 特に高SPECが必要なわけではないので **Virtual Machine** を選択します
* Azureで無理やり例えるなら・・・
    * **Virtual Machine** : 通常の App Service の Standard, Basic プランを利用するようなもの…？
    * **Bare Metal Machine** : App Service Environment の Isolated プランを利用するようなもの…？
    * ※ そもそも App Service 自体は PaaS のサービスで Compute の IaaS とは異なりますが・・・

### Choose instance shape
* Azure Virtual Machine で言う **サイズ** に当たるようなものを Oracle Cloud では **Shape**と称するようです
* 具体的なスペックを選択します。
* 今回はデフォルトで以下の通り
    * VM.Standard2.1
    * 1 Core OCPU, 15 GB Memory

### Configure boot volume
* `Default boot volume size: 46.6 GB` これで問題なさそうなので特に設定変更せず

### Add SSH key
* SSHでログインする際に使用する認証情報を設定します
* 今回は適当にSSHコマンドで生成した 公開鍵ファイルを選択します

### Configure networking
* ネットワークに関する設定を行います

#### Virtual cloud network
* 一般的な仮想ネットワーク、Azure の Virtual network に対応するものかと。
* 既存の（or 新規作成される？）項目を選択します

#### Subnet
* こちらは一般的な サブネット かと。
* 既存の（or 新規作成される？）項目を選択します

#### Compartment とは？
* 最初は Azure の サブスクリプション に該当するものかと思っていましたが…
* 以下説明見ると **リソースグループ = Compartment** という理解が正しそうです
    * https://docs.oracle.com/cd/E97706_01/Content/Identity/Tasks/managingcompartments.htm
* 各種リソースを整理するための箱 という認識で良さそうです

## [Create] を押してインスタンス作成
* 以下のような インスタンス詳細画面に遷移します。
* 少し時間経つと緑色の「Running」というステータスに変わります

![03.png](https://qiita-image-store.s3.amazonaws.com/0/216852/f4b802b0-d63e-fbf0-1290-dff9d5d4f5f2.png)


# VMに接続してみる
* Compute インスタンスの詳細画面で **Primary VNIC Information** という項目があります
* そこに **Public IP Address** が記載されているため、SSHでアクセスしてみます（Tera Termを使用します）

![04.png](https://qiita-image-store.s3.amazonaws.com/0/216852/f4bbbdca-47cd-6a90-8919-a34efd44d9ce.png)

* ホストに IPアドレスを入力し・・・

![05.png](https://qiita-image-store.s3.amazonaws.com/0/216852/6e617dc5-c990-4d32-2949-ed379e1c252b.png)

* 接続情報を入力。
* ユーザ名は **opc**
* パスフレーズは空で、代わりに秘密鍵（インスタンス生成時に指定した公開鍵の対のもの）を指定します

![06.png](https://qiita-image-store.s3.amazonaws.com/0/216852/d18f956d-f244-3ad0-1c76-6b60cba1bcfe.png)

* 無事に接続できました。


# 公開するサイトを用意する
* 今回は **nginx** を立ち上げ、デフォルトページを表示する までとします

## nginx の準備
* 以下コマンドで **nginx** をインストールします

```
sudo yum install nginx
```

* これで良いかと尋ねられるので `y` を入力し、インストール完了
* 以下のコマンドで nginx を起動します

```
sudo service nginx start
```

* 以下コマンドでステータスを確認します

```
sudo service nginx status
```

* 緑色の● と `Active: active (running)` というメッセージが表示されれば、正常に起動できています。

## サイトにアクセス
* 早速ブラウザに以下URLを打ち込んで確認してみます
* http://＜Public IP Address＞

![07.png](https://qiita-image-store.s3.amazonaws.com/0/216852/1c9407da-2e30-8799-37c3-23e5f5a6e366.png)

* **だめでした。**
* この手の不備の９割近く（自分の場合）は **Port 空いてないよ** が原因なので HTTP ポート（80）を開けてみようと思います
* 通常のオンプレ環境であれば `firewall-cmd` を使ってどうにかする・・・はずですが、世はクラウド時代、きっと何かしらのサービスの設定が Oracle Cloud にもあるはず・・・


# Cloud Virtual Network のポート設定を変更する
* というわけで Oracle Cloud の先程の画面（Computeインスタンスの詳細画面）に戻ります

![08.png](https://qiita-image-store.s3.amazonaws.com/0/216852/a110725c-d007-f085-901b-1a5eb507248b.png)

* **Virtual Cloud Network** に自動生成された風な名前の設定が紐付いているのでクリック

![09.png](https://qiita-image-store.s3.amazonaws.com/0/216852/de023331-1aa8-ba17-ce86-0fadb228d0a3.png)

* 左下に **Security Lists** という設定項目があるためクリック
* 画面右側にセキュリティ設定が表示されるため、先頭の項目をクリック（初期値では１つだけ存在）

![10.png](https://qiita-image-store.s3.amazonaws.com/0/216852/071b2352-d9e4-80cd-3da8-09a4edd554ec.png)

* [Edit All Rules] をクリックしてルールを編集する
* これは Azure の Network Security Group や Windows OS で言うところの ファイアウォール設定「受信の規則」や「送信の規則」ですね

![11.png](https://qiita-image-store.s3.amazonaws.com/0/216852/5a9b5932-03d1-6648-9d7b-18dc5bb2c53f.png)


* （指定方法が少し独特ですが） Ingress Rule 1 の Destination Port Range に 80 をカンマ区切りで追加します
* 画面下の方にある [Save Security List Rules] ボタンをクリックして設定を反映します


## サイトにアクセス（２回目）

![07.png](https://qiita-image-store.s3.amazonaws.com/0/216852/1c9407da-2e30-8799-37c3-23e5f5a6e366.png)

* **だめでした。（２回目）**
* これはもしや Oracle Cloud 側の ファイアウォール設定と、VMの中の `firewall-cmd` の両方をやらなければならないパターン・・・？

## VM 内のファイアウォール設定を変更する
* 以下を実行して HTTP(80)ポート を許可します

```
sudo firewall-cmd --zone=public --add-service=http --permanent
```

* 以下で設定をリロードします

```
sudo firewall-cmd --reload
```

## サイトにアクセス（３回目）

![12.png](https://qiita-image-store.s3.amazonaws.com/0/216852/491a714f-2920-65e0-e1b9-3ded4a2e6f90.png)

* **できました！**
* 今回試した限りだと Oracle Cloud Infrastructure(IaaS) の Compute 単体でサイト公開する場合には、以下２つが必要なようです。
    * クラウド上の設定
        * **Virtual Cloud Network** → **Security Lists** → **Ingress Rules**
    * VM自体の firewall-cmd 設定
* 最近の風潮だと、この辺りのVM自体の細々とした設定は **クラウドオートメーション** でよしなにやってね！という感じでしょうか

# 今回のまとめ
* **今回触れた範囲内** で、かんたんな言い替え表としてまとめてみました
* （本当はこの機能も含まれてるよ！ ・・・等ありそうな気がしますが）

|Azure|Oracle Cloud Infrastructure(OCI)|
|:--|:--|
|Virtual Machine|Compute|
|Virtual Machine の サイズ|Compute の Shape|
|仮想ネットワーク|Virtual Cloud Network|
|Network Security Group|Security Lists（他にもありそう）|
|リソースグループ|Compartment|

# 所感
* 根が Azure(Windows)な視点で 初の Oracle Cloud 体験でしたが、割とすんなりと使うことができたのかなと思います。
* 今回はほんの触りの部分だけとなってしまいましたが、今後は Oracle Cloud 特有のメリットなどまで掘り下げられると良いなあと思います（PaaSを活用し始めて Oracle Cloud 特有の恩恵が得られる気もします）
* 他のクラウドサービスに比べると日が浅いため、正直な所、実際に使っていて *荒削り* な所も感じます…
* **が、** Oracle を日頃活用している案件や会社さん（弊社含む）にとっては、**本家のクラウド** という点でもかなりアドバンテージがあると思います。今後の発展に期待大です！