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

(自ブログからの転載です)

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

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

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

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

![20200409212332.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141883/1d024f02-1d76-f8d6-d189-c267b4d2ca1a.png)


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

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

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

![20200409213346.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141883/5c30d3bd-714a-7e7d-a856-d72332a2dedf.png)


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

![20200409213733.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141883/88f7e2ad-f26c-a04f-6808-0681955178df.png)


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

![20200409213821.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141883/d3915b1f-21c3-17e1-3b9b-cb7361a4d91f.png)


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

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

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

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

![20200409214257.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141883/d6078d3e-99e3-3012-01bf-8f2fc985252f.png)


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

![20200409214616.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141883/90a09791-3f84-d588-74f6-33740d7e8e69.png)


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

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

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

![20200409225039.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141883/f826458d-1fa1-5d36-2555-69df80678211.png)


* 上記の要領で、以下2つのポートについても設定。
  * tcp: 7396 (Folding@HomeのWebコントローラ用)
  * tcp: 49152～65535の範囲の好きな数字 (SSH接続用)

* 最終的に以下のようになる。(tcp:22はこの後の手順で削除する)

![20200409220731.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141883/1b1c66e2-c432-e3be-2a7d-729409c729b9.png)


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

![20200409221102.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141883/533af343-30ee-b7aa-40b2-5ae5bb2ade46.png)


# やったこと④: 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環境を選択し「完了」。

![20200409222836.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141883/4b529c10-7354-86cb-b3c5-882dc2760f98.png)


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

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

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

![20200409223357.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141883/59802577-df50-daff-7879-02454d359951.png)


* 「保存」を押して完了

# やったこと⑤: Linuxの設定

## SSHのポート番号変更

* ④-2で登録した公開鍵に対応する秘密鍵と、登録時に表示されたユーザ名で、VMにSSHログイン
  * アクセス先のIPアドレスは、VMインスタンス一覧の「外部IP」に表示されているもの。
  * まだ設定を変えていないので、ポート番号22でアクセスする。

* `/etc/ssh/sshd_config`を編集し、以下の1行を追加する
  * *****には、③でファイアウォールに指定したSSH用ポート番号を入れる

```
Port *****
```

* ファイル更新後、以下のコマンドを実行

```
$ sudo service sshd reload
```

* ここで、「上記で指定したポート番号でSSHログインできること」「ポート番号22でSShログインができなくなっていること」を確認する。
  * 確認できたら念のため、③-2で作成した、tcp:22に対するファイアウォールルールを削除する。

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

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

## インストール
 
```
$ wget https://download.foldingathome.org/releases/public/release/fahclient/debian-stable-64bit/v7.6/fahclient_7.6.9_amd64.deb
$ sudo dpkg -i --force-depends fahclient_7.6.9_amd64.deb
```

* 以下のような画面がでてくるので、ユーザ名等を対話式で入力。
  * ユーザー情報系は設定しなくとも動作はするので、わからなければ空白でOK。
  * Power(どれくらいCPU資源を割くか)の設定で`full`を選択すると、マシンのCPUを最大限に用いて計算をする。`light`を選ぶとCPU利用率50%前後で動作する。
![20200409225353.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141883/880731d8-84e7-fd74-cf1a-8ae99cbc75de.png)


## 設定
* `/etc/fahclient/config.xml`を編集。更新にはroot権限必須。

```xml
<config>
  <!-- Client Control -->
  <fold-anon v='true'/>

  <!-- Folding Slot Configuration -->
  <!-- v7.6.9-1以降、causeにCOVID-19を指定すれば、コロナ関連タスクを優先的にアサインしてくれるようになる -->
  <cause v='COVID_19'/>
  <gpu v='false'/>

  <!-- 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>

  <!-- どの程度CPU資源を利用するか。light,middle,fullの3択 -->
  <power v='full'/>

  <!-- User Information -->
  <!-- ユーザ情報。ユーザ名を入れておけば個人でどれだけ貢献したか集計される -->
  <user v='deflat'/>
  <!-- 所属したいチームのID。省略可。ちなみに222は"Japan"チーム。 -->
  <team v='222'/>
  <!-- 省略可。公式サイトでメールアドレスを登録して受け取ったキーを設定するともらえるポイントが多くなる -->
  <passkey v='***ここにキーを張り付け***'/>

  <!-- スロット番号とタイプ。今回はCPU1個しかないのでいじらない -->
  <!-- Folding Slots -->
  <slot id='0' type='CPU'/>

</config>
```

## 設定反映&サービス再起動
* 以下のコマンドでサービスを再起動。
  * 補足: タスク処理中にstopしても、次startしたときはちゃんと続きから計算してくれる。

```
$ sudo /etc/init.d/FAHClient stop
$ sudo /etc/init.d/FAHClient start
```

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

![20200409230718.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141883/7944b3b0-87e9-fcf3-f8de-8d3bb92476f1.png)


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

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

# 更新履歴
* 2020/4/20  FAHClient最新版(Ver7.6.9-1)に対応