0
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

JAWSUG HPC: AWS Batch x OpenFoam HandsOn

JAWSUG HPC: AWS Batch x OpenFoam HandsOn

by porcaro33
1 / 2

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!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
0
Help us understand the problem. What are the problem?