Edited at

[JAWS-UG HPC] CfnCluster ハンズオン

More than 3 years have passed since last update.


0. 事前準備


0.1 Amazon Linux (作業環境)を準備する

CnfClusterをインストールする環境を構築します


1. CfnClusterのインストール

起動した Amazon Linux にCfnClusterをインストールします。


1.1 ログイン

上記 0.2 で起動したAmazon Linux にログインしていることを確認します。

ログインしていれば 1.2 へ進みます。

まだログインできていなければ、下記の「Windowsの場合」もしくは 「Mac or Linuxの場合」を参照してください。


1.2 CfnClusterのインストール

Amazon Linux上に、CfnClusterをインストールします。


インストール

sudo /usr/bin/pip install --upgrade cfncluster


これでインストールは完了です。


2. configファイルの設定

対話形式でも作成できますが、今回は見通しを良くするため、configファイルをCLI使ってゼロベースから作ります。

流れとしては


  • shellでパラメータ決定

  • ヒアドキュメントでconfigファイル生成

です。


2.1 クラスタ起動条件の決定


configのパラメータ決定

CLUSTER_NAME="handson"

REGION="ap-northeast-1"
MASTER_INSTANCE_TYPE="t2.micro"
WORKER_INSTANCE_TYPE="t2.micro"
MOUNT_POINT="/share"
VOLUME_SIZE="16"
INIT_SIZE="1"
MAX_SIZE="4"

INIT_SIZE は、最小Workerノード数, MAX_SIZE は、最大のWokerノード数です。


2.2 VPCとサブネットの決定

今回は簡単のためにデフォルトVPCとそれに紐づくサブネットを指定してください。

マネージメントコンソール上から確認できます。


VPC_IDの確認方法

画面左上 `サービス` > `VPC` を選択 > 画面左 `VPC` をクリック > デフォルト VPC が "はい" の VPC ID (vpc-XXXXXXXX) をメモ



サブネット_IDの確認方法

画面左上 `サービス` > `VPC` を選択 > 画面左 `サブネット` をクリック > VPC が 上記 vpc-XXXXXXXXを持つサブネットID (subnet-XXXXXXX)をメモ

note: 2つあると思いますがどちらでも可です(AbailabilityZoneの違い)。



デフォルトVPCの決定

VPC_ID="vpc-XXXXXXXX"



サブネットIDの決定

SUBNET_ID="subnet-XXXXXXXX"



2.3 クレデンシャル情報の決定

クレデンシャル情報を決定します。先ほどダウンロードした csv ファイルを参照し入力してください。


クレデンシャル情報の設定

ACCESS_KEY='<Access Key Id>'

SECRET_KEY='<Secret Access Key>'`

もしくは下記でもOKです ("0. 事前準備"からスタートしている場合に限る)。


クレデンシャル情報の抽出

ACCESS_KEY=`cat ~/.aws/credentials | grep aws_access_key_id | \

