今日から始める Oracle Cloud 【VM + ロードバランサ】

Oracle Cloud に [Always Free](https://www.oracle.com/jp/cloud/free/) というサービスがありましてですね、なんと

* 2つのOracle Cloud Infrastructure Compute VM、ブロック・ストレージ、オブジェクト・ストレージ、アーカイブ・ストレージ、ロード・バランサとデータ・エグレス、監視と通知
* Oracle Application Express（APEX）やOracle SQL Developerなどの強力なツールを含む、2つのOracle Autonomous Database

がずっと無償で提供されます。

要するに、小規模なDB1個とVM2個ならずっと無償で使えるんですよ。神じゃないですか。

という訳で今回は

* WebサーバとしてVMを2個作成
* ロードバランサ作成
* 作ったVM2つで負荷分散させてみる

までやってみたいと思います。

そこからの展開は何も考えていません。迷わず行けよ行けばわかるさ。

# アカウント開設

[こちら](https://www.oracle.com/jp/cloud/) から作成できます。

住所やメールアドレスといった情報を設定していけば確認用のメールが届くので、

そこでの認証が通ればOKです。メールの書いてあるリンクに行けば、こんな感じのログイン画面が出てくると思います。

![2019-11-17_11h53_41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151399/fffacb4d-2fdc-f1d4-890c-4b0c9168a648.png)

# VM作ってみよう

早速作ってみましょう。コンソールのトップ画面から1クリックで作成画面に行けます。


![2019-11-17_13h04_26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151399/b42f55d4-7545-56a4-4839-54b5600465d2.png)

『インスタンスの命名』は『web01』にします。

イメージソースの選択で、今回は『CentOS 7』を選択します。

今回はパブリックIPアドレスを付与したいので、『シェイプ、ネットワークおよびストレージ・オプションの表示』を選択します。

『パブリックIPアドレスの割り当て』にチェックを入れます。

![2019-11-17_17h10_57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151399/2c7e99ef-5088-95b9-79fa-1df9a3d18da6.png)


次にVMは鍵認証なので、『SSHキーの追加』です。[ssh-keygenコマンド](https://www.atmarkit.co.jp/ait/articles/1908/02/news015.html) で作成した公開鍵ファイルをアップロードします。

アップロードしたら『作成』を押します。

![2019-11-17_13h14_09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151399/3e208684-6f08-615d-3291-9704c8883722.png)

こんな感じのプロビジョニング中を知らせる画面が出るので数分待ちます。緑色の『実行中』になれば作成完了です。

![2019-11-17_13h17_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151399/24b42451-5aba-cc3b-4ef0-f1756e1526f9.png)

接続に必要なので、パブリックIPアドレスを確認します。

![2019-11-17_13h19_29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151399/8eba8608-ea81-b42f-3d72-e31888579550.png)

先ほど作成した公開鍵と同時に作成した秘密鍵を使ってパブリックIPアドレスにSSHしてみましょう。デフォルトの接続用ユーザは『opc』です。

```bash
ssh -i <作成した秘密鍵>  opc@<パブリックIPアドレス>
```

# Web公開してみよう

## VMで行う設定

無事接続できたので、まずはロードバランサなしでWeb公開してみましょう。

firewallの設定見てみましょう。

```bash
$ sudo firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens3
  sources:
  services: dhcpv6-client ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
```

これだとhttp接続できないので設定を追加します。

```bash
$ sudo firewall-cmd --add-service=http --permanent
$ sudo firewall-cmd --reload
```

確認してみます。

```bash
$ sudo firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens3
  sources:
  services: dhcpv6-client http ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
```

それではnginxを入れましょう

```bash
$ sudo yum install nginx
```

自動起動設定をしておきます。

```bash
$ sudo systemctl enable nginx
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
$ sudo systemctl start nginx
```

あとは http://パブリックIPアドレス:80 で繋がるかと思えばそうではありません。ネットワークの設定をします。

## セキュリティ・リストで行う設定

VMの詳細画面に以下のような文言があります。

> このインスタンスのトラフィックは、関連付けられたサブネットのセキュリティ・リストおよびVNICのネットワーク・セキュリティ・グループに加えて、そのファイアウォール・ルールで制御されます。

これは要するに、セキュリティに関する設定は所属するサブネットといったグループ単位、さらに細かいVM（にくっついてるVNIC）単位、もしくはその上位のFWルールで制御できますってことです。

今回はサブネット単位でやります。この設定をすることで、そのサブネットに所属するVMには同じポリシーが適用されることになります。

『ネットワーキング』→『仮想クラウド・ネットワーク』と進みます。

![2019-11-17_13h40_46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151399/65d8fa93-4059-a3b8-bde9-86f0e7872976.png)

先ほど作成したVMが所属するネットワークが表示されてるのでクリックします。

![2019-11-17_13h50_32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151399/2771bbea-b699-649e-2d8d-1ee5b5134ac6.png)

画面左下の『セキュリティ・リスト』をクリックします。

![2019-11-17_13h54_56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151399/ce159ea1-41b1-2223-dbdb-75b1d8373773.png)

セキュリティリストの一覧が出てくるので、今回はデフォルトのセキュリティ・グループを編集します。

![2019-11-17_13h57_06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151399/f2fb1dcc-0a10-b3ce-2969-8eba835fdd34.png)

イングレス・ルール（入ってくるトラフィックに対するルール）の一覧が出てくるので、『イングレス・ルールの追加』を押して、以下のようにhttpリクエストを許可します。

![2019-11-17_14h05_31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151399/9973f6fe-3f90-0231-57d6-3fce6db0777b.png)

ここまで出来たら、『http://VMのパブリックIPアドレス』にWebブラウザでアクセスしてみます。

![2019-11-17_14h06_58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151399/e23851f7-41ae-3908-ad31-36e3d6de27ac.png)

このようにNginxのデフォルト画面が出てくればOKです。

後のために今回は『/usr/share/nginx/html/index.html』を以下のように編集しておきます。

```html
<!DOCTYPE html>
<html>
<head>
 <title>web01</title>
 <meta http-equiv="content-type" charset="utf-8">
</head>
<body>
  <font size="7" color="#00ff00">おすぎです</font>
</boby>
</html>

```

このように表示されれば大丈夫です（何が

![2019-11-17_14h35_24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151399/6184ab6a-988f-6e7a-4f7f-8559bb35b1ec.png)


# ロードバランサーで負荷分散

次はVMを複製して2個にして、作成したロードバランサの配下にぶら下げてみます。


## VMのイメージを取得

コンソールから、『コンピュート』→『インスタンス』と進み、インスタンス一覧画面に進みます。

VM一覧が表示されるので、先ほど作成した『web01』の右側のメニューから、『カスタムイメージの作成』をクリックします。

![2019-11-17_16h00_37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151399/94607ae9-0478-4417-74ed-f49a03ac04fb.png)

カスタムイメージの名前を今回は『web-image』とし、『カスタム・イメージの作成』をクリックします。

作成時はVMが停止するので気を付けてください。

![2019-11-17_16h03_17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151399/5cf2b4a6-11d1-e019-509f-4b1979b49850.png)

カスタム・イメージ一覧に作成したイメージが表示されてるのを確認

![2019-11-17_16h09_58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151399/776f6dcf-1945-8587-2321-f110908882c7.png)


## 作成したイメージからVMを作成

VMの作成画面に行き、今度は名前を『web02』として、イメージ・ソースを先ほど作成したカスタム・イメージに設定します。

![2019-11-17_16h15_41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151399/0f066f99-7e84-bed5-763b-5f77d9473f74.png)

あとは最初に作成した時と同じ要領で、パブリックIPアドレスとsshキーを追加して作成してください。

そして負荷分散を確認したいので、SSHログインして『/usr/share/nginx/html/index.html』を以下のように編集しておきます。

```html
<!DOCTYPE html>
<html>
<head>
 <title>web02</title>
 <meta http-equiv="content-type" charset="utf-8">
</head>
<body>
  <font size="7" color="#4169e1">ピーコです</font>
</boby>
</html>
```
確認のため、http://<パブリックIPアドレス>にアクセスしてみてください。

ブラウザでこのように表示されてれば大丈夫（だから何が

![2019-11-17_16h33_54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151399/49ec1016-e54c-f14d-0db4-5a6ae03acdfe.png)

VMを複製して、サブネット単位でHTTPを許可してるので簡単にできます。

## ロードバランサ作成

『ネットワーキング』→『ロード・バランサ』と進んで、ロードバランサの一覧画面に行き、『ロード・バランサの作成』をクリックします。

以下の設定をし『次の手順』をクリックします

* 名前：任意
* 可視性タイプの選択：パブリック
* 最大合計帯域幅の選択：マイクロ
* ネットワーキングの選択：クリックされるとリストが出てくるので、出てきたものを選択

![2019-11-17_16h40_27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151399/0cd959bd-d2fe-ddb7-a0fe-c559521b52f9.png)


次の画面では以下の設定をします

* ロード・バランシング・ポリシーの指定：重みづけラウンド・ロビン
* バックエンドの追加：先ほど作成したweb01とweb02

ヘルスチェックはデフォルトで大丈夫です

![2019-11-17_16h46_08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151399/91136a52-1b71-bbe9-be9c-a56f5483c928.png)

最後にリスナーの作成です。リスナー名は任意で、トラフィックは『HTTP』を選択し。『ロード・バランサの作成』をクリックしてください。

作成画面に移行するのでしばらく待ちましょう。作成が終わるとこのように黄色からグリーンになります。

![2019-11-17_16h54_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151399/0dbf0cc2-7965-9470-b471-1aed51d1b106.png)

中央に表示されているのが、作成したロードバランサについてるパブリックIPアドレスです。

## 動作確認

アクセスしてリロードしてみましょう。

![2019-11-17_16h58_26.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151399/f1fbf711-388a-441d-1743-885cf0b2f19b.gif)

素晴らしいラウンドロビン。完全に電気の無駄。

ありがとうございました。本当にすいませんでした。


# 感想

僕は普段AWSを業務で使ってます。GUIでの操作が多いです。

そんな僕は今回、Oracle Cloudに関して以下のような感想を持ちました。

* 癖がなく、直感的に使える
* 画面が綺麗なので視認性が高い

今回のロードバランサ作成も、この記事を執筆しながら2，3時間で出来ました。

チュートリアルやヘルプは一切使ってません。

とにかくVM2個とDBは無償なので色々と使ってみたいと思います。

お読みいただきありがとうございました。