みなさんこんにちは。スーパーコンピュータ「京」が8月30日にシャットダウンされました。2012年に稼働開始してから7年、その前の開発期間も含めて関係者の皆様おつかれさまでした。ちなみに、「計算科学研究を支援するための寄附金の募集」というのが行われていて、5万円以上の寄付をすると先着順で「京」で使用された CPU がもらえたり、もっと多額の寄付をすると「京」ロゴ入り化粧板をもらうことができるようです。皆さん、ひとついかがでしょうか。自宅レンダーファームのパネルが「京」なんて、カッコイイですよっ!!
TEXT_痴山紘史 / Hiroshi Chiyama(日本CGサービス)
EDIT_尾形美幸 / Miyuki Ogata(CGWORLD)
クラウドサービスの選定
前回までの構築で、社内環境がなんとなく整ってきたので、続いてクラウド側の環境を揃えていきます。
ひとくちにクラウドサービスと言っても、AWS、Microsoft Azure、Google Cloud(以下、GCP)、さくらのクラウドなど、国内外含めて多くのものが存在します。それぞれ特徴があり、サービス内容や費用、使い勝手などを比較して、どのサービスを使うのか検討する必要があります。
例えば、映像業界で広く使用されているDeadlineは、thinkbox softwareがAmazonに買収され、AWSとの統合が進んでいます。社内でDeadlineを使っていてスムーズにクラウドサービスを活用したい場合、非常に大きな選択要因となるでしょう。
HTCondor+クラウドサービスという組み合わせでシステムを構成する場合はどうでしょうか。HTCondor自体がCloud Computingに対応しているため、このしくみに乗ってしまうのが最も簡単です。この場合、現時点(Version 8.8.5)ではAWSのみのサポートとなります。
また、GCPではHTCondor による高スループット コンピューティングというタイトルで、HTCondorを使用したバッチ処理クラスタの作成方法が説明されています。
今回は、HTCondorが公式に対応しているAWSを使って環境構築を進めることにします。まずは社内ネットワークとの接続は考えず、AWS上で計算サーバを構築してみましょう。
AWSの準備
AWSを使用するための準備をします。最初は「AWS?クラウド?何だかメンドクサイんじゃないの?」と思うかもしれませんが、使うだけだったらとても簡単です。登録手続きの細かい部分は日々変更される可能性があるので、公式のドキュメントを参考にするのがいいです。画像付きでとてもわかりやすく解説されているので、スンナリと登録できると思います。
さらにこのページの最後には10分間チュートリアルへのリンクまで用意されていて、仮想マシン(AWSではインスタンスと言います)の起動方法まで詳しく解説されています。
HTCondor Annexによる環境構築
AWSの準備ができたら、HTCondor Annexを使用してHTCondorを使用するための準備をします。HTCondor AnnexはAWS上の環境構築や仮想マシンの管理を行うためのツールです。もちろんこれまでのように全て自分でセットアップすることもできますが、便利なツールが用意されているのでまずは使ってみます。
HTCondor Annexを用いてAWS側の初期設定を行います。最初の設定方法はUsing condor_annex for the First Timeで解説されています。
上記ドキュメントでは簡易的な環境を構築することのできるpersonal condorのインストールから説明されています。われわれは手元に既に動く環境はありますが、今回はドキュメントに書いてある通りにpublicなIPアドレスの付与されているマシン上で環境をつくる必要があるため、新たにpersonal condor環境を用意します。
publicなIPアドレスが直接付与されているマシンを用意するのはなかなかハードルが高いので、NAT越しで何とか動かせないのか試してみたのですが、サラッと試した感じではうまくいかなそうだったので今回は断念しました。おそらく、前回行なっていたようなCCBを使った対応等々すればできるのではないかと思うので、次回以降の課題です。
personal condor環境をつくるには、使用しているOS に合わせたTarballを公式サイトから取得します。Tarballを取得したらインストールです。今回は~/condor-8.8.5以下に環境を作成します。
-bash-4.1$ mkdir condor-8.8.5
-bash-4.1$ cd condor-8.8.5/
-bash-4.1$ tar zxvf condor-8.8.5-x86_64_RedHat7-stripped.tar.gz
condor-8.8.5-x86_64_RedHat7-stripped/
condor-8.8.5-x86_64_RedHat7-stripped/sbin/
condor-8.8.5-x86_64_RedHat7-stripped/sbin/condor_collector
(中略)
condor-8.8.5-x86_64_RedHat7-stripped/src/chirp/chirp_client.c
condor-8.8.5-x86_64_RedHat7-stripped/NOTICE.txt
-bash-4.1$ mkdir local
-bash-4.1$ ./condor-8.8.5-x86_64_RedHat7-stripped/condor_install --local-dir `pwd`/local --make-personal-condor
Installing Condor from /home/chiyama/condor-8.8.5/condor-8.8.5-x86_64_RedHat7-stripped to /home/chiyama/condor-8.8.5
Condor has been installed into:
/home/chiyama/condor-8.8.5
Configured condor using these configuration files:
global: /home/chiyama/condor-8.8.5/etc/condor_config
local: /home/chiyama/condor-8.8.5/local/condor_config.local
In order for Condor to work properly you must set your CONDOR_CONFIG
environment variable to point to your Condor configuration file:
/home/chiyama/condor-8.8.5/etc/condor_config before running Condor
commands/daemons.
Created scripts which can be sourced by users to setup their
Condor environment variables. These are:
sh: /home/chiyama/condor-8.8.5/condor.sh
csh: /home/chiyama/condor-8.8.5/condor.csh
セットアップが終わったので、personal condor環境を有効にして起動します。
-bash-4.1$ . ./condor.sh
-bash-4.1$ condor_master
・personal condorの設定
personal condorの設定をします。パスワードによるアクセス制限を有効にするためにSEC_PASSWORD_FILEを指定し、関連する設定を行なっています。personal condorで動いているホストをCONDOR_HOSTとCOLLECTOR_HOSTとして指定しています。
-bash-4.1$ cat local/condor_config.local
NETWORK_INTERFACE = *
CONDOR_HOST = $(FULL_HOSTNAME)
COLLECTOR_HOST = $(CONDOR_HOST)
SEC_PASSWORD_FILE = $(LOCAL_DIR)/condor_pool_password
SEC_DAEMON_INTEGRITY = REQUIRED
SEC_DAEMON_AUTHENTICATION = REQUIRED
SEC_DAEMON_AUTHENTICATION_METHODS = PASSWORD
SEC_NEGOTIATOR_INTEGRITY = REQUIRED
SEC_NEGOTIATOR_AUTHENTICATION = REQUIRED
SEC_NEGOTIATOR_AUTHENTICATION_METHODS = PASSWORD
SEC_CLIENT_AUTHENTICATION_METHODS = FS, PASSWORD
ALLOW_DAEMON = condor_pool@*
-bash-4.1$
パスワードファイルを生成します。
-bash-4.1$ condor_store_cred -c add -f `condor_config_val SEC_PASSWORD_FILE`
Enter password:
-bash-4.1$
以上でpersonal condorの設定ができました。
[[SplitPage]]AWSのアクセスキーを取得する
condor_annexのようなプログラムからAWSの機能にアクセスするためには、AWSのアクセスキーを取得する必要があります。このキーがあるとプログラムから自分のAWSアカウントにアクセスしてインスタンスを立ち上げたりできるので、とても便利です。その反面、外部に漏れて悪意のある第三者に使われてしまうと、膨大な費用をAWSから請求されることもあるので気を付ける必要があります。GitHubの公開リポジトリに、ウッカリとアクセスキーを格納したファイルをpushしてしまって、そこから悪用されるケースが後を絶たないので本当に気を付けてください。
GitHub上にアクセスキーが公開されるとどんなことが起こるのか、試した方もいます。詳細は以下のWebページをご覧ください。
GitHub に AWS キーペアを上げると抜かれるってほんと???試してみよー!
AWSでもいくつか安全装置はあるため、アカウントをつくっていきなり乗っ取られても突然数十万円の請求が来るということはなかなかないのですが、クラウド環境を十分に活用するためにはその制限を外す必要があるため、その状態で乗っ取られると一気に数百台のインスタンスを立ち上げられて、気付いたときには大変なことになっていたということがあり得ます。大量の計算機を一気に使用することのできるクラウドならではの注意点です。
............と、脅しはこのくらいにしておきましょう。家の鍵をわかりやすく置いておいたら泥棒に入られて根こそぎもっていかれたというのと同じなので、それほど怖がる必要はありません。きちんと鍵さえ管理していれば、自分で機材を管理するよりよっぽど安全です。
話を進めます。
AWSのアクセスキーはIAM Management Consoleから取得します。
まず[ユーザーを追加]ボタンを押します。
ユーザー名を入力し(ここではannex-userとします)、アクセスの種類で[プログラムによるアクセス]を選びます。そして次のステップを選びます。
アクセス許可の設定で[既存のポリシーを直接アタッチ]を選び、ポリシーで[AdministratorAccess]を選びます。
次のステップでタグ付けができますが、今回は特に必要ないので更に[次のステップ: 確認]に進みます。
内容に問題が無ければ[ユーザーの作成]を押します。
これでユーザーの追加ができました。以後、condor_annexからAWSの機能にアクセスするときには、ここで表示されている[アクセスキーID]と[シークレットアクセスキー]を用います。
condor_annexの設定
アクセスキーが作成できたので、condor_annexの設定をします。~/.condorディレクトリにpublicKeyFileとprivateKeyFileを作成し、それぞれパーミッションを600にしておきます。
publicKeyFileには[アクセスキーID]を、privateKeyFileには[シークレットアクセスキー]を記述します。
-bash-4.1$ mkdir ~/.condor
-bash-4.1$ cd ~/.condor/
-bash-4.1$ touch publicKeyFile privateKeyFile
-bash-4.1$ chmod 600 publicKeyFile privateKeyFile
-bash-4.1$ vi publicKeyFile
-bash-4.1$ vi privateKeyFile
-bash-4.1$ cd ~/condor-8.8.5
condor_annexを用いてAWS上に必要な設定を行います。この処理は数分かかります。
-bash-4.1$ condor_annex -setup
Creating configuration bucket (this takes less than a minute).. complete.
Creating Lambda functions (this takes about a minute).. complete.
Creating instance profile (this takes about two minutes).. complete.
Creating security group (this takes less than a minute).. complete.
Setup successful.
-bash-4.1$
環境が正常につくられているか確認します。
-bash-4.1$ condor_annex -check-setup
Checking security configuration... OK.
Checking for configuration bucket... OK.
Checking for Lambda functions... OK.
Checking for instance profile... OK.
Checking for security group... OK.
Your setup looks OK.
-bash-4.1$
正常に認識されているようです。
インスタンスの立ち上げ
それでは、インスタンスを立ち上げてみます。インスタンスを立ち上げる際、デフォルト環境で使用できるインスタンスタイプとそうでないものがあるので注意が必要です。今回は旧世代インスタンスのm3.mediumを使用しました。
-bash-4.1$ condor_annex -count 1 -annex-name HTCondorOnAWS -aws-on-demand-instance-type m3.medium
Will request 1 m3.medium on-demand instance for 0.83 hours. Each instance will terminate after being idle for 0.25 hours.
Is that OK? (Type 'yes' or 'no'): yes
Starting annex...
Annex started. Its identity with the cloud provider is 'HTCondorOnAWS_6de43f64-5612-4ab4-bf01-5d69d7fa0ee7'. It will take about three minutes for the new machines to join the pool.
-bash-4.1$
AWSマネージメントコンソール上で、インスタンスが立ち上がっていることを確認します。
また、しばらく待ってcondor_statusで確認します。
無事にAWS上のインスタンスがpoolに登録されました。このようにして作成されたインスタンスは何も処理をしていない時間が続くと自動的に停止するようになっているため、インスタンスを立ち上げっぱなしにしてお金を無駄にしてしまう心配もないです。
参考までに、今回作成した構成も図にしておきます。
このように、condor_annexを使用することでクラウド環境構築にまつわる雑多な準備を省いて手軽に環境を立ち上げることができます。まずはこれで標準環境を立ち上げ、その後、徐々にカスタマイズしていく、というのができるのはとても便利です。
次回予告
やっと、社内向け環境と、AWSを使用したクラウド環境という、2つの環境を立ち上げることができました。このままだと、全く別の環境がそれぞれ存在することになるので、次回以降はこの2つの環境を統合し、シームレスに使用することができるようにしていきます。
第17回の公開は、2019年10月を予定しております。
プロフィール