JJUG CCC 2022 Spring の登壇資料です。
後日談含めた資料は、Qiita を参照してください。 https://qiita.com/sinokuma/items/b3b1ad81c763a3ce8fe3
発表動画はこちらです。 https://www.youtube.com/watch?v=ArEY_yIt0GI
AWS Batch × Spring Batch でクラウド最適なバッチを構築した話2022/06/19 JJUG CCC 2022 Spring
View Slide
⾃⼰紹介猪熊 朔也 ( いのくま さくや )- 株式会社 Red Frasco- インフラエンジニアu経歴⾦融系SIer -> リクルート -> ⾦融系スタートアップ -> Red Frascouその他コメント- うどんが好きです- うどん脳 をプロフィールアイコンにすることが多いです- 最初4年くらいは Java エンジニア- ここ5年くらいはインフラ・クラウド⼀⾊2
はじめに• 本セッションでは、Spring Batch を AWS 上で稼働させる場合のバッチ構成について話します• Spring Batch よりも AWS(AWS Batch 等)に関する話題が中⼼となりますのでご了承ください• おそらくこんな⼈におすすめなセッションです• Java開発経験はあるけど、クラウド(AWSなど)経験はない• 同じようなバッチ基盤をクラウド(AWSなど)上に構築しようとしている• クラウド(AWSなど)を最近利⽤し始めた3
⽬次バッチ基盤を構築する背景AWS Batch × Spring Batch 構成の紹介バッチ設計・構築にあたっての考慮ポイントまとめ
5バッチ基盤を構築する背景
物件情報がポータルサイトに掲載されるまでの流れ6不動産会社担当者物件情報⼊⼒ 物件情報変換 物件情報表⽰物件管理システムデータ連動物件データ画像データ他システム 物件データ画像データ⼿⼊⼒コンバータ各種ポータルサイトデータ連動データ連動⾃社ポータル総合ポータル S総合ポータル H総合ポータル Aデータ連動データ連動データ連動カスタマー物件探し⼿⼊⼒またはシステム連携によって物件情報を管理システムに登録する登録された物件情報を各種ポータルサイトの仕様に沿ったデータ形式に変換する物件情報がポータルサイトに掲載される今回はここの話
バッチ処理の必要性• 物件情報は、複数のシステムから連動され、複数のポータルサイトに掲載される。• 連動元︓⾃社システム、外部SaaS、業者間流通システム(※)など• 連動先︓総合ポータルサイト、⾃社ポータルサイト• 物件情報は、⽇次でまとめて連携される。7※業者間流通システム︓様々な不動産管理会社の物件情報をポータルサイトに掲載するためのシステムバッチ処理によって、複数のデータ連動処理を効率よく⾏う必要がある
8AWS Batch × Spring Batch 構成の紹介
AWS Batch × Spring Batch 全体構成9連携元システムNetwork Load Balancing AWS Transfer FTP S3物件情報受信用AWS Step Functions workflowEventBridgeAWS BatchReadAWS BatchProcessAWS BatchWriteAmazon Aurora物件管理システムDBAWS Step Functions workflowEventBridgeAWS BatchReadAWS BatchProcessAWS BatchWriteAmazon Aurora物件管理システムDBS3物件情報送信用FTP送信モジュールポータルサイト物件情報受信バッチ物件情報送信バッチ
なぜ Spring Batch を選定したのか - SoE と SoR10不動産会社担当者物件管理システムデータ連動物件データ画像データ他システム 物件データ画像データ⼿⼊⼒コンバータ各種ポータルサイトデータ連動データ連動⾃社ポータル総合ポータル S総合ポータル H総合ポータル Aデータ連動データ連動データ連動カスタマー物件探しSoR安定稼働SoEスピード
なぜ Spring Batch を選定したのか - 特性に応じた⾔語選定11不動産会社担当者物件管理システムデータ連動物件データ画像データ他システム 物件データ画像データ⼿⼊⼒コンバータ各種ポータルサイトデータ連動データ連動⾃社ポータル総合ポータル S総合ポータル H総合ポータル Aデータ連動データ連動データ連動カスタマー物件探しSoR安定稼働SoEスピードしっかり・かっちりしたシステムを Java で構築する
なぜ AWS Batch を 選定したのか12• AWS Lambda• 実⾏時間が15分を超える可能性があるため不採⽤• ECS Task• ECS Task でもおそらく⼗分処理可能• ただし、AWS Batch の以下の利点を活⽤したかったため、不採⽤• AWS Batch• コンピューティング環境(CPU/Memory)が処理量に応じて⾃動調整される• 処理量増加によるリソース調整等の運⽤業務をマネージドサービスに委譲できる点は⼈数の少ないスタートアップにとって⾮常に強⼒
13バッチ設計・構築にあたっての考慮ポイント
Step Functions を利⽤してバッチジョブをコントロールする14連携元システムNetwork Load Balancing AWS Transfer FTP S3物件情報受信用AWS Step Functions workflowEventBridgeAWS BatchReadAWS BatchProcessAWS BatchWriteAmazon Aurora物件管理システムDBAWS Step Functions workflowEventBridgeAWS BatchReadAWS BatchProcessAWS BatchWriteAmazon Aurora物件管理システムDBS3物件情報送信用FTP送信モジュールポータルサイト物件情報受信バッチ物件情報送信バッチ
Step Functions でバッチ処理を柔軟に制御する15• Step Functions と組み合わせて、バッチジョブをワークフロー化• ジョブステータスによるフロー制御• タイムアウト / 異常終了したらエラー通知• リトライ設定によるジョブの安定性・回復性• タイムアウト / 異常終了したら、少なくとも1回は⾃動でリトライする• ジョブ構成変更に対する柔軟性• 前処理 / 後処理を追加する• ジョブを分割する、統合する
Chunk モデル か Tasklet モデルか• Spring Batch は Tasklet モデル をベースに考える• できるだけ構成をシンプルに• リカバリ運⽤をシンプルに (ジョブリランするだけ)• ジョブ(ジョブネット)の⾒通しを良くする• Step Functions は、Chunk モデルを参考に構成• ItemReader、ItemProcessor、ItemWriter にならって3分割• Read Job︓処理データをS3/DBから読み込む• Process Job︓業務処理を⾏う(バリデーション、変換など)• Write Job︓出⼒結果をS3/DBに書き込む16AWS Step Functions workflowAWS BatchReadAWS BatchProcessAWS BatchWrite基本⽅針を決めつつ、個別要件に応じて適宜調整
バッチのリトライ設計• AWS Batch , Step Functions によるリトライを基本とし、Spring Batch でのリトライは必要に応じて検討• マネージドサービスによる恩恵を最⼤限活⽤する• リトライポリシーを設定して、⾃動でリトライさせる• AWSマネージドコンソールや、AWS CLI で⼿動リトライをすることも可能• ⾃動リトライのみを前提にしない• 何回リトライしても必ず失敗するケースを考慮する• ⼊⼒データの不備、アプリケーションの不具合 など• イレギュラー対応に柔軟に対応できるよう⼿動リトライの余地を残す• データ連携が遅延したため、実⾏時刻をずらす など17
リトライを含めたバッチジョブフローの例18• 店舗単位のリトライ• 物件情報は店舗ごとに連携される• 処理が失敗した店舗のみリトライ• 全店舗分のリトライ• Step Functions 全体のリトライ• 業務ロジックで、Step Function を再度呼び出す• ⼿動でのリトライ• Step Functions のリトライ• 失敗したジョブのみリトライ⾃動と⼿動のバランスをとりながら、バッチの安定性を⾼める
バッチジョブ監視• CloudWatch 標準メトリクス• Step Functions︓実⾏時間、成功 / 失敗した処理数 など• AWS Batch︓ジョブステータス• CloudWatch モニタリングダッシュボードのサンプルあり• https://github.com/aws-samples/aws-batch-runtime-monitoring• バッチアプリケーション監視• 処理件数やバリデーションエラー数など• CloudWatch 標準メトリクスだけでは、業務の観点で処理が正常に動いているかどうかまではわからない• モニタリングするメトリクスを決める• モニタリング基盤(CloudWatch, Datadog, NewRelic など)にカスタムメトリクスとして連携する• カスタムメトリクスに対してアラートを設定する19
バッチジョブの実⾏監視例 (Datadog)20• バッチが実⾏されたら 1 を⽴てて、メトリクスが 0 の場合はアラート• ログ監視だけでは、失敗は検知できても実⾏されていないことは検知できないケースがある
21まとめ
AWS Batch × Spring Batch でクラウド最適なバッチ• AWS Batch × Spring Batch によるバッチ基盤を紹介しました• 本構成がすべてではありません• クラウド上での最適なバッチ構成を考えるきっかけの1つになれば嬉しいです• ジョブ監視・モニタリングは⾒るべきメトリクスを決めた上で丁寧に監視する22
END OFPRESENTATIONご清聴ありがとうございました