(自ブログに書いた記事の転載です)
追記: 2020/4/17
@hirosys-biz さんが、CloudFormationで環境を自動構築する手順を公開されています。本記事の「うまくいっていない」部分も解決してくださっているので、こちらも是非。
COVID-19(SARS-CoV-2)の解析プロジェクトへの参加環境をCloudFormationで自動構築しました
はじめに
「新型コロナウイルスの解析に貢献しつつ、AmazonWebServiceの環境構築を実践してみよう」とした話です。
結果、「正常に動作はしたが、無料枠ではスペック不足ゆえにあまり貢献できていない」という結論になってしまいましたが、
作業の記録として、残しておきます。
背景
コロナ流行辛い。なんとか解決早めらんないか。
↓
「今からでも3分ではじめられるコロナ解析貢献「Folding@home」の使い方」というPC Watchの記事を見つける
↓
即自宅ノートPC(旧世代のGPU搭載)にインストール。1週間程度走らせ続けて25タスクほどこなすが、まだ物足りない感。
↓
スペックは上げられないから、稼働台数増やしたい。でも物理マシンは1台しかもっていない...
↓
そうだAWSアカウント持ってた。これ使ってみよう。無料枠でできるなら記事化すれば真似してくれる人いるかも?
↓
行動。
やったこと①: VPC環境の作成
VPC環境をまず構築し、その中にEC2環境を立てることにした。
基本、こちらのブログ記事の通りに作業。
唯一セキュリティグループだけは、今回の利用目的に合わせて以下のように変更。
- Webサービスを立てるわけではないので80番ポートはクローズ。
- 代わりに、Folding@HomeのWebコントローラ用に7396番を開放
- セキュリティ対策として22番以外のSSH用ポートを開放、初期ログイン用に22番はいったん残す。
- 今回の環境は「自分だけアクセスできればいい」ので、ソースはすべてマイIPに限定
やったこと②: VPC上にEC2環境構築
①で作ったVPC環境上に、EC2環境を作成。この作業もこちらのブログ記事を参考にした。
今回は無料利用枠で作れる環境にしたかったので、構成は以下の通り
- OS: Amazon Linux 2 AMI(x86)
- インスタンスタイプ:t2.micro
- ストレージ: 汎用SSD 8GB
やったこと③: Linuxの設定
- SSHのポート番号変更
$ sudo vi /etc/ssh/sshd_config
### 22行あたりに以下を追加(①で指定したポート番号)
Port 2****
### 保存後
$ sudo service sshd reload
- EC2作成時とは別のRSA鍵でアカウントを作り、デフォルトの"ec2-user"削除
### ユーザ新規作成(root権限)
# useradd newuser
# passwd newuser
### SSH設定(root権限)
# cd /home/newuser/
# mkdir .ssh
# chmod 700 .ssh
# chown newuser:newuser .ssh
### ここで公開鍵をSCPで送信
# mv /home/ec2-user/id_rsa.pub .ssh/authorized_keys
# chmod 600 .ssh/authorized_keys
# chown newuser:newuser .ssh/authorized_keys
### sudoできる権限を与える
# usermod -aG wheel newuser
### 別窓で"newuser"としてログイン。以降newuser側の画面で操作
$ sudo su -
### rootになれることを確認したら、ec2-user削除
# userdel ec2-user
やったこと④: Folding@Homeの導入
今回は、最低限必要なFAHClient
のみ導入。
- インストール
$ wget https://download.foldingathome.org/releases/public/release/fahclient/centos-6.7-64bit/v7.6/fahclient-7.6.9-1.x86_64.rpm
$ sudo rpm -i --nodeps fahclient-7.6.9-1.x86_64.rpm
- 設定
-
/etc/fahclient/config.xml
を編集。更新にはroot権限必須。
-
<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://<EC2環境のIPアドレス>:7396
にアクセスすると、下記のようにちゃんと動いているのが見える。 ...が、めちゃくちゃ処理が遅い
後から調べて分かったこと
- EC2のt2インスタンスには、「CPUクレジット残高」という概念があり、これが枯れている状態だと使えるCPU資源が限定される。
- 今回使用したt2-microだと、CPU使用率10%にしかならないのだとか。
- インスタンス自体の停止→起動をすれば初期クレジットまで回復するそうなので、今後検討してみる。
まとめと感想
- 「新型コロナウイルスの解析に貢献しつつ、AmazonWebServiceの環境構築を実践してみよう」とした話。
- 初めてやる自分でも、全行程完了まで2~3時間で行けた。先人の皆様ありがとうございます。
- 今後、上記にもあった「インスタンスの停止→起動によるクレジット回復」を定期実行する方法も試してみたい
- 加えて、ほかのIaaSサービスでも同様のことを試してみたい。
更新履歴
- 2020/4/20: FAHClient最新版(Ver7.6.9-1)に対応