cut -d "=" -f2`
SECRET_KEY=`cat ~/.aws/credentials | grep aws_secret_access_key | \
cut -d "=" -f2`


2.4 KeyPairの作成(クラスタへのログインで使用)

今回はクラスタ用に別の鍵をAWS-CLIから作ってみます。

(本ハンズオンで Windows User 用に WinSCP 使うのは大変なため、汎用性をとった)


key名の決定

EC2_KEY_NAME="CfnClusterKeyPair"-`date +"%Y-%m-%d-%H%M"` && echo ${EC2_KEY_NAME}



keyの保存先の決定

FILE_SSH_KEY="${HOME}/.ssh/${EC2_KEY_NAME}.pem" && echo ${FILE_SSH_KEY}



Keyの作成

aws ec2 create-key-pair \

--key-name ${EC2_KEY_NAME} \
--query 'KeyMaterial' \
--output text \
> ${FILE_SSH_KEY} \
&& cat ${FILE_SSH_KEY} \
&& chmod 400 ${FILE_SSH_KEY}


2.5 configファイルの作成


変数の確認

cat << ETX

${CLUSTER_NAME}
${ACCESS_KEY}
${SECRET_KEY}
${REGION}
${EC2_KEY_NAME}
${VPC_ID}
${SUBNET_ID}
${MOUNT_POINT}
ETX


configファイル作成

mkdir ~/.cfncluster/

cat << EOF > ~/.cfncluster/config
[aws]
aws_region_name =
${REGION}
aws_access_key_id =
${ACCESS_KEY}
aws_secret_access_key =
${SECRET_KEY}

[cluster ${CLUSTER_NAME}]
vpc_settings = public
key_name =
${EC2_KEY_NAME}
master_instance_type =
${MASTER_INSTANCE_TYPE}
compute_instance_type =
${WORKER_INSTANCE_TYPE}
shared_dir =
${MOUNT_POINT}
initial_queue_size =
${INIT_SIZE}
max_queue_size =
${MAX_SIZE}
ebs_settings = custom

[ebs custom]
#ebs_snapshot_id = ${SNAPSHOT_ID}
volume_size =
${VOLUME_SIZE}

[vpc public]
master_subnet_id = ${SUBNET_ID}
vpc_id =
${VPC_ID}

[global]
update_check = true
sanity_check = true
cluster_template = ${CLUSTER_NAME}
EOF
cat ~/.cfncluster/config



3. CfnClusterによるクラスタの構築


3.1 クラスタの構築


クラスタ名の決定

MY_CLUSTER="jawscluster"



クラスタの動的構築

cfncluster create ${MY_CLUSTER}



結果例

Starting: jawscluster

Status: cfncluster-jawscluster - CREATE_COMPLETE
Output:"MasterPrivateIP"="XXX.XXX.XXX.XXX"
Output:"MasterPublicIP"="YYY.YYY.YYY.YYY"
Output:"GangliaPrivateURL"="http://XXX.XXX.XXX.XXX/ganglia/"
Output:"GangliaPublicURL"="http://YYY.YYY.YYY.YYY/ganglia/"

ブラウザに、上記の GangliaPublicURL を入れて、Gangliaの画面も確認してみましょう!


3.2 クラスタへのログイン


マスターノードのIPアドレスの決定

IP='<MasterのPublicIP>'



Masterノードへのログイン

ssh -i ~/.ssh/${EC2_KEY_NAME}.pem ec2-user@${IP}



3.3 計算ノードの確認


ノードの確認

qhost



結果例

HOSTNAME                ARCH         NCPU NSOC NCOR NTHR  LOAD  MEMTOT  MEMUSE  SWAPTO  SWAPUS

----------------------------------------------------------------------------------------------
global - - - - - - - - - -
ip-172-31-4-126 lx-amd64 1 1 1 1 0.00 994.8M 98.3M 1024.0M 0.0


4. Hello worldの実行


4.1 テストスクリプトの作成


保存先の決定

DIR=${HOME}/helloworld

mkdir ${DIR}
cd ${DIR}


HelloWorld

cat << EOF > hellowJob1.sh

#!/bin/bash
sleep 120
echo "Hello World from
\$(hostname)"
EOF

cat << EOF > hellowJob2.sh
#!/bin/bash
sleep 120
echo "Hello World from
\$(hostname)"
EOF

cat << EOF > hellowJob3.sh
#!/bin/bash
sleep 120
echo "Hello World from
\$(hostname)"
EOF

cat << EOF > hellowJob4.sh
#!/bin/bash
sleep 120
echo "Hello World from
\$(hostname)"
EOF

cat << EOF > hellowJob5.sh
#!/bin/bash
sleep 120
echo "Hello World from
\$(hostname)"
EOF

cat << EOF > hellowJob6.sh
#!/bin/bash
sleep 120
echo "Hello World from
\$(hostname)"
EOF



4.2 ジョブの投入


複数のジョブの投入と確認

qsub hellowJob1.sh

sleep 2
qsub hellowJob2.sh
sleep 2
qsub hellowJob3.sh
sleep 2
qsub hellowJob4.sh
sleep 2
qsub hellowJob5.sh
sleep 2
qsub hellowJob6.sh
sleep 2


ジョブの確認

qstat



結果例

job-ID  prior   name       user         state submit/start at     queue                          slots ja-task-ID 

-----------------------------------------------------------------------------------------------------------------
1 0.55500 hellowJob1 ec2-user r 01/19/2016 18:02:50 all.q@ip-172-31-4-126.ap-north 1
2 0.55500 hellowJob2 ec2-user qw 01/19/2016 18:02:41 1
3 0.55500 hellowJob3 ec2-user qw 01/19/2016 18:02:43 1
4 0.55500 hellowJob4 ec2-user qw 01/19/2016 18:02:45 1
5 0.55500 hellowJob5 ec2-user qw 01/19/2016 18:02:47 1
6 0.55500 hellowJob6 ec2-user qw 01/19/2016 18:02:49 1


4.3 EC2インスタンスの確認

マネージメントコンソール上から、ジョブ待ち応じてcomputeノードが自動的に増えて行く様子を確認します。


5. 後始末


5.1 クラスタ環境の削除


Masterからのログアウト

exit



クラスタの削除

cfncluster delete ${MY_CLUSTER}



結果例

Deleting: jawscluster

Status: DynamoDBTable - DELETE_COMPLETE
Stack with id cfncluster-jawscluster does not exist

トラブル等で消せない場合は、マネージメントコンソールから、CloudFormationのサービスに行って、直接 Delete Stack を実行してください。


5.2 CfnClusterをインストールしたAmazon Linuxのterminate

マネージメントコンソール上から操作します

サービス > EC2 > インスタンス > CfnClusterをインストールした "Amazon Linux" を選択 > アクション > 起動の状態 > 削除


IAM設定の削除


  • 必要あれば、IAMユーザ、Groupを削除してください