Google Cloud Platformの無料トライアルを使って、新型コロナ解析に貢献する話

はじめに

前回の記事で、AWSインスタンス上にFolding@Homeを乗せて新型コロナの解析を試みたのですが、インスタンスの制約上あまりうまくいきませんでした。 本記事は、同様のことをGoogle Cloud Platformの無料トライアル枠でやってみたものです。 今回は、 トライアルに申し込むともらえる 12か月使える$300分のクレジット を活用していきます。

やったこと①: アカウント作成

今回はアカウントを作るところから。

  • https://cloud.google.com/にアクセスし、「無料トライアル」をクリック
  • Googleアカウントでログイン
  • 利用規約への同意、個人情報の入力
    • ここでクレジットカードの情報を求められるが、あくまで個人確認のためのもの。無料枠クレジットを超過しても、インスタンスを止められるだけで追加料金は発生しない。

f:id:deflatSOCO:20200409212332p:plain

やったこと②: プロジェクトの作成

今回の用途のために、プロジェクトを新しく作成。

  • 画面右上の"My First Project"と書かれた部分をクリック。ポップアップした画面内の「新しいプロジェクト」をクリック

f:id:deflatSOCO:20200409213346p:plain

  • 適当にプロジェクト名を入力して作成。

f:id:deflatSOCO:20200409213733p:plain

  • 自動では切り替わらないので、もう一度"My First Project"をクリックし、ポップアップ画面から作ったプロジェクトを選択し、「開く」。

f:id:deflatSOCO:20200409213821p:plain

やったこと③: VPC環境の作成

AWSで試したとき同様、VPC環境をまず構築し、その中にインスタンスを立てる。

③-1. VPC+サブネット作成

  • 画面左のメニューから、「VPCネットワーク」->「VPCネットワーク」を選択
    • 初回だと、画面が表示されるまで時間がかかるので注意。
  • 画面上部の「VPCネットワークを作成」をクリック

f:id:deflatSOCO:20200409214257p:plain

  • VPCの名前を適当に決める。
  • サブネットの作成もここで行える。今回は以下の画像のような設定にした。
    • ここで、リージョンはこの後建てるインスタンスにそろえるために、us-west1を選択。

f:id:deflatSOCO:20200409214616p:plain

  • 「作成」を押して完了。

③-2. ファイアウォール設定

  • 画面下部に、作成したVPCが表示されるので、VPC名をクリック
  • ファイアウォール ルール」 -> 「ファイアウォールルールを追加」の順にクリック
  • 以下のように入力し、「作成」。
    • 自分だけアクセスできればよいので、「ソースIPの範囲」には、自分自身のIPアドレスを入力(例:100.101.102.103/32)

f:id:deflatSOCO:20200409225039p:plain

  • 上記の要領で、以下2つのポートについても設定。

    • tcp: 7396 (Folding@HomeのWebコントローラ用)
    • tcp: 49152~65535の範囲の好きな数字 (SSH接続用)
  • 最終的に以下のようになる。(tcp:22はこの後の手順で削除する)

f:id:deflatSOCO:20200409220731p:plain

  • 補足; AWSではユーザが作成していたルートテーブルやインターネットゲートウェイは、GCPでは勝手に設定してくれる。

f:id:deflatSOCO:20200409221102p:plain

やったこと④: VPC上にVMインスタンス構築

③で作ったVPC環境上に、VMインスタンス(AWSで言うEC2)を作成。

④-1. インスタンス作成

  • 画面左のメニューから、「Compute Engine」->「VMインスタンス」を選択し、「作成」をクリック
  • 以下のように設定する。(スクショ省略。まだ作成はしない。)
    • 記載のないものはデフォルトのまま。
    • 今回はマシンとして、完全無料のf1-microではなく、CPUをまるまる1コア使えるn1-standard-1を選んだ。記事執筆時点では、下記設定で月額$24.67なので、1年間回しても無料クレジットが枯渇しない計算になる。
