0
0

More than 1 year has passed since last update.

Amazon EC2上でoTreeを動かしてみる

Last updated at Posted at 2022-09-09

はじめに

経済ゲーム実験をオンライン上で行う環境を整えるための記事です.経済ゲームの実験はoTreeと呼ばれる経済ゲーム実験用のソフトウェアを使います.AWS(Amazon Web Services)の1つであるAmazon EC2上にWebサーバを構築してoTreeを動かすことで,ブラウザを通じて複数の実験参加者(被験者)に経済ゲーム(公共財ゲーム,囚人のジレンマゲーム,最後通牒ゲーム,独裁者ゲーム等)をプレイしてもらうことができます.以下の順で,このoTreeとAmazon EC2を用いたオンライン実験システムの構築手順を説明していきます.この記事は@igenki@fuku_が共同で書きました.

  1. AWSでのAmazon EC2の設定
  2. EC2インスタンスの作成(起動)
  3. EC2インスタンスへの接続
  4. EC2インスタンス(OS)の日本語の設定
  5. 各種ソフトのインストール
    1. VSCode
    2. Python
    3. oTreeとpsycopg2
    4. PostgreSQL
  6. oTreeの起動と動作チェック
  7. Webサーバとしての設定
    1. FireWallの設定
    2. 80番ポートの開放
    3. 外部からのoTreeサーバへの接続
    4. Elastic IPの設定(IPアドレスの固定)

AWSでのAmazon EC2の設定

今回クラウドを用いてオンライン実験を行うため,AWSを使用します1.AWSを使うためにはAWSアカウントが必要です.このアカウントは事前に作成しているものとします.アカウントを作成したら,ブラウザからAWSマネジメントコンソールにアクセスして,ご自身のログイン情報を入力します(以下の図).
mc_login.png

ログインすると以下のようなAWSマネジメントコンソールの操作画面(ホーム画面)が出てくると思います.
※私は既にAWSのサービスのいくつかを利用していますので「最近アクセスしたサービス」にEC2などが出ていますが,初めてアクセスする場合は何もでないかと思います.

ログイン後の画面.png

リージョンの設定

EC2のインスタンスを作成する前に,リージョン(地域)を選択します.画面右上に現在選んでいるリージョンが出てきています.私の画面では「東京」になっていますが,最初にログインした段階では「東京」になっていないかと思います.その場合,ドロップダウンリストから「アジアパシフィック(東京)」を選んでリージョンを東京に設定します.
※リージョンが東京になっていなくてもEC2インスタンスは作成できますが,物理的なサーバがおいてある場所が近いほうがレスポンスがはやくなるので,特に理由がなければ「東京」に設定しましょう.

リージョン選択.png

EC2インスタンスの作成

いよいよEC2インスタンス(物理的な意味でいうと,サーバ)を作成します.画面左上の「サービス」の隣の検索窓に「EC2」と入れて,検索して出てきたEC2を選びます.(以下の図)

EC2検索2.png

すると次のような画面になります.この中からオレンジ色の「インスタンスを起動」をクリックして,インスタンスを作成します(ここでは,「起動」と「作成」は同じ意味です).
EC2クリック後.png

クリックすると次のような「インスタンスを起動」の画面になります.名前のところにここでは「otree」と入力します.サーバのOSとしては今回は「Windows Server 2022 Base」を選択します2

インスタンスを起動1.png

次に画面下にスクロールすると以下のような「インスタンスタイプ」を選択する画面になります.無料枠で使えるのは「t2.micro」なのですが,t2.microだとメモリが1G程度しかなく動作がとても遅いので,ここではt2.smallを選ぶことにします

インスタンスを起動2.png

インスタンスにRDP(リモートデスクトップ)で安全に接続するために,その下の「キーペア」の設定をします.「新しいキーペアの作成」をクリックし,出てきた画面のキーペア名にここではotree_keyという名前を入力して「キーペアを作成」をクリックします.otree_key.pemというキーペアがダウンロードされますので,それを適切な場所に保存しておきます(後ほど,RDPで接続する時に使います).

キーペアを作成.png

以上でインスタンスの作成は完了ですので,元の画面右の「インスタンスを起動」をクリックして作成を終了します.数秒待つとインスタンスが作成されます.その後,自動的にインスタンスが開始され,インスタンスの状態も「実行中」となります.以下の図で示しているインスタンスの状態は,左のサイドバーの「インスタンス」をクリックすることで確認できます.

インスタンス一覧.png

EC2インスタンスへの接続

