モード変更


    言語

AWS Batchの活用

2022/10/28

膨大な量のデータの時代に、バッチはアプリケーションと同じくらい、欠かせない処理です。
バッチを起動するためにはフレームワークを選びつつデプロイ先も思考する必要があります。
一般的と言えば Spring Batch, Kubernetes の Job や Cronjob、分散システムの場合 Hadoop、Apache Spark などの技術を使って Kubernetes 上デプロイの形です。
ただし、小規模のプロジェクトまたは単独のバッチだと上記の導入は困難です。
したがって以下の懸念点がありました:

  • 導入&運用コスト
  • モニタリングとログ記録
  • ジョブの優先度&リトライ設定

そのため今回はクラウドプロバイダーから提供しているサービスを目指して AWS のバッチサービスを紹介したいと思います。

概要

AWS Batch は AWS 上の各種リソースに、バッチ処理を簡単かつ、効率的に行うことができるサービスです。なお、先述した問題を解決できます。
以下は基本の特徴をリストアップしながらプレビューしましょう。

コスト最適化

  • フルマネージドサービスなので導入&運用コストゼロ
  • AWS Batch に対する追加料金は発生しません。AWS リソースの費用のみがかかります。

モニタリングとログ記録

  • メトリクスは AWS マネジメントコンソールに表示される
  • コンピューティング性能や、実行中、完了済みなどのジョブの状態も確認することができる
  • ログ AWS CloudWatch に書き込まれ、バッチ毎にログを確認できる

ジョブ実行、優先度&リトライ設定

  • 複数ジョブキューで優先度を設定できて、リソースの無駄をコントロールが可能
  • 条件によるリトライの仕組みがある。例: エラーコード=3 の場合リトライをする
  • ML に応じるマルチノード並列、GPU の実行が可能

主な機能を紹介しましたので、AWS の構成をみていきましょう。

構成

基本的に 3 つに分かれています:ジョブ定義 (Job Definition)、キュー (Job Queue)、コンピューティング環境 (Computing environment) 実行できるまでには、最低限、以下のフローのように定義しなければなりません。

  1. コンピューティング環境の準備
    • バッチジョブ実行に必要とする CPU、メモリのリソースです。
    • 「コンピューティング環境画面」で設定できます。
  2. ジョブキューの定義
    バッチジョブにコンピューティング環境と優先順位を付ける設定です
  3. ジョブ定義
    コマンド、コンテナ、パラメータなどの指定
  4. ジョブ実行
    ジョブ定義から実行できるジョブ設定が生成され、キューに入る このステップの入り口がいくつがあり、一般的にはイベントとしてトリガーしますが、Batch のコンソールで手動起動の形も可能です。

これで簡単のバッチを作成できますが、実際、自動化、通知などを求められるケースが多かったのです。その際にコンテナイメージ作成やトリガーの Eventbridge 設定必要となり、次に伝えます。

スタディケース

AWS Batch は AWS プラットフォームと統合されていることから、AWS を利用している場合構築が最適的です。 以下のように crontab で DynamoDB を書き込むバッチを起動して結果を担当者へ通知するシステムを構築してみました。 ①② バッチスクリプトを含むイメージは、開発者がソースコードを変更した時点で(Github Actions で)ビルドされる。
③ 開発者が AWS にログインし、EventBridge、Batch でジョブ定義、cron、通知などを設定する。
④⑤ cron で起動したバッチジョブには、スポットインスタンスも同時にプライベート subnet 中に作成される。
⑥⑦ バッチスクリプトが入ったコンテナ起動後、コマンドが実行される。DynamoDB のアクセスがプライベートで行われる。
⑧ ログは Cloudwatch に送信されるが、AWS Batch コンソールから参照することができる。
⑨ ジョブのイベント、ステータスを EventBridge で管理するため、実行エラーの際に SNS 経由で関係者を通告する。
このようにセキュリティ向上のプライベートシステムができました。ややこしく見えましたが、実際に AWS Batch をメインに作業しますので、Kubernetes より実装しやすいと思います。

最後に

個人的にはすごく使いやすく良いサービスなのに、プラットフォーム利用料金が 0 というのはありがたいです。 AWS を使うのであれば AWS Batch は最強の選択肢であり、開発者の負担を減らしてプログラミングに集中することができるのです。 ぜひ活用してみてください。

出典

Photo source:
https://aws.amazon.com/

awsbatchserverless

Author

HieuLuan Quan

HieuLuan Quan

バックエンドエンジニア

バックエンド、フロンエンド、アプリケーション開発経験であり、フールスタックエンジニアです

その他おすすめ記事

2023/03/03

Jetpack Composeでナビゲーションパラメータ、ダイナミックなstartDestinationを実現

私たちのチームは最近、2つの別々のAndroidアプリケーションを必要とするクライアントとのコラボレーションで、Jetpack Composeと全く新しいプロジェクトを行う機会を得ました。このプロジェクトは無事リリースされ、クライアントは最終製品に非常に満足していました。 このブログでは、Jetpack Compose ナビゲーションのパラメータの扱いについて、特に最初はかなり厄介だったので、その過程で得たいくつかの学びを共有したいと思います。 執筆時点では、Jetpack Compose Navigat...

Diarmaid Lindsay

Diarmaid Lindsay

Android

2022/12/20

モンスターラボ2023年度新卒内定者向けイベントレポート

 こんにちは、モンスターラボで BackEnd の TechLead をしています、国平です。  このブログには、 Docker on Lima 以来の投稿になります。 今回は、モンスターラボの新卒採用における内定者イベントのレポートをしてみたいと思います。普段の技術的な話題から離れて、新卒内定者向けのイベントレポートを通して、会社の雰囲気をお伝えしてみようと思います。  11 月初旬、モンスターラボで内定者向けに実際のプロジェクトに参加したメンバーから、プロジェクトの様子を伝えて、モンスターラボのプロジ...

Kiyotaka Kunihira

Kiyotaka Kunihira

サービス開発実績会社情報
採用情報インサイトお問い合わせ
© 2022 Monstarlab
情報セキュリティ基本方針個人情報の取り扱いについて個人情報保護方針