- 事前準備
=======================
0.1 Amazon Linux (作業環境)を準備する
CnfClusterをインストールする環境を構築します
- 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
これでインストールは完了です。
- 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
- 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
- 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.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を削除してください