次に,いま作ったoTreeというインスタンスにリモートデスクトップを用いて外部から接続します.まずは上の画像でotreeというインスタンスの「インスタンスID」のところをクリックします.すると下のようなインスタンスの詳細が見れる画面になります.画面右上の「接続」(赤色の四角で囲んだ箇所)をクリックします.

インスタンスに接続.png

すると下の画面が出てきますので,「RDPクライアント」のタブをクリックします.赤い四角で囲んだ「リモートデスクトップファイルのダウンロード」をクリックします.

RDPクライアント選択.png

するとotree.rdpという名前のクライアントファイルがダウンロードされますので,それをダブルクリックします.すると以下の画面が出ますので「接続」をクリックします.

RDPファイル起動.png

接続のためのパスワードを聞かれます.

RDPファイルパスワード.png

このパスワードは元の「インスタンスに接続」の画面に戻って,赤い四角で囲んだ「パスワードを取得」を押して入手します.

パスワードを取得.png

すると下の画面が出てくるので,赤い四角で囲った「Browse」をクリックして,「キーペアを作成」のところで作った「otree_key.pem」を選んで「開く」を押します.最後に「パスワードを復号化」をクリックします.

Windowsパスワードを取得.png

すると元の画面に戻り,パスワードが入力された状態(画面では黒塗りにして隠しています)になりますので,その内容をコピーして,さきほど求められたパスワードのところに貼り付けてOKを押します.

パスワードの複合化に成功.png

以下の「証明書」に関する画面が出ますので,「はい」を押します.

RDP警告.png

すると以下の画面のようにEC2インスタンスにリモートデスクトップで接続できます.あとはローカルのPCを操作する感覚でリモートからEC2インスタンス(Windows 2022 Server)を操作できます.

リモートデスクトップ初期画面.png

EC2インスタンス(OS)の日本語の設定

ここまででEC2インスタンスにリモートで接続して操作できるようになりました.初期状態では,OSで使用されているデフォルトの言語が英語なので,これを日本語に変更します.画面左下のWindowsロゴキーをクリックして歯車の「Settings」をクリックします.出てきた下の画面から赤い四角で囲んだ「Time & Language」を押します.

Settings.png

押して出てきた画面から「Language」を選択して,赤い四角で囲んだ「Add a language」を押します.

language.png

「日本語」を検索して選んで「Next」を押します.

japanese選択.png

出てきた画面で「Install」を押します.インストールが始まります.インストールには5分から10分ほどかかると思います.

japaneseInstall.png

インストールが終わったら,以下の画面の「Windows display language」で日本語が選べるようになっているので「日本語」を選択します.

WindowsDisplayLanguage.png

日本語が表示されるようになるには,一旦サインアウトする必要があるので,Windowsロゴキーをクリックして「Administrator」を選び,サインアウトします.ここでリモート接続が切れるので,数分待ってから,otree.rdpを再びダブルクリックして,同様の手順でリモート接続します.これでOSで表示される言語が日本語になりました.

各種ソフトのインストール

これでOSの設定は終わったので,oTreeを使うための各種ソフトをインストールしていきます.これらのソフトのインストールは明治大学の後藤晶先生の玉川大学脳科学トレーニングコース20225.サーバにアップしようの資料を参考にしていますので,そちらも合わせてご覧ください.

VSCode

プログラムを編集するエディタは何でも良いのですが,ここでは便利で高機能なVSCodeをインストールします.ブラウザのEdgeを開いてVSCodeを検索し,以下のページから「Download for Windows」をクリックします.ダウンロードされたファイルを開いて,あとは指示された手順通りにVSCodeをインストールします.

installVSCode.png

Python

oTreeはPythonのWebフレームワークであるDjangoがベースとなっているのでPythonをインストールしておく必要があります.Edgeのアドレスバーにhttps://python.org/downloads を入力すると以下の画面が出ます.「Download Python 3.10.7」(バージョンは2022/9/9現在)をクリックしてファイルをダウンロードします.

installPython.png

ファイルを開いてインストールを始めます.インストールの最初の画面で「Add Python 3.10 to PATH」(画面の赤い四角のところ)にチェックを入れてから,「Install Now」を押します.後は指示に従ってインストールします.

addPythonPath.png

Pythonが正常にインストールされたか確認します.Windows PowerShellを開き,「python --version」というコマンドを打ってEnterを押します.以下の画面のようにPythonのバージョンが表示されれば,Pythonが正常にインストールされています.

pythonVersion.png

oTreeとpsycopg2

