JAWSUG HPC支部 第10回勉強会 AWS Batch x OpenFoam Hands-On
https://jawsug-hpc.connpass.com/event/61919/
元ネタ:http://qiita.com/porcaro33/items/0b6cf3e2c2a0f88fc305
1. Build Infrastructure
Prerequisites
- まずはAWSにログイン https://console.aws.amazon.com/
- Oregonリージョンに移動、ログインしたユーザがEC2, S3, Batch, ECR, Cloudformation, IAM等を操作できる権限であることを確認してください。
Create KeyPair
- Bastion Serverにアクセスするのに使用するKeyPairを作成します。
- 後ほどCloudFormationを実行するときにKeyNameを入力するのでメモしといてください。
AWS Console -> EC2 -> Key Pairs -> Create Key Pair -> Enter key name -> Create
Run CloudFormation
-
Docker Imageのビルド環境としてUbuntuサーバをAWS上にたてます。このハンズオンではCloudFormationで必要な環境を構築してしまいます。
-
VPC
-
Subnet
-
SecurityGroup
-
Bastion EC2 (Ubuntu16.06)
-
SpotFleet Role
-
AWS Batch Role
-
Batch Job Role
-
S3 Bucket
-
Container Repo
-
CloudFormationテンプレートをGithubからダウンロード
https://raw.githubusercontent.com/porcaro33/openfoam-docker/master/aws_batch_base.yml -
Next -> checkin at "I acknowledge that AWS CloudFormation..." -> Create
-
CloudFormaitonが収束したら、Outputsを見てください。ここの情報をBatch Jobを設定するスクリプト編集するときに使います。このBrowser Tabは残しておいてください。
2. Docker Build and Push
Bastion Server
- CloudFormationで作成したUbuntuサーバにログインします。お好きなssh clientでログインしてください。ユーザ名は"ubuntu"です。
ssh -i <path_to_keypair> ubuntu@<IP_from_CF_OUTPUT>
- docker-ceとawscliはインストール済みです。確認してみましょう。
aws --version
docker --version
- 必要なスクリプト類はgithubからダウンロード済みです。これも確認しておきましょう。
cd /home/ubuntu/openfoam-docker
ll
docker build/push
- Docker内でOpenFoamを実行するスクリプトに作成したBucketNameを入力します。
sudo vi openfoam_run.sh
- BucketNameの編集がおわったらビルドします。
sudo docker build -t openfoam-batch:latest .
- ビルドが終わったらECRにdocker imageをpushします。
- Go to ECR
aws --region us-west-2 ecr get-login --no-include-email
- 返り値の"docker login -u AWS -p ...."をコピー、sudoを前につけて、ペーストして実行。
"Login Succeeded"と表示されたらOK。
*次はtagをつけて、pushします。
sudo docker tag openfoam-batch:latest <account-id>.dkr.ecr.us-west-2.amazonaws.com/openfoam-batch:latest
sudo docker push <account-id>.dkr.ecr.us-west-2.amazonaws.com/openfoam-batch:latest
3. Create Batch Environment
- Batchを実行する上で必要な、Job Definition, Compute Environment, Job Queueを作成していきます。CloudFormationのOutputsをもとに3つのjsonファイル編集して、AWSCLIを実行していきます。
job_definition.json
sudo vi job_definition.json
compute_environment.json
sudo vi computing_env.json
job_queue.json
sudo vi job_queue.json
-
特に変更点なし、内容だけ確認してください。
-
create job definition, compute enmvironment, job queueのCLI実行。それぞれ返り値を確認しながら実行してください。
aws --region us-west-2 batch register-job-definition --cli-input-json file://job_definition.json
aws --region us-west-2 batch create-compute-environment --cli-input-json file://computing_env.json
aws --region us-west-2 batch create-job-queue --cli-input-json file://job_queue.json
5.Submit Jobs
- これでOpenFoamを実行する環境は準備できました。最後にジョブを実行します。AWSCLIをつかって10回ジョブを実行して、その結果をS3に保存していきます。
./submit_batch.sh
- ジョブが実行されると、BatchのDashboardで各ジョブのstatusが次々を変わっていくのが見えます。ジョブがない場合はECS Clusterのコア数を0に設定しているので、ジョブに合わせてEC2 Instanceを起動していくのも見えます。
- 最後にS3にファイルが保存されているのを確認しください。
6.Close this environment
- Batch環境を消すには、作成とは逆の順番で消していく必要があります。
Batchを消したら、S3内の結果ファイルも消してください。バケットを空にしないとCloudFormationの削除でfailします。
fin!