OCI 無料期間終了後も完全無料で Load Balancer と VM 2台を使ってみる

Pocket

Oracle Cloud Infrastructure (OCI) で「Always Free」プランが発表されてしばらく経ちます。30日の無料期間内に300ドル分のクラウドリソースが利用でき、無料期間が終了した後も、

  • Compute Instance (VM) 2台 (1/8 OCPU)
  • Load Balancer 1つ (10Mbps)

などが無料で利用し続けられます。

今回はこの Always Free な Load Balancer と VM 2台を使って、ロードバランスされた Web サーバ環境を構築してみます。合わせて、無料期間終了後・有償プランに切り替えても引き続き無料で利用できるリソースについて、もう少し掘り下げてみます。

前提条件

以降の手順では、

  1. OCI に登録済であること
  2. 適当な VCN を作成済であること
  3. OCI 無料期間が終了し、有償利用にアップデートしてあること

を前提とします。Subnet や Security List の詳しい説明や設定は割愛します。

有償利用に切り替えても、以降の作業で作成するリソースは無料で利用できる範囲内なので、課金が始まることはありません。

万が一に備えて、OCI の「Budgets」機能で予算アラートを設定しておくと良いでしょう (今回は説明を割愛します)。

OCI Compute Instance を作る

まずは VM を2台作成します。今回は簡単にするため、2台の VM それぞれに「予約済 Public IP アドレス」を割り当てます。

  1. OCI 管理コンソール左上のハンバーガーメニュー → Networking → Public IPs と進みます
  2. 「Create Reserved Public IP」ボタンを押下し、適当な名前を付けて Public IP を発行します
    • 手順 1. 〜 2. を2回繰り返し、2つの「予約済 Public IP」を発行します
  3. OCI 管理コンソール左上のハンバーガーメニュー → Compute → Instances と進みます
  4. 「Create Instance」ボタンを押下し、Always Free Eligible な VM を作成します
    • 「Do not assign a public IP address」を選択しておき、VM 作成時は Public IP を割り当てないようにしておきます
    • 手順 3. 〜 4. を2回繰り返し、2つの Compute Instance を作成します
  5. 作成した VM 名を選択 → 左下 Resources 欄の Attached VNICs → VNIC 名を選択 → 左下 Resouces 欄の IP Addresses と進みます
  6. 定義済の IP Address 欄の右端にある3点リーダアイコンより「Edit」を選択します
  7. ラジオボタンで「Reserved Public IP」を選択し、手順 2. で作成した「予約済 Public IP」を選択・割り当てます
    • 手順 5. 〜 8. を2台の VM について繰り返し、それぞれの VM に Public IP を割り当てます

ここまで作業すると、対象の VM の Public IP を指定して SSH 接続ができるようになるかと思います。

Reserved Public IP は有償利用に切り替えると、50個まで無料作成できる

無料期間中は、Reserved か Ephemeral かに限らず、Public IP は1つしか作成できませんでした。

  • つまり、VM 1台に Public IP を割り当てると、パブリックな Load Balancer は作成できない (作成ボタン押下時にエラーが出る) ようになっていました
  • もし、先にパブリックな LB を作ってあると、Ephemeral Public IP を持った VM を作成したり、予約済 Public IP を発行しようとしたりした時にエラーになります

この仕様は以前私が Qiita にて公開した記事でも触れました。

永久無料枠の中だけでは Public IP が1つしかもらえないので、Load Balancer に Public IP を割り当てた場合は Compute Instance に Public IP を割り当てられず、SSH 接続したりするのが困難になります。一方、Compute Instance に Public IP を割り当てると、Public IP を持つ Load Balancer が作れなくなるので、2台の Compute Instance を活かした Web アプリは公開しづらくなります。

また、バグなのか分かりませんが、作成・アタッチしていた Public IP が突然 VM や LB から外れて、リソースの存在ごと削除されていることが何度かありました。再度 Public IP を発行して割り当てることは可能ですが、妙な動きです。

At some time in last couple of days, the Public IP for my Free Tier Computing Instance became unavailable. I would be very grateful for any advice on how to get it back. I would like to avoid terminating and recreating the instance

このような「作成できるリソースの上限」は、

  • OCI 管理コンソール右上のユーザアイコン → テナンシ名を選択 → Service Limits 欄

と進むと確認できます。

アカウントを有償プランに切り替えると、無料利用できる枠が増えて、50個まで予約済 Public IP が持てるようになります。

Reserved Public IP Count limit gets set to 1 instead of 50 after the trial ends.

これで、LB に1つ、VM 2台に2つ、合計3つの Public IP を割り当てられるようになった、というわけです。

OCI Load Balancer を作る

さて、続いて Load Balancer を作ってみましょう。

  1. OCI 管理コンソール左上のハンバーガーメニュー → Networking → Load Balancers と進みます
  2. 「Create Load Balancer」ボタンを押下します
  3. 「1. Add Details」ステップより、次のように選択していきます
    • 「Choose Visibility Type」:「Public」(インターネット上に公開された LB を作成します = LB に Public IP が付与されます)
    • 「Choose the maximum total bandwidth」:「Micro」(無料で利用できるタイプを選択します)
  4. 「2. Choose Backends」ステップの「Add Backends」ボタンより、LB が通信を割り振る対象の VM を選択します
    • 先程作成した2台の VM を選択し、それぞれの VM の80番ポートに通信を割り振るよう指定します
  5. 「3. Configure Listener」ステップにて「HTTP」タイプを選択します
    • 今回は簡単にするため HTTPS 通信ではなく HTTP 通信とします