いよいよoTreeをインストールします.引き続きPowerShell上で「pip install -U otree」というコマンドを打って,Enterを押します.oTreeのインストールが自動で始まります.特にエラーも出なければインストールは終了です.

installotree.png

次に,PythonからPostgreSQLに接続するためのアダプタであるpsycopg2をインストールします.引き続きPowerShell上で「pip install -U psycopg2」というコマンドを打って,Enterを押します.インストールが自動で始まります.特にエラーが出なければインストールは終了です.

installpsycopg2.png

PostgreSQL

実験データをデータベースに貯めるため,データベースアプリが必要です.ここではデータベースアプリとしてPostgreSQLをインストールします.Edgeのアドレスバーにhttps://www.enterprisedb.com/downloads/postgres-postgresql-downloads を入力してEnterを押します.以下の画面が出ますので,「Windows x86-64」の「14.5」(2022/9/9現在)のバージョンをダウンロードします.

installpostgreSQL.png

ファイルをクリックするとインストールが始まります.指示通りにクリックしていきますが,途中で「Password」という画面がありますのでパスワードを設定してください(※ここではotreeというパスワードにします).

postgreSQLpassword.png

次にいくつか進むとLocaleを設定する画面になりますので,「Japanese, Japan」を選択してください.

postgreSQLlocale.png

あとは指示通りに進めるとインストールが終了します.次にPostgreSQLのGUI管理ツールであるpgAdminを使って少し設定をします.Windowsロゴキーをクリックすると「P」のところにPostgreSQLが見つかりますので,そのフォルダの中からpgAdmin 4をクリックして起動します.

pgAdmin4を開く.png

パスワードを聞かれますので,先ほど設定した「otree」を入力します.

pgAdminPassword.png

左のサイドバーの「Servers」をクリックして,「Databases」を右クリックし,「Create」→「Database」をクリックします.

createDatabase.png

すると下の画面が出てくるので,Databaseのところに「otree_db」と入力し,「Save」を押します.

otree_db.png

次にクライアントの認証ファイルであるpg_hba.confファイルを少し変更する必要があります.C:\Program Files\PostgreSQL\14\dataにpg_hba.confがありますので,これをVSCodeで開いて編集します(メモ帳等で開いても良いです).85-94行目にある「scram-sha-256」という文字列をすべて「trust」に変更してください.全部で6個あります.変更が済んだらファイルを上書き保存してください.

pg_hbaconf_trust.png

oTreeの起動と動作チェック

以上でoTreeを動かすために必要な準備は整いましたので,oTreeの起動と動作チェックを行います.
この項目も後藤晶先生の玉川大学脳科学トレーニングコース20221.オンラインアンケートを作ってみようの資料を参考にしていますので,そちらも合わせてご覧ください.

まずPowerShellを起動してDesktopにcd Desktopで移動し,mkdir otreetestで,otreetestという名前のフォルダを作ります.

mkdir_otreetest.png

次にotreetestフォルダにcd otreetestで移動し,otree startproject otreeというコマンドを打ちます.すると「otree」フォルダ以下に各種ファイルが自動で生成されます.

startproject_otree.png

次にcdコマンドでotreeフォルダに移動し,そこでotree devserverというコマンドを打って,otreeサーバを起動します.

otreedevserver.png

oTreeが正常に動作しているか確かめてみます.Edgeのアドレスバーにhttp://localhost:8000/ を入力してEnterを押します.以下のような画面が出てきたら成功です.

otreeDemo.png

「survey」をクリックしてみてください.「P1」を選ぶと「アンケート調査」が始まると思います.これは,oTreeに最初から用意されているデモのプログラムです.自分でoTreeのプログラムを作ってみたい場合は,1.オンラインアンケートを作ってみようで「オンラインアンケート」のアプリを作ってoTreeに登録してみてください.単なるアンケートではなく,経済ゲームのプログラムを作りたい場合は玉川大学脳科学トレーニングコース2022の2,3,4の項目を辿ることでできます.

これで,EC2インスタンス上でローカルにoTreeを動かすことができました.

Webサーバとしての設定

ここまででは,ローカルの環境でしかoTreeが動いていません.本来の目的であるオンラインで経済ゲーム実験を行うためには,外部からoTreeに接続できるようにする必要があります.ここではその設定をします.

Firewallの設定

まずは外部からの接続を許すためにEC2上のFireWallの設定をします.デスクトップ画面下の検索窓に「ファイア」などと打つと「ファイアウォールの状態の確認」が出てくるので,それをクリックします.

ファイアウォールの状態の確認.png

