🎮

Webブラウザとクラウドサービスを使った遠隔仮想環境でゲーム用の低予算バックエンドを拵える話 (その1)

2021/10/16に公開

概要

ネットワークの事前知識がそれほどない(これから勉強していきたい!)という前提で、ゲームにネットワークの要素をなんとか低予算で導入したいと考えている方に向けて、地道に進めるバックエンド環境構築例を紹介します。途中、以下のサービスやテクノロジーが登場します。(記載内容は2021年10月中旬時点の情報となります)

  • Google Cloud Platform(以下、GCP), Google Compute Engine(以下、GCE), Cloud Shell, Cloud Shell Editor
  • Linux, Debian
  • PostgreSQL, PhpPgAdimin, SQL
  • Node.js, Expressフレームワーク, fsモジュール, node-postgres(pg)モジュール
  • HTTP, HTTPS

ゲーム用のバックエンド?

ゲームにネットワークの要素を導入するためには、「サーバ」と呼ばれるコンピュータが必要となるケースがほとんどです。これは、ゲームを遊ぶユーザーの保有する端末(スマホ、PC、ゲーム機)や開発に使用しているあなたのコンピュータではありません。(開発に使用しているコンピュータでも実現できないわけではありませんが様々な理由で現実的ではありませんのでここでは割愛します)皆さんのコンピュータが「表」の存在だとすれば、「サーバ」は「裏(=バック)」のコンピュータになるわけです。

ゲーム用のバックエンドと書いていますが、実際のところは軽量Webサービスのバックエンドを構築する流れとほぼほぼ一緒です。ゲームの内容によっては、以下に挙げるような既存のネットワークゲーム開発支援サービスやテクノロジーの無料枠でネットワークの要素を実現した方が簡単な場合も多いです。

以上の内容を踏まえて、敢えてこの記事のポイントを挙げるとするならば以下の方向けと言えます。

  • ゲーム用のクラウドサービスを使用しているが、無料枠だと痒いところまで手が届かないので自作するしかない
  • バックエンドの構造や構築方法、合わせて必要な知識情報を大雑把に理解したい
  • この記事に登場するサービス、テクノロジー、もしくはその組み合わせに興味がある
  • 社内ネットワークでポートが固く閉じられていて困っている(せいぜい使用可能なのはHTTP,HTTPSだけ)がどうにかしてネットワークの要素を開発内容に取り入れたい
  • 新しいソフトを手元のPCにインストールしたくない。Webブラウザで完結したい。

実現すること

  • 手元の開発環境(PC,ネットワーク)の影響を極力受けない状態でバックエンドを用意する(Webブラウザ=HTTP,HTTPSのみ、SSHクライアントは使用しない)
  • アプリケーションサーバ(Webサーバ+サーバサイド言語処理環境)を用意する
  • データベースサーバを用意する
  • 各サーバ用のデータ作成とデータ編集が行える環境を整える
  • お金(費用)はなるべくかけない

作業のステップ

作業をいくつかのステップに分け、順番に紹介してきます。

  1. 事前準備+GCEで遠隔仮想環境を構築
  2. テキスト編集環境を用意する
  3. アプリケーションサーバを用意する
  4. データベースサーバを用意する
  5. 取り回しの良さを向上させる

初回である今回の記事では「事前準備+GCEで遠隔仮想環境を構築」編となります。

事前準備

Webブラウザがインストールされたコンピュータは持っていることを大前提として、次のものを用意します。

  • Googleアカウント
  • クレジットカード

無料トライアルで テストするならGoogleアカウントのみでOKです。 もクレジットカードが必要になったようです。
今回はGCPに用意されている無料トライアルが尽きた後の(クレジットカード登録が済んでいる)状態で「できるだけ低価格な環境」を構築します。

GCEで遠隔仮想環境を構築する

最初のステップは、GCP内の製品GCEを使って仮想環境をレンタルして「サーバ」の土台にします。

GCPは、Googleの提供する各種クラウド製品を包括した統合プラットフォームの名称です。簡単に説明すると、Googleにお金を払うことでGoogleの保有する強力なネットワークやコンピュータ環境などのハードウェア的な製品をはじめ、機械学習や分析機能などのソフトウェア的な製品まで実に様々なサービスやテクノロジーを遠隔から利用することができるようになるというものです。似たようなものとして、Microsoftの提供するAzureやAmazonの提供するAWSなどが有名です。

GCEは、コンピュータ1台の性能を分割し、複数のコンピュータが同時に動いているかのように見せる仮想化技術を使って実現されている製品です。我々ユーザーが(一定の選択肢の中から)「希望する性能のコンピュータ」を申請すると、Googleが自社保有の超高性能コンピュータの性能を切り分け、「希望する性能のコンピュータ」を用意してくれます。この「希望する性能のコンピュータ」は実物が存在するわけではないので、仮想環境(バーチャルマシン、VM)と呼ばれます。GCEを簡単に説明すると、「画面をたったの数クリックするだけで仮想環境を手に入れられるサービス」となります。

