AWS
docker
JAWS-UG
OpenFOAM
AWS-Batch

JAWSUG HPC: AWS Batch x OpenFoam HandsOn

JAWSUG HPC支部 第10回勉強会 AWS Batch x OpenFoam Hands-On

https://jawsug-hpc.connpass.com/event/61919/

元ネタ:http://qiita.com/porcaro33/items/0b6cf3e2c2a0f88fc305

OpenFoam x AWS Batch ハンズオン環境

image


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
    image


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


  • CloudFormation -> Create New Stack -> Choose File -> Next

    image


  • Enter Stack Name, Bucket Name, KeyPair Name -> Next

    image


  • Next -> checkin at "I acknowledge that AWS CloudFormation..." -> Create

    image


  • CloudFormaitonが収束したら、Outputsを見てください。ここの情報をBatch Jobを設定するスクリプト編集するときに使います。このBrowser Tabは残しておいてください。

    image



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

image


  • 必要なスクリプト類はgithubからダウンロード済みです。これも確認しておきましょう。

cd /home/ubuntu/openfoam-docker

ll

image


docker build/push


  • Docker内でOpenFoamを実行するスクリプトに作成したBucketNameを入力します。

sudo vi openfoam_run.sh

image


  • 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


  • imageにはarnではなくURIを入力する必要があるので、一度ECSの画面にいってURIをコピーしてjsonに貼り付ける。
    image


compute_environment.json

sudo vi computing_env.json

image


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を起動していくのも見えます。

Batch Dashboard

image

EC2

image


  • 最後にS3にファイルが保存されているのを確認しください。


6.Close this environment


  • Batch環境を消すには、作成とは逆の順番で消していく必要があります。

  • disable/delete job queue

    image


  • disable/delete compute environment

    image


  • deregister job definition

    image


Batchを消したら、S3内の結果ファイルも消してください。バケットを空にしないとCloudFormationの削除でfailします。

* delete s3 objects

image


  • delete container repo

    image


  • delete cloudformation stack


fin!