出てきた画面から左のサイドバーの「詳細設定」をクリックします.

ファイアウォール詳細設定.png

出てきた画面から「受信の規則」を押すと右側のサイドバーに「新しい規則」が出るのでそれをクリックします.

受信の規則.png

すると以下の画面がでるので,「ポート」を選び,

ポート.png

「特定のローカルポート」に80を入力して「次へ」を押していきます.

特定のポート80.png

最後の「名前」の箇所にoTreeを入力して完了です.これでFireWallの設定は完了です.

名前oTree.png

80番ポートの開放

EC2上でも80番ポートを開放して外部からの接続を許可する必要があります.AWSマネジメントコンソールの画面に戻り,左のサイドバーから「セキュリティグループ」を選びます.この中から上記で作成したインスタンスに対応する「セキュリティグループID」を選んでクリックします(インスタンスの情報からセキュリティグループのIDは調べられます).今回の場合は一番下のものです.

セキュリティグループ.png

出てきた画面の「インバウンドのルールを編集」(赤い四角)をクリックします.

セキュリティグループ2.png

「ルールの追加」を押して,タイプで「HTTP」を選び,ソースのアドレス欄からCIDRブロックで一番上の「0.0.0.0/0」を選択し,「ルールを保存」を押します.

インバウンドルールの編集.png

これでEC2も80番ポートでの接続を許可するようになりました.

外部からのoTreeサーバへの接続

外部から接続する準備が整いましたので,EC2インスタンスのリモート接続画面に戻り,PowerShellで一旦Ctrl+Cを押して起動していたotreeを停止します.その後,otree prodserver 80というコマンドを打ちます.これで,oTreeサーバを80番ポートで起動したことになります.

otree_prodserver80.png

外部からブラウザ(HTTP)で接続できるか確認してみましょう.AWSのインスタンスの画面のパブリックIPv4アドレスの欄を見ると,このEC2インスタンスのパブリックなIPアドレスが13.112.244.59であることが分かります.

パブリックアドレス.png

外部の端末(パソコン,タブレット,スマホ等)から,ブラウザのアドレスバーにhttp://13.112.244.59 と入れて接続してみます.以下のようにoTreeに接続できている画面が出てきたら成功です(現在は接続できません).

外部接続.png

Elastic IPの設定(IPアドレスの固定)

EC2インスタンスのパブリックのIPアドレスは,インスタンスを停止して,開始するたびに変更になります毎回固定したIPアドレスを使うためには,EC2上でのElastic IPの設定が必要です.ここではその設定を行います.サイドバーから「Elastic IP」(赤い四角で囲んだところ)をクリックすると以下の画面になります.画面右上の「Elastic IPアドレスを割り当てる」をクリックします.

elasticIP.png

以下の画面が出ますので「割り当て」をクリックします.

IP割当.png

すると,ここでは,54.248.63.164というIPアドレスが新たに割り当てられたことが分かります.「割り当てられたIPv4アドレス」欄のこのIPアドレスをクリックします.

ElasticIP2.png

以下の画面が出てきます.まだこのIPアドレスはEC2インスタンスと関連付けができていないので,画面右上の「Elastic IPアドレスの関連付け」をクリックします.

IP割当2.png

以下の画面が出てきますので,インスタンスの欄(赤い四角のところ)に上記で作ったインスタンスを指定して,画面右下の「関連付ける」をクリックします.

IP関連付け.png

これで,毎回この固定したIPアドレスでoTreeサーバにアクセスできるようになりました.1つ注意ですが,IPアドレスが13.112.244.59から54.248.63.164に変わりましたので,接続情報が変わります.リモートデスクトップでサーバに接続する時は,もう一度リモートデスクトップのクライアントファイルをダウンロードしてから,そのファイルで接続する必要があります.接続のパスワードは変わりません.

最後に再びoTreeサーバをPowerShellで起動して,固定したIPアドレスで接続できるか確認してみましょう.外部の端末のブラウザのアドレスバーにhttp://54.248.63.164/ を入力してアクセスします.以下の画面が出て,無事にアクセスできることが分かりました(現在はインスタンスを停止しているのでアクセスできません).

ElasticIP_demo.png

以上で,Amazon EC2上でのoTreeの動かし方の解説を終わります.これから,クラウド環境で経済ゲーム実験を行おうと考えている方のお役に立てば幸いです.

  1. AWSではなくHerokuを用いてもoTreeのオンライン実験システムは構築できます.

  2. もちろんLinuxでoTree用のサーバを作る場合は,UbuntuやRedHatなどを選んで構いません.

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0