[アップデート] AWS Batch がコンピューティング環境での Amazon Linux2 の利用をサポートしました
先日のアップデートで Amazon Batch がコンピューティング環境での Amazon Linux2 の利用をサポートしました。
更新箇所
ここで設定できるようになりました。(デフォルトは Amazon Linux1 と記載されています。)
終わり。
というのもアレなので、構築して確認してみましょう。
はじめに
そもそも Amazon Linux 2 と Amazon Linux との違いについては、下記弊社ブログ、または よくある質問 - Amazon Linux 2 | AWS をご参照下さい。
[速報]5年長期サポートのAmazon Linux 2が一般公開されました
AWS Batch についても、基本的な概念や使い方を把握している方を対象とします。
AWS Batch とは?という方は、まずは下記弊社ブログをご確認頂ければと思います。
前提
- CodeCommit に実行ファイルがプッシュ済み
- ECR に Docker イメージがプッシュ済み
検証環境イメージ
awslogs で CloudWatch Logs に簡易なログを出力する Python とシェルスクリプトで対応します。
下図のような環境で検証します。
利用するリソースは下記ブログ構成とほぼ同様なので、最初から構築を試してみたい方はご参照下さい。
CodeCommitにプッシュする
## export_log.py def export_log(x): for number in range(0, x): print(number) if __name__ == '__main__': export_log(10)
## run.sh #!/bin/bash python3 /usr/local/bin/demo-batch/export_log.py
ECRにプッシュする
## Dockerfile FROM centos:latest RUN yum install -y unzip RUN yum install -y python3 RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" RUN unzip awscliv2.zip RUN ./aws/install RUN yum install -y git ADD init.sh /usr/local/bin/init.sh WORKDIR /tmp
## init.sh #!/bin/bash CODE_REPO=https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/xxxxxxxxx CODE_DIR=/usr/local/bin/demo-batch git clone --config credential.helper='!aws --region ap-northeast-1 codecommit credential-helper $@' --config credential.UseHttpPath=true $CODE_REPO $CODE_DIR sh /usr/local/bin/demo-batch/run.sh
やってみる
残念ながら、現在(2020/11/29)、CFnでの対応がされていないため、手動または AWS CLI で作成する必要があります。
なお、AWS CLI を最新にしないと実行できません。
最新にする場合は、下記ご参照下さい。
AWS CLI バージョン 2 のインストール、更新、アンインストール - AWS Command Line Interface
今回の構築では、先に ecsInstanceRole に CodeCommit へのアクセス権限を付与しておく必要があります。
(図でいうところの⑤です。)
AWS CLI で構築するために、コンピューティング環境の設定を aws_batch_setting.json
にまとめます。
{ "computeEnvironmentName": "Demo-stg-BatchComputeEnv", "type": "MANAGED", "state": "ENABLED", "computeResources": { "type": "EC2", "allocationStrategy": "BEST_FIT_PROGRESSIVE", "ec2Configuration": [ { "imageType": "ECS_AL2" }, ], "minvCpus": 0, "maxvCpus": 128, "desiredvCpus": 0, "instanceTypes": ["m5.large"], "subnets": ["subnet-xxxxxx", "subnet-xxxxxx"], "securityGroupIds": ["sg-xxxxxxx"], "instanceRole": "ecsInstanceRole", "tags": { "Name": "AWS Batch Instance" } }, "serviceRole": "arn:aws:iam::xxxxxxxxx:role/service-role/AWSBatchServiceRole" }
aws batch create-compute-environment --cli-input-json file://aws_batch_setting.json
AWS Batch の大きな構成要素は下記ですが、
- コンピューティング環境
- ジョブ定義
- ジョブキュー
- ジョブ
1 は作成済み、4 は別途実行タイミングで設定するので、2,3をCFnで構築します。(この程度なら手動でも良い気がしますが。)
AWSTemplateFormatVersion: '2010-09-09' Description: AWS Batch CloudFormation # ------------------------------------------------------------# # Parameters # ------------------------------------------------------------# Parameters: NameTagPrefix: Type: String Default: demo Description: Prefix of Name tags. ENV: Type: String Default: stg Description: Env Variable tags. AWSBatchComputeEnv: Type: String Default: 'arn:aws:batch:ap-northeast-1:xxxxxxxxxx:compute-environment/Demo-stg-BatchComputeEnv' Description: AWSBatchComputeEnv. ECRImageID: Type: String Default: 'xxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/demo-aws-batch:x.x.x.x' Description: ECR Image ID. # ------------------------------------------------------------# # Resources # ------------------------------------------------------------# Resources: # ------------------------------------------------------------# # AWS Batch # ------------------------------------------------------------# AWSBatchJobQueue: Type: AWS::Batch::JobQueue Properties: ComputeEnvironmentOrder: - Order: 1 ComputeEnvironment: !Ref AWSBatchComputeEnv JobQueueName: !Sub ${NameTagPrefix}-${ENV}-BatchComputeEnv-JobQueues Priority: 1 State: ENABLED AWSBatchJobDefinition: Type: AWS::Batch::JobDefinition Properties: Type: container JobDefinitionName: !Sub ${NameTagPrefix}-${ENV}-BatchComputeEnv-Job-Def ContainerProperties: Command: - sh - /usr/local/bin/init.sh Memory: 1048 Vcpus: 1 Image: !Ref ECRImageID RetryStrategy: Attempts: 1
スタック作成が完了確認できたらジョブ実行してみます。
単一ジョブです。
aws batch submit-job --job-name demo-job --job-queue Demo-stg-BatchComputeEnv-JobQueues --job-definition Demo-stg-BatchComputeEnv-Job-Def:x
EC2 を見に行きます。
ちゃんと Amazon Linux2 で実行されています。
ちゃんとログも出力されています。
配列ジョブタイプでもやってみます。
aws batch submit-job --job-name demo-job --job-queue Demo-stg-BatchComputeEnv-JobQueues --job-definition Demo-stg-BatchComputeEnv-Job-Def:x --array-properties size=3
ちゃんと Amazon Linux2 で実行されていますね。
以上です。
Amazon Linux 2 を選択することで、さらにバッチパフォーマンスを向上させましょう!
(でも CFn しばらく対応しなそうだなー。)
なお、以前のバージョンであるAmazonLinux AMIはサポート終了(2020 年 12 月 31 日をもって終了))に近づいており、近い将来、デフォルトとしてAmazonLinux2に切り替えられることにご注意ください!
どなたかのお役に立てば幸いです。