これで Load Balancer が作成できました。作成された LB の詳細を見ると、「IP Address」欄で LB の Public IP が確認できます。最終的にこの IP アドレスにアクセスすることになるので、控えておきます。

2台の VM に nginx をインストールする

2台の VM を Web サーバとして動作させるため、nginx をインストールしていきます。各 VM に SSH 接続して root ユーザに切り替え、次のように操作していきます (ここでは Oracle Linux OS を例にしています)。

# nginx のインストールに必要なパッケージをインストールする
$ yum install -y yum-utils

# リポジトリファイルを作る
$ vi /etc/yum.repos.d/nginx.repo

/etc/yum.repos.d/nginx.repo ファイルの内容は次のようにします。

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

引き続き作業していきます。

# nginx をインストールする
$ yum install -y nginx

# インストールできたかバージョン確認する
$ nginx -v

# nginx を起動する
$ systemctl start nginx

# 状態を確認する
$ systemctl status nginx

# 動作確認する
$ curl http://localhost:80/

curl した結果、「Welcome to nginx!」といった内容が返ってくれば、nginx が起動できています。

なお、デフォルトでは firewalld によって外部 (インターネット) から80番ポートへのアクセスが遮断されているので、次のコマンドで通信を許可します。

# 外部から http (80ポート) へのアクセスを許可する
$ firewall-cmd --add-service=http --permanent

# 設定を反映する
$ firewall-cmd --reload

これで、VM の Public IP を指定して curl すれば、先程と同じように「Welcome to nginx!」といった文言が返ってくるかと思います (うまく接続できない場合は、Security List 設定で80番ポートへのアクセスが許可されているか確認してください)。

必須の設定はここまでですが、後でロードバランシングが正常に行われているか確認しやすくしておきます。次の HTML ファイルを開き、1台目の VM と2台目の VM で異なる文言を表示するように書き換えておきます。

$ vi /usr/share/nginx/html/index.html

# 適当に「VM 1」とか「VM 2」とか、異なる文言を書き込んでおく

この HTML ファイルは、動作確認時に「Welcome to nginx!」という文言を返していた HTML ファイルです。

Load Balancer 越しに閲覧してみる

  • 2台の VM が80番ポートを開放して nginx サーバを公開
  • LB の Backend に2台の VM を設定

という作業が完了しましたので、Load Balancer の Public IP を指定して、ブラウザからアクセスしてみます (アクセスできない場合は、LB が所属する Subnet の Security List を見直し、80番ポートへのアクセスや同一 VCN 内の通信を遮断していないか確認してください)。

index.html の内容を VM ごとに書き換えておいたので、ブラウザをリロードする度に通信の割り振り先が変わり、「VM 1」とか「VM 2」とかいう文言が代わる代わる表示されるかと思います。ちゃんとロードバランシングされていることが確認できるでしょう。

通信料はかからないのか

10Mbps という小さな帯域幅の LB ではありますが、これで一応、ロードバランサを前段に据えた2台構成の Web サーバを世に公開できたわけです。ドメイン設定や HTTPS 化を済ませて、一般的な Web サービスや Web サイトを公開することも、技術的には可能です。

仮にそのように Web サービスを公開したとして、気になるのはデータ通信料金でしょう。

Oracle Cloud の場合は、インバウンド (ユーザが LB や VM へとアクセスしてくる通信) の転送料金は無制限で無料です。アウトバウンドについては、同一リージョン内の通信は無料で、リージョン外に出る通信は月 10TB まで無料です。

例えば今回作成した LB と VM との間で行われる通信は「同一リージョン内の通信」になるので、その部分には費用がかかりません。VM からインターネットへの通信を行う部分で、月 10TB 分までが無料となります。

月 10TB というのは、まず使い果たせない量です。実際に Oracle Cloud を本番利用されている某企業様でも、月々のアウトバウンド通信量はこの無料枠を超えていません。とはいえ、10TB 以降は通信料が課金されますので、念のため OCI 管理コンソールで予算アラート設定をしたり、Cost Analysis で利用料の確認をしておくと安心できるかと思います。

まとめ

OCI の Always Free な LB と VM 2台で、ロードバランスする Web サーバを公開できました。Qiita 記事 でも紹介したとおり、ATP・ADW も2台まで無料枠で作成できますので、DB を絡めた Web サービスを完全無料で公開することも不可能ではないかと思われます。

この検証を通じて、無料プランから有償プランに切り替えると、無料で利用できるリソース数の上限が増加するものがあることも分かりました。特に Public IP は、無料プランでは1つしか作れなかったところ、50個まで作成できるようになるので、有償利用するつもりがなくとも、有償プランに切り替えておくと捗るでしょう。

OCI のデータ通信料はアウトバウンドが月 10TB を超えるまでは無料ですので、やはり大変太っ腹なサービスだと思います。

Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です