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. AWS Batch × Spring Batch で
    クラウド最適なバッチを構築
    した話
    2022/06/19 JJUG CCC 2022 Spring

    View Slide

  2. ⾃⼰紹介
    猪熊 朔也 ( いのくま さくや )
    - 株式会社 Red Frasco
    - インフラエンジニア
    u経歴
    ⾦融系SIer -> リクルート -> ⾦融系スタートアップ -> Red Frasco
    uその他コメント
    - うどんが好きです
    - うどん脳 をプロフィールアイコンにすることが多いです
    - 最初4年くらいは Java エンジニア
    - ここ5年くらいはインフラ・クラウド⼀⾊
    2

    View Slide

  3. はじめに
    • 本セッションでは、Spring Batch を AWS 上で稼働させる場合の
    バッチ構成について話します
    • Spring Batch よりも AWS(AWS Batch 等)に関する話題が中⼼とな
    りますのでご了承ください
    • おそらくこんな⼈におすすめなセッションです
    • Java開発経験はあるけど、クラウド(AWSなど)経験はない
    • 同じようなバッチ基盤をクラウド(AWSなど)上に構築しようとしている
    • クラウド(AWSなど)を最近利⽤し始めた
    3

    View Slide

  4. ⽬次
    バッチ基盤を構築する背景
    AWS Batch × Spring Batch 構成の紹介
    バッチ設計・構築にあたっての考慮ポイント
    まとめ

    View Slide

  5. 5
    バッチ基盤を構築する背景

    View Slide

  6. 物件情報がポータルサイトに掲載されるまでの流れ
    6
    不動産会社
    担当者
    物件情報⼊⼒ 物件情報変換 物件情報表⽰
    物件管理
    システム
    データ
    連動
    物件データ
    画像データ
    他システム 物件データ
    画像データ
    ⼿⼊⼒
    コンバータ
    各種ポータルサイト
    データ
    連動





    ⾃社ポータル
    総合ポータル S
    総合ポータル H
    総合ポータル A
    データ
    連動
    データ
    連動
    データ
    連動
    カスタマー
    物件探し
    ⼿⼊⼒またはシステム連携によって
    物件情報を管理システムに登録する
    登録された物件情報を各種ポータルサイトの
    仕様に沿ったデータ形式に変換する
    物件情報がポータルサイトに掲載される
    今回はここの話

    View Slide

  7. バッチ処理の必要性
    • 物件情報は、複数のシステムから連動され、複数のポータルサイト
    に掲載される。
    • 連動元︓⾃社システム、外部SaaS、業者間流通システム(※)など
    • 連動先︓総合ポータルサイト、⾃社ポータルサイト
    • 物件情報は、⽇次でまとめて連携される。
    7
    ※業者間流通システム︓様々な不動産管理会社の物件情報をポータルサイトに掲載するためのシステム
    バッチ処理によって、複数のデータ連動処理を効率よく⾏う必要がある

    View Slide

  8. 8
    AWS Batch × Spring Batch 構成の紹介

    View Slide

  9. 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送信
    モジュール
    ポータルサイト
    物件情報受信バッチ
    物件情報送信バッチ

    View Slide

  10. なぜ Spring Batch を選定したのか - SoE と SoR
    10
    不動産会社
    担当者
    物件管理
    システム
    データ
    連動
    物件データ
    画像データ
    他システム 物件データ
    画像データ
    ⼿⼊⼒
    コンバータ
    各種ポータルサイト
    データ
    連動





    ⾃社ポータル
    総合ポータル S
    総合ポータル H
    総合ポータル A
    データ
    連動
    データ
    連動
    データ
    連動
    カスタマー
    物件探し
    SoR
    安定稼働
    SoE
    スピード

    View Slide

  11. なぜ Spring Batch を選定したのか - 特性に応じた⾔語選定
    11
    不動産会社
    担当者
    物件管理
    システム
    データ
    連動
    物件データ
    画像データ
    他システム 物件データ
    画像データ
    ⼿⼊⼒
    コンバータ
    各種ポータルサイト
    データ
    連動





    ⾃社ポータル
    総合ポータル S
    総合ポータル H
    総合ポータル A
    データ
    連動
    データ
    連動
    データ
    連動
    カスタマー
    物件探し
    SoR
    安定稼働
    SoE
    スピード
    しっかり・かっちりしたシステムを Java で構築する

    View Slide

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

    View Slide

  13. 13
    バッチ設計・構築にあたっての考慮ポイント

    View Slide

  14. 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送信
    モジュール
    ポータルサイト
    物件情報受信バッチ
    物件情報送信バッチ

    View Slide

  15. Step Functions でバッチ処理を柔軟に制御する
    15
    • Step Functions と組み合わせて、バッチジョブをワークフロー化
    • ジョブステータスによるフロー制御
    • タイムアウト / 異常終了したらエラー通知
    • リトライ設定によるジョブの安定性・回復性
    • タイムアウト / 異常終了したら、少なくとも1回は⾃動でリトライする
    • ジョブ構成変更に対する柔軟性
    • 前処理 / 後処理を追加する
    • ジョブを分割する、統合する

    View Slide

  16. 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
    基本⽅針を決めつつ、個別要件に応じて適宜調整

    View Slide

  17. バッチのリトライ設計
    • AWS Batch , Step Functions によるリトライを基本とし、Spring Batch で
    のリトライは必要に応じて検討
    • マネージドサービスによる恩恵を最⼤限活⽤する
    • リトライポリシーを設定して、⾃動でリトライさせる
    • AWSマネージドコンソールや、AWS CLI で⼿動リトライをすることも可能
    • ⾃動リトライのみを前提にしない
    • 何回リトライしても必ず失敗するケースを考慮する
    • ⼊⼒データの不備、アプリケーションの不具合 など
    • イレギュラー対応に柔軟に対応できるよう⼿動リトライの余地を残す
    • データ連携が遅延したため、実⾏時刻をずらす など
    17

    View Slide

  18. リトライを含めたバッチジョブフローの例
    18
    • 店舗単位のリトライ
    • 物件情報は店舗ごとに連携される
    • 処理が失敗した店舗のみリトライ
    • 全店舗分のリトライ
    • Step Functions 全体のリトライ
    • 業務ロジックで、Step Function を再度呼び出

    • ⼿動でのリトライ
    • Step Functions のリトライ
    • 失敗したジョブのみリトライ
    ⾃動と⼿動のバランスをとりながら、バッチの安定性を⾼める

    View Slide

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

    View Slide

  20. バッチジョブの実⾏監視例 (Datadog)
    20
    • バッチが実⾏されたら 1 を⽴てて、メトリクスが 0 の場合はアラート
    • ログ監視だけでは、失敗は検知できても実⾏されていないことは検知できないケースがある

    View Slide

  21. 21
    まとめ

    View Slide

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

    View Slide

  23. END OF
    PRESENTATION
    ご清聴ありがとうございました

    View Slide