(1) Cloud9 の環境で作業します。Cloud9 のシェルから他のホストにログインしている場合には、exit
を実行し、cloud9 のシェルに戻るか、「Window」->「New Terminal」から新しいシェルを開きます。
(2) 下記のコマンドを実行し、サンプルで実行するためのファイルを作成します。このシェルスクリプトは、Array jobのArray indexを受け取り、10倍にした値を表示します。
cat > batch_job1.sh << EOF
#!/bin/sh
export AWS_BATCH_JOB_ARRAY_INDEX
echo My array index: \$AWS_BATCH_JOB_ARRAY_INDEX / Result: \$((AWS_BATCH_JOB_ARRAY_INDEX*10)) ; date
EOF
(3) ファイルが作成されているかを確認します。
cat batch_job1.sh
下記と同じか確認します。
#!/bin/sh
export AWS_BATCH_JOB_ARRAY_INDEX
echo My array index: $AWS_BATCH_JOB_ARRAY_INDEX / Result: $((AWS_BATCH_JOB_ARRAY_INDEX*10)) ; date
(4) Batch上で実行するため、プログラムをコンテナ化します。今回は簡単なシェルスクリプトですので、本来はコンテナ化しなくても実行は可能ですが、手順を試すためにコンテナ化してみます。
(5) 下記コマンドを実行してコンテナイメージを作成するための設定ファイルを作成します。
cat > Dockerfile << EOF
FROM amazonlinux:latest
COPY ./batch_job1.sh /usr/local/bin/batch_job1.sh
# program execute
CMD /bin/bash /usr/local/bin/batch_job1.sh
EOF
(6) 下記コマンドを実行してコンテナイメージを作成します。
docker build -t batch_job1 .
(7) コンテナイメージができているかを確認します。下記コマンドを実行します。
docker images --filter reference=batch_job1
(8) コンテナイメージをCloud9上でテスト起動してみます。
docker run batch_job1
(9) 作成したコンテナイメージをレジストリ (Amazon Elastic Container Registry (ECR)) へ登録します。
(10) 登録するための ECR リポジトリを作成します。下記コマンドを実行します。
aws ecr create-repository --repository-name batch_job1
実行すると、repositoryUri
の項目が表示されますので、メモします。
メモ
repositoryUri:
(11) コピーしたイメージに対し、タグを付けます。下記を実行します。先ほどメモした値に合わせて下記コマンドを書き換えてから実行します。
docker tag batch_job1 (先ほどメモしたrepositoryUri)
例:
docker tag batch_job1 000000000000.dkr.ecr.us-east-1.amazonaws.com/batch_job1
(12) aws ecr get-login-password コマンドを使用して、レジストリ用の Docker login 認証コマンド文字列を取得します。先ほどメモした値の一部を使って下記コマンドを置き換えてから実行します。
aws ecr get-login-password | docker login --username AWS --password-stdin (先ほどメモしたrepositoryUriの / より前の部分)
例:
aws ecr get-login-password | docker login --username AWS --password-stdin 000000000000.dkr.ecr.us-east-1.amazonaws.com
aws ecr get-login-password コマンドによって12時間有効な認証トークンが発行され、それを標準入力経由で docker login コマンドに渡してログインしています。
(13) ECR リポジトリへイメージをプッシュします。先ほどメモした値に合わせて下記コマンドを書き換えてから実行します。
docker push (先ほどメモしたrepositoryUri)
例:
docker push 000000000000.dkr.ecr.us-east-1.amazonaws.com/batch_job1
(14) プッシュしたイメージを使って動作確認をします。
(15) ローカルのキャッシュを削除します。先ほどメモした値に合わせて下記コマンドを書き換えてから実行します。
docker rmi (先ほどメモしたrepositoryUri)
例:
docker rmi 000000000000.dkr.ecr.us-east-1.amazonaws.com/batch_job1
(16) ローカルで実行してみます。先ほどメモした値に合わせて下記コマンドを書き換えてから実行します
docker run (先ほどメモしたrepositoryUri)
例:
docker run 000000000000.dkr.ecr.us-east-1.amazonaws.com/batch_job1
(17) AWS Batchの画面に戻ります。 AWSコンソールへ戻るには、上部の「AWS Cloud9」(または、雲と9のマーク)->「Go To Your Dashboard」をクリックし、ダッシュボードに戻ります。
(18)「サービス」->「コンピューテイング」->「Batch」をクリック。または、検索窓から「Batch」と入力して「Batch」を選択します。
(19) 左の縦のメニューから「ジョブ定義」をクリックします。
(20) 「作成」をクリックし、下記のように設定します。
オーケストレーションタイプ: Amazon Elastic Compute Cloud (Amazon EC2)
(プラットフォームを変更してもよろしいですか? では「確認」をクリック)
名前: batch-array-job-definition
コマンド: []
( [] だけとします。)
(21) 次へ をクリック
(22) コンテナ設定で下記のように設定
イメージ: (先ほどメモしたrepositoryUri):latest
例: 000000000000.dkr.ecr.us-east-1.amazonaws.com/batch_job1:latest
(23) 次へ をクリック
(24) 「ジョブ定義レビュー」の画面で「ジョブ定義を作成」をクリック
(25) 左の縦のメニューから「ジョブ」をクリックします。
(26) 「新しいジョブを送信」をクリックします。
(27) 「ジョブを設定」で下記のように入力します。
名前: array01
ジョブ定義: batch-array-job-definition:~はじまるもの を選択
ジョブキュー: aws-batch-handson-job-queue を選択
配列サイズ: 10
(29) 「次へ」をクリック
(30) 「次へ」をクリック
(31) 「確認して送信」で「ジョブを作成」をクリック
(32) 左の縦のメニューの「ジョブ」をクリックし、今作成したジョブ名をクリックします。 ジョブインデッククスが10個作成されて、実行されていることを確認します。
(33) SUCCEEDED
となったら、任意のジョブインデックスの番号をクリックします。開いた画面の、ログストリーム名 をクリックし、出力を確認します。割り当てられた配列番号によって出力が変わっていることを確認します。
ここまでで「AWS Batchの利用」部分のハンズオンは終了です。「後片付け」の項目を行ってください。