Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AWS Batch × Spring Batch でクラウド最適なバッチを構築した話

Red Frasco
September 09, 2022

AWS Batch × Spring Batch でクラウド最適なバッチを構築した話

JJUG CCC 2022 Spring の登壇資料です。

後日談含めた資料は、Qiita を参照してください。
https://qiita.com/sinokuma/items/b3b1ad81c763a3ce8fe3

発表動画はこちらです。
https://www.youtube.com/watch?v=ArEY_yIt0GI

Red Frasco

September 09, 2022
Tweet

More Decks by Red Frasco

Other Decks in Technology

Transcript

  1. ⾃⼰紹介 猪熊 朔也 ( いのくま さくや ) - 株式会社 Red

    Frasco - インフラエンジニア u経歴 ⾦融系SIer -> リクルート -> ⾦融系スタートアップ -> Red Frasco uその他コメント - うどんが好きです - うどん脳 をプロフィールアイコンにすることが多いです - 最初4年くらいは Java エンジニア - ここ5年くらいはインフラ・クラウド⼀⾊ 2
  2. はじめに • 本セッションでは、Spring Batch を AWS 上で稼働させる場合の バッチ構成について話します • Spring

    Batch よりも AWS(AWS Batch 等)に関する話題が中⼼とな りますのでご了承ください • おそらくこんな⼈におすすめなセッションです • Java開発経験はあるけど、クラウド(AWSなど)経験はない • 同じようなバッチ基盤をクラウド(AWSなど)上に構築しようとしている • クラウド(AWSなど)を最近利⽤し始めた 3
  3. 物件情報がポータルサイトに掲載されるまでの流れ 6 不動産会社 担当者 物件情報⼊⼒ 物件情報変換 物件情報表⽰ 物件管理 システム データ

    連動 物件データ 画像データ 他システム 物件データ 画像データ ⼿⼊⼒ コンバータ 各種ポータルサイト データ 連動 デ ー タ 連 動 ⾃社ポータル 総合ポータル S 総合ポータル H 総合ポータル A データ 連動 データ 連動 データ 連動 カスタマー 物件探し ⼿⼊⼒またはシステム連携によって 物件情報を管理システムに登録する 登録された物件情報を各種ポータルサイトの 仕様に沿ったデータ形式に変換する 物件情報がポータルサイトに掲載される 今回はここの話
  4. AWS Batch × Spring Batch 全体構成 9 連携元 システム Network

    Load Balancing AWS Transfer FTP S3 物件情報 受信用 AWS Step Functions workflow EventBridge AWS Batch Read AWS Batch Process AWS Batch Write Amazon Aurora 物件管理 システムDB AWS Step Functions workflow EventBridge AWS Batch Read AWS Batch Process AWS Batch Write Amazon Aurora 物件管理 システムDB S3 物件情報 送信用 FTP送信 モジュール ポータルサイト 物件情報受信バッチ 物件情報送信バッチ
  5. なぜ Spring Batch を選定したのか - SoE と SoR 10 不動産会社

    担当者 物件管理 システム データ 連動 物件データ 画像データ 他システム 物件データ 画像データ ⼿⼊⼒ コンバータ 各種ポータルサイト データ 連動 デ ー タ 連 動 ⾃社ポータル 総合ポータル S 総合ポータル H 総合ポータル A データ 連動 データ 連動 データ 連動 カスタマー 物件探し SoR 安定稼働 SoE スピード
  6. なぜ Spring Batch を選定したのか - 特性に応じた⾔語選定 11 不動産会社 担当者 物件管理

    システム データ 連動 物件データ 画像データ 他システム 物件データ 画像データ ⼿⼊⼒ コンバータ 各種ポータルサイト データ 連動 デ ー タ 連 動 ⾃社ポータル 総合ポータル S 総合ポータル H 総合ポータル A データ 連動 データ 連動 データ 連動 カスタマー 物件探し SoR 安定稼働 SoE スピード しっかり・かっちりしたシステムを Java で構築する
  7. なぜ AWS Batch を 選定したのか 12 • AWS Lambda •

    実⾏時間が15分を超える可能性があるため不採⽤ • ECS Task • ECS Task でもおそらく⼗分処理可能 • ただし、AWS Batch の以下の利点を活⽤したかったため、不採⽤ • AWS Batch • コンピューティング環境(CPU/Memory)が処理量に応じて⾃動調整される • 処理量増加によるリソース調整等の運⽤業務をマネージドサービスに委譲で きる点は⼈数の少ないスタートアップにとって⾮常に強⼒
  8. Step Functions を利⽤してバッチジョブをコントロールする 14 連携元 システム Network Load Balancing AWS

    Transfer FTP S3 物件情報 受信用 AWS Step Functions workflow EventBridge AWS Batch Read AWS Batch Process AWS Batch Write Amazon Aurora 物件管理 システムDB AWS Step Functions workflow EventBridge AWS Batch Read AWS Batch Process AWS Batch Write Amazon Aurora 物件管理 システムDB S3 物件情報 送信用 FTP送信 モジュール ポータルサイト 物件情報受信バッチ 物件情報送信バッチ
  9. Step Functions でバッチ処理を柔軟に制御する 15 • Step Functions と組み合わせて、バッチジョブをワークフロー化 • ジョブステータスによるフロー制御

    • タイムアウト / 異常終了したらエラー通知 • リトライ設定によるジョブの安定性・回復性 • タイムアウト / 異常終了したら、少なくとも1回は⾃動でリトライする • ジョブ構成変更に対する柔軟性 • 前処理 / 後処理を追加する • ジョブを分割する、統合する
  10. Chunk モデル か Tasklet モデルか • Spring Batch は Tasklet

    モデル をベースに考える • できるだけ構成をシンプルに • リカバリ運⽤をシンプルに (ジョブリランするだけ) • ジョブ(ジョブネット)の⾒通しを良くする • Step Functions は、Chunk モデルを参考に構成 • ItemReader、ItemProcessor、ItemWriter にならって3分割 • Read Job︓処理データをS3/DBから読み込む • Process Job︓業務処理を⾏う(バリデーション、変換など) • Write Job︓出⼒結果をS3/DBに書き込む 16 AWS Step Functions workflow AWS Batch Read AWS Batch Process AWS Batch Write 基本⽅針を決めつつ、個別要件に応じて適宜調整
  11. バッチのリトライ設計 • AWS Batch , Step Functions によるリトライを基本とし、Spring Batch で

    のリトライは必要に応じて検討 • マネージドサービスによる恩恵を最⼤限活⽤する • リトライポリシーを設定して、⾃動でリトライさせる • AWSマネージドコンソールや、AWS CLI で⼿動リトライをすることも可能 • ⾃動リトライのみを前提にしない • 何回リトライしても必ず失敗するケースを考慮する • ⼊⼒データの不備、アプリケーションの不具合 など • イレギュラー対応に柔軟に対応できるよう⼿動リトライの余地を残す • データ連携が遅延したため、実⾏時刻をずらす など 17
  12. リトライを含めたバッチジョブフローの例 18 • 店舗単位のリトライ • 物件情報は店舗ごとに連携される • 処理が失敗した店舗のみリトライ • 全店舗分のリトライ

    • Step Functions 全体のリトライ • 業務ロジックで、Step Function を再度呼び出 す • ⼿動でのリトライ • Step Functions のリトライ • 失敗したジョブのみリトライ ⾃動と⼿動のバランスをとりながら、バッチの安定性を⾼める
  13. バッチジョブ監視 • CloudWatch 標準メトリクス • Step Functions︓実⾏時間、成功 / 失敗した処理数 など

    • AWS Batch︓ジョブステータス • CloudWatch モニタリングダッシュボードのサンプルあり • https://github.com/aws-samples/aws-batch-runtime-monitoring • バッチアプリケーション監視 • 処理件数やバリデーションエラー数など • CloudWatch 標準メトリクスだけでは、業務の観点で処理が正常に動いているかど うかまではわからない • モニタリングするメトリクスを決める • モニタリング基盤(CloudWatch, Datadog, NewRelic など)にカスタムメトリクスとして連携する • カスタムメトリクスに対してアラートを設定する 19
  14. バッチジョブの実⾏監視例 (Datadog) 20 • バッチが実⾏されたら 1 を⽴てて、メトリクスが 0 の場合はアラート •

    ログ監視だけでは、失敗は検知できても実⾏されていないことは検知できないケースがある
  15. AWS Batch × Spring Batch でクラウド最適なバッチ • AWS Batch ×

    Spring Batch によるバッチ基盤を紹介しました • 本構成がすべてではありません • クラウド上での最適なバッチ構成を考えるきっかけの1つになれ ば嬉しいです • ジョブ監視・モニタリングは⾒るべきメトリクスを決めた上で 丁寧に監視する 22