さてそこで気になる金額についてですが、GCPのどの製品も基本的に「一ヶ月ごとに使った分だけ徴収される」仕組みとなっています。「使った分だけ」の中には、1ヶ月ごとにリセットされる「無料枠」も存在するため、今回はこの無料枠を大きく活用する形で構築を進めます。設定を間違えると高額請求される可能性もありますので気をつけながら作業を進めてください。詳しくは公式のGoogle Cloudの無料プログラムをご確認ください。

プロジェクト作成

まずはGCPの公式サイトへ移動し、画面右上のボタンから開発者用のメニュー(以下、コンソール)を開きます。

GCPでは、製品の利用状況を「プロジェクト」と呼ばれる単位で監視していますので、何はともあれプロジェクトを作る必要が生じます。まずはコンソール上部をクリックし、「新しいプロジェクト」を選択することで入力画面に遷移します。

プロジェクトの作成方法は実に簡単で、表示された画面で「プロジェクト名」の項目で好きな名称を指定するだけです。わかりやすくするために、作ろうとしているゲームの名称などを入力してみてはいかがでしょう?

プロジェクト生成後のトップ画面については、深く言及しませんので早速次の工程に移りましょう。

GCEを利用する

新しいプロジェクトをコンソールで開いている状態で左上のハンバーガーメニューをクリックすると、GCPに含まれる各種製品の名称がリスト表示されます。今回はGCEまでマウスカーソルを動かし、横に出てきたリストの中から「VMインスタンス」を選択します。

初めての場合は次のような画面になりますが、「有効にする」をクリックしてしばらく待てばGCEの設定画面に自動で遷移します。
                                                             

画面遷移後、画面上の項目から「インスタンスを作成」をクリックします。

インスタンス作成時に決めること

インスタンスは仮想環境の単位(1仮想環境=1インスタンス)です。インスタンス作成時は多くの内容を設定しますが、今は一旦次に挙げる項目だけ変更したあと、「作成」ボタンをクリックしてください。

  • インスタンス名
  • リージョン/ゾーン
  • マシン構成
  • ブートディスク

インスタンス名

英語小文字、数字、ハイフンのみ有効である以外に特に縛りはありません。任意につけてください。ここでは、仮に「myserver」とします。

リージョン/ゾーン

世界各国に存在するGoogle拠点の中から、仮想環境をどこに作るのかを指定する欄です。設置場所によって、「性能の選択肢の豊富さ」や「通信速度(=ユーザーまでの距離)」をはじめとした違いが存在します。「東京」や「大阪」などの選択肢も見えますが、 無料枠を利用できるのは以下に挙げるリージョンだけです。絶対に対応するものを選択してください。

  • オレゴン: us-west1
  • アイオワ: us-central1
  • サウスカロライナ: us-east1

ゾーンはリージョン内部をさらに区分したものですが、今回構成する仮想環境においては影響は少ないので、好きなゾーンを選択して問題ありません。

マシン構成

現在無料枠を使用できる仮想環境について、選択肢は1つしかありません。

  • 「汎用」タブ
  • マシンシリーズ「E2」
  • マシンタイプ「e2-micro」

ブートディスク

仮想環境のために用意するストレージとプリインストールするOSを複数の選択肢の中から選びます。「変更」ボタンをクリックし、出現した小窓でひとまず次のように設定した後、「選択」ボタンをクリックして決定します。

  • OS:Debian
  • バージョン:Debian GNU/Linux 10 (buster)
  • ブートディスクの種類:標準永続ディスク
  • 容量:30GB

ここまでの設定が済んだ後は、「作成」ボタンをクリックして仮想環境を構築します。GCEの設定画面に戻されますが、ほんの数十秒〜1分もしない間に構築が済み、次のような表示に画面が更新されれば成功です。

仮想環境にアクセスする

仮想環境が出来上がったので、早速このコンピュータを操作して色々なことに取り組みたいところです。しかし、それをする前に通信とセキュリティに関わる大事な設定を確認していきます。

まず大前提として、GCEの仮想環境(GCEに限らず、GCP内の全ての製品)は「自宅に届く」といったことはなく、常にGoogleが保有します。そのため、この仮想環境に「遠隔からログインして操作」を行う必要が生じます。悲しいことに、「ネットワークに繋がった自由に操れるコンピュータ」は見つかった途端に犯罪者のオモチャにされてしまいます。仮想環境にアクセスされて困るデータはおかないにしても、乗っ取られて「踏み台」などにされては溜まったものではありません。「第三者には遠隔操作されず、自分は遠隔操作できる」設定が施されている必要があります。

静的IPアドレスの固定(静的IPアドレスの予約)

