はじめに
経済ゲーム実験をオンライン上で行う環境を整えるための記事です.経済ゲームの実験はoTreeと呼ばれる経済ゲーム実験用のソフトウェアを使います.AWS(Amazon Web Services)の1つであるAmazon EC2上にWebサーバを構築してoTreeを動かすことで,ブラウザを通じて複数の実験参加者(被験者)に経済ゲーム(公共財ゲーム,囚人のジレンマゲーム,最後通牒ゲーム,独裁者ゲーム等)をプレイしてもらうことができます.以下の順で,このoTreeとAmazon EC2を用いたオンライン実験システムの構築手順を説明していきます.この記事は@igenkiと@fuku_が共同で書きました.
- AWSでのAmazon EC2の設定
- EC2インスタンスの作成(起動)
- EC2インスタンスへの接続
- EC2インスタンス(OS)の日本語の設定
- 各種ソフトのインストール
- VSCode
- Python
- oTreeとpsycopg2
- PostgreSQL
- oTreeの起動と動作チェック
- Webサーバとしての設定
- FireWallの設定
- 80番ポートの開放
- 外部からのoTreeサーバへの接続
- Elastic IPの設定(IPアドレスの固定)
AWSでのAmazon EC2の設定
今回クラウドを用いてオンライン実験を行うため,AWSを使用します1.AWSを使うためにはAWSアカウントが必要です.このアカウントは事前に作成しているものとします.アカウントを作成したら,ブラウザからAWSマネジメントコンソールにアクセスして,ご自身のログイン情報を入力します(以下の図).
ログインすると以下のようなAWSマネジメントコンソールの操作画面(ホーム画面)が出てくると思います.
※私は既にAWSのサービスのいくつかを利用していますので「最近アクセスしたサービス」にEC2などが出ていますが,初めてアクセスする場合は何もでないかと思います.
リージョンの設定
EC2のインスタンスを作成する前に,リージョン(地域)を選択します.画面右上に現在選んでいるリージョンが出てきています.私の画面では「東京」になっていますが,最初にログインした段階では「東京」になっていないかと思います.その場合,ドロップダウンリストから「アジアパシフィック(東京)」を選んでリージョンを東京に設定します.
※リージョンが東京になっていなくてもEC2インスタンスは作成できますが,物理的なサーバがおいてある場所が近いほうがレスポンスがはやくなるので,特に理由がなければ「東京」に設定しましょう.
EC2インスタンスの作成
いよいよEC2インスタンス(物理的な意味でいうと,サーバ)を作成します.画面左上の「サービス」の隣の検索窓に「EC2」と入れて,検索して出てきたEC2を選びます.(以下の図)
すると次のような画面になります.この中からオレンジ色の「インスタンスを起動」をクリックして,インスタンスを作成します(ここでは,「起動」と「作成」は同じ意味です).
クリックすると次のような「インスタンスを起動」の画面になります.名前のところにここでは「otree」と入力します.サーバのOSとしては今回は「Windows Server 2022 Base」を選択します2.
次に画面下にスクロールすると以下のような「インスタンスタイプ」を選択する画面になります.無料枠で使えるのは「t2.micro」なのですが,t2.microだとメモリが1G程度しかなく動作がとても遅いので,ここではt2.smallを選ぶことにします.
インスタンスにRDP(リモートデスクトップ)で安全に接続するために,その下の「キーペア」の設定をします.「新しいキーペアの作成」をクリックし,出てきた画面のキーペア名にここではotree_keyという名前を入力して「キーペアを作成」をクリックします.otree_key.pemというキーペアがダウンロードされますので,それを適切な場所に保存しておきます(後ほど,RDPで接続する時に使います).
以上でインスタンスの作成は完了ですので,元の画面右の「インスタンスを起動」をクリックして作成を終了します.数秒待つとインスタンスが作成されます.その後,自動的にインスタンスが開始され,インスタンスの状態も「実行中」となります.以下の図で示しているインスタンスの状態は,左のサイドバーの「インスタンス」をクリックすることで確認できます.
EC2インスタンスへの接続
次に,いま作ったoTreeというインスタンスにリモートデスクトップを用いて外部から接続します.まずは上の画像でotreeというインスタンスの「インスタンスID」のところをクリックします.すると下のようなインスタンスの詳細が見れる画面になります.画面右上の「接続」(赤色の四角で囲んだ箇所)をクリックします.
すると下の画面が出てきますので,「RDPクライアント」のタブをクリックします.赤い四角で囲んだ「リモートデスクトップファイルのダウンロード」をクリックします.
するとotree.rdpという名前のクライアントファイルがダウンロードされますので,それをダブルクリックします.すると以下の画面が出ますので「接続」をクリックします.
接続のためのパスワードを聞かれます.
このパスワードは元の「インスタンスに接続」の画面に戻って,赤い四角で囲んだ「パスワードを取得」を押して入手します.
すると下の画面が出てくるので,赤い四角で囲った「Browse」をクリックして,「キーペアを作成」のところで作った「otree_key.pem」を選んで「開く」を押します.最後に「パスワードを復号化」をクリックします.
すると元の画面に戻り,パスワードが入力された状態(画面では黒塗りにして隠しています)になりますので,その内容をコピーして,さきほど求められたパスワードのところに貼り付けてOKを押します.
以下の「証明書」に関する画面が出ますので,「はい」を押します.
すると以下の画面のようにEC2インスタンスにリモートデスクトップで接続できます.あとはローカルのPCを操作する感覚でリモートからEC2インスタンス(Windows 2022 Server)を操作できます.
EC2インスタンス(OS)の日本語の設定
ここまででEC2インスタンスにリモートで接続して操作できるようになりました.初期状態では,OSで使用されているデフォルトの言語が英語なので,これを日本語に変更します.画面左下のWindowsロゴキーをクリックして歯車の「Settings」をクリックします.出てきた下の画面から赤い四角で囲んだ「Time & Language」を押します.
押して出てきた画面から「Language」を選択して,赤い四角で囲んだ「Add a language」を押します.
「日本語」を検索して選んで「Next」を押します.
出てきた画面で「Install」を押します.インストールが始まります.インストールには5分から10分ほどかかると思います.
インストールが終わったら,以下の画面の「Windows display language」で日本語が選べるようになっているので「日本語」を選択します.
日本語が表示されるようになるには,一旦サインアウトする必要があるので,Windowsロゴキーをクリックして「Administrator」を選び,サインアウトします.ここでリモート接続が切れるので,数分待ってから,otree.rdpを再びダブルクリックして,同様の手順でリモート接続します.これでOSで表示される言語が日本語になりました.
各種ソフトのインストール
これでOSの設定は終わったので,oTreeを使うための各種ソフトをインストールしていきます.これらのソフトのインストールは明治大学の後藤晶先生の玉川大学脳科学トレーニングコース2022の5.サーバにアップしようの資料を参考にしていますので,そちらも合わせてご覧ください.
VSCode
プログラムを編集するエディタは何でも良いのですが,ここでは便利で高機能なVSCodeをインストールします.ブラウザのEdgeを開いてVSCodeを検索し,以下のページから「Download for Windows」をクリックします.ダウンロードされたファイルを開いて,あとは指示された手順通りにVSCodeをインストールします.
Python
oTreeはPythonのWebフレームワークであるDjangoがベースとなっているのでPythonをインストールしておく必要があります.Edgeのアドレスバーにhttps://python.org/downloads を入力すると以下の画面が出ます.「Download Python 3.10.7」(バージョンは2022/9/9現在)をクリックしてファイルをダウンロードします.
ファイルを開いてインストールを始めます.インストールの最初の画面で「Add Python 3.10 to PATH」(画面の赤い四角のところ)にチェックを入れてから,「Install Now」を押します.後は指示に従ってインストールします.
Pythonが正常にインストールされたか確認します.Windows PowerShellを開き,「python --version」というコマンドを打ってEnterを押します.以下の画面のようにPythonのバージョンが表示されれば,Pythonが正常にインストールされています.
oTreeとpsycopg2
いよいよoTreeをインストールします.引き続きPowerShell上で「pip install -U otree」というコマンドを打って,Enterを押します.oTreeのインストールが自動で始まります.特にエラーも出なければインストールは終了です.
次に,PythonからPostgreSQLに接続するためのアダプタであるpsycopg2をインストールします.引き続きPowerShell上で「pip install -U psycopg2」というコマンドを打って,Enterを押します.インストールが自動で始まります.特にエラーが出なければインストールは終了です.
PostgreSQL
実験データをデータベースに貯めるため,データベースアプリが必要です.ここではデータベースアプリとしてPostgreSQLをインストールします.Edgeのアドレスバーにhttps://www.enterprisedb.com/downloads/postgres-postgresql-downloads を入力してEnterを押します.以下の画面が出ますので,「Windows x86-64」の「14.5」(2022/9/9現在)のバージョンをダウンロードします.
ファイルをクリックするとインストールが始まります.指示通りにクリックしていきますが,途中で「Password」という画面がありますのでパスワードを設定してください(※ここではotreeというパスワードにします).
次にいくつか進むとLocaleを設定する画面になりますので,「Japanese, Japan」を選択してください.
あとは指示通りに進めるとインストールが終了します.次にPostgreSQLのGUI管理ツールであるpgAdminを使って少し設定をします.Windowsロゴキーをクリックすると「P」のところにPostgreSQLが見つかりますので,そのフォルダの中からpgAdmin 4をクリックして起動します.
パスワードを聞かれますので,先ほど設定した「otree」を入力します.
左のサイドバーの「Servers」をクリックして,「Databases」を右クリックし,「Create」→「Database」をクリックします.
すると下の画面が出てくるので,Databaseのところに「otree_db」と入力し,「Save」を押します.
次にクライアントの認証ファイルであるpg_hba.confファイルを少し変更する必要があります.C:\Program Files\PostgreSQL\14\data
にpg_hba.confがありますので,これをVSCodeで開いて編集します(メモ帳等で開いても良いです).85-94行目にある「scram-sha-256」という文字列をすべて「trust」に変更してください.全部で6個あります.変更が済んだらファイルを上書き保存してください.
oTreeの起動と動作チェック
以上でoTreeを動かすために必要な準備は整いましたので,oTreeの起動と動作チェックを行います.
この項目も後藤晶先生の玉川大学脳科学トレーニングコース2022の1.オンラインアンケートを作ってみようの資料を参考にしていますので,そちらも合わせてご覧ください.
まずPowerShellを起動してDesktopにcd Desktop
で移動し,mkdir otreetest
で,otreetestという名前のフォルダを作ります.
次にotreetestフォルダにcd otreetest
で移動し,otree startproject otree
というコマンドを打ちます.すると「otree」フォルダ以下に各種ファイルが自動で生成されます.
次にcdコマンドでotreeフォルダに移動し,そこでotree devserver
というコマンドを打って,otreeサーバを起動します.
oTreeが正常に動作しているか確かめてみます.Edgeのアドレスバーにhttp://localhost:8000/ を入力してEnterを押します.以下のような画面が出てきたら成功です.
「survey」をクリックしてみてください.「P1」を選ぶと「アンケート調査」が始まると思います.これは,oTreeに最初から用意されているデモのプログラムです.自分でoTreeのプログラムを作ってみたい場合は,1.オンラインアンケートを作ってみようで「オンラインアンケート」のアプリを作ってoTreeに登録してみてください.単なるアンケートではなく,経済ゲームのプログラムを作りたい場合は玉川大学脳科学トレーニングコース2022の2,3,4の項目を辿ることでできます.
これで,EC2インスタンス上でローカルにoTreeを動かすことができました.
Webサーバとしての設定
ここまででは,ローカルの環境でしかoTreeが動いていません.本来の目的であるオンラインで経済ゲーム実験を行うためには,外部からoTreeに接続できるようにする必要があります.ここではその設定をします.
Firewallの設定
まずは外部からの接続を許すためにEC2上のFireWallの設定をします.デスクトップ画面下の検索窓に「ファイア」などと打つと「ファイアウォールの状態の確認」が出てくるので,それをクリックします.
出てきた画面から左のサイドバーの「詳細設定」をクリックします.
出てきた画面から「受信の規則」を押すと右側のサイドバーに「新しい規則」が出るのでそれをクリックします.
すると以下の画面がでるので,「ポート」を選び,
「特定のローカルポート」に80を入力して「次へ」を押していきます.
最後の「名前」の箇所にoTreeを入力して完了です.これでFireWallの設定は完了です.
80番ポートの開放
EC2上でも80番ポートを開放して外部からの接続を許可する必要があります.AWSマネジメントコンソールの画面に戻り,左のサイドバーから「セキュリティグループ」を選びます.この中から上記で作成したインスタンスに対応する「セキュリティグループID」を選んでクリックします(インスタンスの情報からセキュリティグループのIDは調べられます).今回の場合は一番下のものです.
出てきた画面の「インバウンドのルールを編集」(赤い四角)をクリックします.
「ルールの追加」を押して,タイプで「HTTP」を選び,ソースのアドレス欄からCIDRブロックで一番上の「0.0.0.0/0」を選択し,「ルールを保存」を押します.
これでEC2も80番ポートでの接続を許可するようになりました.
外部からのoTreeサーバへの接続
外部から接続する準備が整いましたので,EC2インスタンスのリモート接続画面に戻り,PowerShellで一旦Ctrl+Cを押して起動していたotreeを停止します.その後,otree prodserver 80
というコマンドを打ちます.これで,oTreeサーバを80番ポートで起動したことになります.
外部からブラウザ(HTTP)で接続できるか確認してみましょう.AWSのインスタンスの画面のパブリックIPv4アドレスの欄を見ると,このEC2インスタンスのパブリックなIPアドレスが13.112.244.59であることが分かります.
外部の端末(パソコン,タブレット,スマホ等)から,ブラウザのアドレスバーにhttp://13.112.244.59 と入れて接続してみます.以下のようにoTreeに接続できている画面が出てきたら成功です(現在は接続できません).
Elastic IPの設定(IPアドレスの固定)
EC2インスタンスのパブリックのIPアドレスは,インスタンスを停止して,開始するたびに変更になります.毎回固定したIPアドレスを使うためには,EC2上でのElastic IPの設定が必要です.ここではその設定を行います.サイドバーから「Elastic IP」(赤い四角で囲んだところ)をクリックすると以下の画面になります.画面右上の「Elastic IPアドレスを割り当てる」をクリックします.
以下の画面が出ますので「割り当て」をクリックします.
すると,ここでは,54.248.63.164というIPアドレスが新たに割り当てられたことが分かります.「割り当てられたIPv4アドレス」欄のこのIPアドレスをクリックします.
以下の画面が出てきます.まだこのIPアドレスはEC2インスタンスと関連付けができていないので,画面右上の「Elastic IPアドレスの関連付け」をクリックします.
以下の画面が出てきますので,インスタンスの欄(赤い四角のところ)に上記で作ったインスタンスを指定して,画面右下の「関連付ける」をクリックします.
これで,毎回この固定したIPアドレスでoTreeサーバにアクセスできるようになりました.1つ注意ですが,IPアドレスが13.112.244.59から54.248.63.164に変わりましたので,接続情報が変わります.リモートデスクトップでサーバに接続する時は,もう一度リモートデスクトップのクライアントファイルをダウンロードしてから,そのファイルで接続する必要があります.接続のパスワードは変わりません.
最後に再びoTreeサーバをPowerShellで起動して,固定したIPアドレスで接続できるか確認してみましょう.外部の端末のブラウザのアドレスバーにhttp://54.248.63.164/ を入力してアクセスします.以下の画面が出て,無事にアクセスできることが分かりました(現在はインスタンスを停止しているのでアクセスできません).
以上で,Amazon EC2上でのoTreeの動かし方の解説を終わります.これから,クラウド環境で経済ゲーム実験を行おうと考えている方のお役に立てば幸いです.