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 クラスタ起動条件の決定
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` を選択 > 画面左 `VPC` をクリック > デフォルト VPC が "はい" の VPC ID (vpc-XXXXXXXX) をメモ
画面左上 `サービス` > `VPC` を選択 > 画面左 `サブネット` をクリック > VPC が 上記 vpc-XXXXXXXXを持つサブネットID (subnet-XXXXXXX)をメモ
note: 2つあると思いますがどちらでも可です(AbailabilityZoneの違い)。
VPC_ID="vpc-XXXXXXXX"
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 使うのは大変なため、汎用性をとった)
EC2_KEY_NAME="CfnClusterKeyPair"-`date +"%Y-%m-%d-%H%M"` && echo ${EC2_KEY_NAME}
FILE_SSH_KEY="${HOME}/.ssh/${EC2_KEY_NAME}.pem" && echo ${FILE_SSH_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
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='<MasterのPublicIP>'
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}
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 クラスタ環境の削除
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を削除してください