自作のゲームとこの仮想環境を連携させるためには、外部からこの仮想環境へアクセスする手段が必要です。その手段として利用するのが静的IPアドレスです。IPアドレスはインターネット上のコンピュータの住所に当たります。この番号を控えておき、後で利用する形をとります。ところが、構築されたばかりの仮想環境のIPアドレスは一定時間おきに変化するエフェメラル(一時的)な状態となっています。
「昨日はアクセスできたのに今日はできない!」となってしまっても困るので、これを固定するために「静的IPアドレスの予約」を行います。

GCEの設定画面中央には、先ほど生成したばかりの仮想環境「myserver」の情報が記載されています。画面の右端にある、「・・・」を縦に並べたボタンをクリックすると「myserver」に対して様々な操作を行うことができます。この中からまず「ネットワークの詳細の表示」をクリックします。

画面が、「VPCネットワーク」という表示に変化するので左側のリストから「外部IPアドレス」を選択します。

画面上部に表示されている「静的アドレスの予約」をクリックします。

画面が切り替わった後に、以下の必要事項を入力(選択)して、「予約」ボタンをクリックします。それ以外の項目はデフォルトのままで問題ありません。

  • 名前:任意
  • リージョン:仮想環境を作成した場所と同じリージョンを指定
  • 接続先:先ほど作成した仮想環境を選択(例:myserver)

ものの数秒でエフェメラルではなく静的IPアドレスが仮想環境に紐付けされました。

ファイアーウォールルール

ファイヤーウォールは、ネットワークやコンピュータを守るためのセキュリティシステムの一つです。簡単に言えば、城を守る城壁のようなものです。城壁とはいえ、内外にデータを送受信する必要があるため、門がついており、門番が通って良いデータと通ってはいけないデータに睨みを効かせています。ファイアーウォールルールはこの門番が手に持っているリストのようなもので、これに記載されている内容に合わせてデータを通す、通さないを決めています。

まずは、ファイアーウォールルールがどのようになっているか確認します。

静的IPアドレスの予約が済んだすぐ後であれば、引き続き「VPCネットワーク」という文字が左上に大きく表示されたままと思います。そのまま、左側のリストから「ファイアーウォール」を選択します。そこに表示されたものがファイヤーウォールルール、通信のチェックリストになります。

ここに表示されたファイアーウォールルールはデフォルトで用意されているもので、ここから任意に追加が可能です。また、ここにない通信は基本的に全て拒否される設定となっています。

横(各列)の記載内容は大まかに次のような意味合いを持ちます。

  • 名前:各行のルールをそれぞれ個別にわかりやすくするために付けられた名前
  • 種類:上り(外から仮想環境への通信か)、下り(仮想環境から外への通信か)
  • ターゲット:このルールの適用範囲。「全てに適応」とある場合は、構築した全ての仮想環境に自動で適用され、「ターゲットタグ(固有の名前)」がついていれば、このタグのついた仮想環境に関係のある通信でのみ効果を発揮する。
  • フィルタ:「上り」であればどこのIPアドレス(住所)からやってきた通信か、「下り」であればどこに向かっていく通信か
  • プロトコル/ポート:どんなプロトコルを使用しているか、どのポート(門)を通りたいのか
  • アクション:前述の5項目を踏まえ、条件に当てはまった通信について、許可(通す)か 拒否(通さない)か

現時点ではこのままで問題ありませんが、将来的に設定を変更しに戻ってきます。

請求アラート

GCPをはじめとしたクラウドサービスを使っていると突然法外な金額を請求されるのではないかと心配する方もいるのではないかと思います。そこで、この請求アラートを設定しておきます。

コンソールの左上をクリックして表示されるナビゲーションメニューから「お支払い」をクリックします。

続けて、左側のメニューから「予算とアラート」ボタンをクリック、表示された画面の上部にある「予算を作成」の文字をクリックします。

以下の3項目を表示に従って適宜入力し、「次へ」や「終了」ボタンをクリックします。

  1. 範囲:名称を任意につける(例:GCPのアラート)
  2. 金額:予算タイプを「指定制」。目標金額を例えば「¥500」にする
  3. 操作:任意の閾値、警告線を設定します

もし、アラートメールが飛んできたら急いでGCPにアクセスし、バーチャルマシンを停止したり、必要があれば今まで施した設定を変更、削除をするなどを検討しても良いかもしれません。

よくわからない場合は、究極の手段として課金を無効にするテクニックもあります。詳しくは公式のドキュメントをご確認ください。

いよいよアクセスする

では仮想環境にアクセスしてみます。

ナビゲーションメニューから「Compute Engine」の文字をクリックし、表示された仮想環境(例:myserver)の右側に見える「SSH」の文字をクリックします。

しばらく待つと・・・


念の為、大事な部分はモザイク

何か黒い画面が出て来れば成功です。
普段使っている、MacやWindowsとは大違いな地味な画面が表示されますが、紛れもなくあなたの仮想環境です。おめでとうございます!!

え!? どうやってここから操作するの?

次回、Webブラウザとクラウドサービスを使った遠隔仮想環境でゲーム用の低予算バックエンドを拵える話 (その2)にてこの仮想環境の操作を行っていきます。

Discussion