COVID-19(SARS-CoV-2)の解析プロジェクトへの参加環境を AWS Fargate で構築してみました。


前回は、CloudFormation で解析環境を構築しました。
https://qiita.com/hirosys-biz/items/fa19e596c3872059bf2c

今回は、コンテナの勉強もかねて AWS Fargate を利用して構築してみました。
思いの外簡単にできてびっくりしました。

こんな方にお勧めです

  • Amazon ECS や AWS Fargate が好きだ!
  • コンテナ技術を使って新型コロナウイルスの解析に貢献したい!

では、さっそく始めましょう

Amazon ECS の利用開始する

今まで、Amazon ECS を未使用の場合は以下のような画面が表示されると思います。
[いますぐ始める]ボタンをクリックします。

コンテナを定義する

custom のエリアにある[設定]をクリックします。

スタンダードの設定

以下のように設定します。

  • コンテナ名
    • 任意のコンテナ名を指定します。本稿では「folding-at-home-ecs」としました。
  • イメージ
    • コンテナイメージを指定します。今回は、john k tims さんが作成されたイメージ[johnktims/folding-at-home] を指定します。
  • ポートマッピング
    • Folding@Home で使用するポート番号 7396 tcp を指定します。

このような設定になります。

つづけて、詳細コンテナ設定を行います。
画面をスクロールさせ、オープナーを開いてください。

詳細コンテナ設定

動かすだけであれば、環境の箇所を設定すればOKです。
必要に応じてその他の場所も確認してください。

  • CPU ユニット数
    • 1024 で 1vCPU となります。1024 以上かつ 4096 以下の任意の値とすればよいでしょう。
    • Folding@Home は CPU (と GPU)がものを言いますので、本稿では後述する タスク CPU の最大値である 4096 を指定しました。
  • コマンド
    • コンテナに与えるコマンドを指定します。こちらの一番下[Start folding]を参考にしました。
    • --user ユーザー名。本稿の例では標準指定であり匿名を意味する Anonymous としています。
    • --team チームの ID 。222 は 日本(japan) の ID です
    • --power は 解析に使用する CPU パワーをどのくらいにするかの指定です。 full、middle, light があります。
    • Amazon ECS では、スペースではなく、以下のようにカンマ区切りで指定します。
--user=Anonymous,--team=222,--power=full

設定例は以下のようになります。

つづいて、このコンテナを使うタスクの定義を行います。

タスクを定義する

タスク定義のエリアにある[編集]ボタンをクリックします。

※詳細コンテナ設定の CPU ユニット数の指定が タスク CPU の標準値より大きいため警告メッセージが表示されています。

タスクメモリならびにタスク CPU の値を設定します。
今回の例では、 コンテナ詳細設定の CPU ユニット数を 4096 としているため、以下のような設定なっています。適宜調整してください。

  • タスクメモリ:8GB (8192)
    • タスク CPU を 4 vCPU (4096) を選択すると タスクメモリの最低値が 8GB (8192) となります。
  • タスク CPU:4 vCPU (4096)

設定例は以下のようになります。

タスク定義が完了したら、[次]ボタンをクリックします。

サービスを定義する

サービスを定義するために、[編集]ボタンをクリックします。

必要なタスクの数とセキュリティグループの指定を行います。
必要に応じてサービス名を指定してください。Folding@Home で解析を行う際、ロードバランサーは不要です。

  • 必要なタスク数
    • いくつ同時実行するか(解析を何並列で行うか)を指定します。
    • 以下の画像では 1 となっていますが、5 を指定しました。好きな数を指定してください。
  • セキュリティグループ
    • 前回の記事の事前準備記載の方法でアクセス元 IP アドレスを確認し指定することで、不要なアクセスを防ぐことができます。

設定例は以下のようになります。

サービス定義が完了したら、[次]ボタンをクリックします。

クラスターの設定

特に設定する箇所はありません。[次]ボタンをクリックして進んでください。

確認

設定した内容を確認します。
問題なければ、[作成]ボタンをクリックしてください。

構築実施

自動的に環境構築が始まります。完了するまで少し待ちます。

構築が完了すると、[サービスの表示]ボタンが活性化されますのでクリックします。

動作確認

下記の赤枠で囲った箇所の「必要数」と「実行中の数」がサービスの定義で指定した「タスクの数」のとおりになるまで待ちます。
そして、緑枠で囲んだ[タスク]タブを選択します。

タスクのステータスが「RUNNING」になっていることを確認し、任意のタスクのリンクをクリックします。

そして、パブリック IP の値を確認します。

確認した IP アドレスにポート番号7396(例:111.222.333.444:7396 ※あり得ないアドレスです)を付与して、Web ブラウザで開きます。
以下のような表示がされれば動作確認成功です!

結果

タスク数5個で1日程度回した結果は、 15,889 ポイントでした。

※使用料はざっくり 25ドル程度/日。

まとめ

使用するコンテナイメージとコマンド、必要なCPU数、並列数(タスク数)を指定するだけで簡単に解析環境が構築できてしまいました。
時間をかけて CloudFormation のテンプレートを何百行も書かなくとも並列解析環境が作れてしまったので、感動を覚えています。
今後も使いどころや他のコンテナサービス含めて学び、得た知見を共有していいけたらと思います。

参考資料

https://hub.docker.com/r/johnktims/folding-at-home
https://qiita.com/aqr_w/items/57834c89ded1d8c7d20c
https://qiita.com/jey0taka/items/24c5590ae9cb2b66d383