項目 設定値
リージョン us-west1
ゾーン us-west1-b
マシン n1-standard-1
CPUプラットフォーム 自由
ブートディスク Debian GNU/Linux9(stertch) 10GBの標準永続ディスク
ファイアウォール どちらもチェックを外す
  • 画面下部の「管理、セキュリティ、ディスク、ネットワーク、単一テナンシー」をクリック
  • 「ネットワーキング」タブの「ネットワークインターフェース」で、③で作成したVPC環境を選択し「完了」。

f:id:deflatSOCO:20200409222836p:plain

  • 「作成」をクリックすると、VMが作成され、起動する。

④-2. root権限を持ったユーザの新規作成

  • VMインスタンスの一覧画面で、作成したVMインスタンスの名前部分をクリック
  • 詳細画面が出るので、画面上部の「編集」をクリック
  • 画面下部に、「SSH 認証鍵が0 個あります」と書かれた箇所があるので、その下の「表示して編集する」をクリック
  • 以下のようなボックスが出るので、公開鍵ファイルの中身をコピペする。
    • うまくいくと、ボックスの左側にユーザ名が表示される。 この名前がLinuxに新規登録されるユーザ名になる。

f:id:deflatSOCO:20200409223357p:plain

  • 「保存」を押して完了

やったこと⑤: Linuxの設定

SSHのポート番号変更

  • ④-2で登録した公開鍵に対応する秘密鍵と、登録時に表示されたユーザ名で、VMSSHログイン

    • アクセス先のIPアドレスは、VMインスタンス一覧の「外部IP」に表示されているもの。
    • まだ設定を変えていないので、ポート番号22でアクセスする。
  • /etc/ssh/sshd_configを編集し、以下の1行を追加する

Port *****
  • ファイル更新後、以下のコマンドを実行
$ sudo service sshd reload
  • ここで、「上記で指定したポート番号でSSHログインできること」「ポート番号22でSShログインができなくなっていること」を確認する。

やったこと⑥: Folding@Homeの導入

最低限必要なFAHClientのみ導入。

インストール

$ wget https://download.foldingathome.org/releases/public/release/fahclient/debian-testing-64bit/v7.4/fahclient_7.4.4_amd64.deb
$ sudo dpkg -i --force-depends fahclient_7.4.4_amd64.deb
  • 以下のような画面がでてくるので、ユーザ名等を対話式で入力。
    • 設定しなくとも動作はするので、わからなければ空白でOK。 f:id:deflatSOCO:20200409225353p:plain

設定

  • /etc/fahclient/config.xmlを開き、末尾の</config>の前に以下2行を追記する。
    • Webコントローラへのアクセス権限設定。xxx.xxx.xxx.xxxのところに自分のIPアドレスを記入
  <allow>127.0.0.1 xxx.xxx.xxx.xxx</allow>
  <web-allow>127.0.0.1 xxx.xxx.xxx.xxx</web-allow>

設定反映&サービス再起動

  • 以下のコマンドでサービスを再起動。
    • 補足: タスク処理中にstopしても、次startしたときはちゃんと続きから計算してくれる。
$ sudo /etc/init.d/FAHClient stop
$ sudo /etc/init.d/FAHClient start

動作確認

  • Webブラウザhttp://<VMインスタンスの外部IPアドレス>:7396にアクセスする。
    • 以下のような画面が出たらOK。すでにタスクを取得している場合、進捗状況等表示される。

f:id:deflatSOCO:20200409230718p:plain

結果

  • 今のところ不具合もなく、1タスク10時間程度でこなせている。

まとめ

  • 新型コロナウイルスの解析に貢献しつつ、Google Cloud Platformの環境構築を実践してみよう」とした話でした。
  • 結果、無料クレジットの範囲内でも、そこそこのスペックのVMを組むことができました。
  • 今回作った環境はしばらく起動させっぱなしにしてみます。1か月後あたりにもろもろどうなったかを報告できれば、とも考えてます。