$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Railsでサーバレスなバッチ処理 / Rails Batch Serverless
Search
Daishi Kakinoki
June 19, 2019
Programming
1
2k
Railsでサーバレスなバッチ処理 / Rails Batch Serverless
https://shuuu-mai.connpass.com/event/132249/
の登壇時の資料です。
Daishi Kakinoki
June 19, 2019
Tweet
Share
More Decks by Daishi Kakinoki
See All by Daishi Kakinoki
Spacemarket Connect Custom Account
dkakinoki
0
260
SSRした動的コンテンツをFastlyにキャッシュする
dkakinoki
0
1.2k
CtoCマーケットプレイスを成長させる オンライン決済の仕組み
dkakinoki
1
890
[Stripe] ConnectのManual Payoutsを利用して 任意のタイミングで売上を入金する
dkakinoki
0
3.4k
Other Decks in Programming
See All in Programming
AIエンジニアリングのご紹介 / Introduction to AI Engineering
rkaga
5
2k
手が足りない!兼業データエンジニアに必要だったアーキテクチャと立ち回り
zinkosuke
0
630
AIの誤りが許されない業務システムにおいて“信頼されるAI” を目指す / building-trusted-ai-systems
yuya4
6
2.8k
Giselleで作るAI QAアシスタント 〜 Pull Requestレビューに継続的QAを
codenote
0
130
Context is King? 〜Verifiability時代とコンテキスト設計 / Beyond "Context is King"
rkaga
9
1.1k
モデル駆動設計をやってみようワークショップ開催報告(Modeling Forum2025) / model driven design workshop report
haru860
0
260
WebRTC、 綺麗に見るか滑らかに見るか
sublimer
1
160
【Streamlit x Snowflake】データ基盤からアプリ開発・AI活用まで、すべてをSnowflake内で実現
ayumu_yamaguchi
1
120
30分でDoctrineの仕組みと使い方を完全にマスターする / phpconkagawa 2025 Doctrine
ttskch
3
810
新卒エンジニアのプルリクエスト with AI駆動
fukunaga2025
0
200
非同期処理の迷宮を抜ける: 初学者がつまづく構造的な原因
pd1xx
1
700
認証・認可の基本を学ぼう後編
kouyuume
0
180
Featured
See All Featured
Site-Speed That Sticks
csswizardry
13
990
A Tale of Four Properties
chriscoyier
162
23k
Product Roadmaps are Hard
iamctodd
PRO
55
12k
Statistics for Hackers
jakevdp
799
230k
The Cost Of JavaScript in 2023
addyosmani
55
9.3k
Being A Developer After 40
akosma
91
590k
Producing Creativity
orderedlist
PRO
348
40k
Thoughts on Productivity
jonyablonski
73
5k
The World Runs on Bad Software
bkeepers
PRO
72
12k
[SF Ruby Conf 2025] Rails X
palkan
0
500
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
37
2.6k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Transcript
Railsでサーバレスなバッチ処理 2019/06/19 kakinoki AWS Batch × Aurora Serverlessを使った事例
2 誰? • 柿木 太志(@d_kakinoki) • SPACEMARKET所属 • Engineering Manager
• サーバサイドがメイン
3 3
写真
写真
写真
7 7
8 Railsでサーバレスなバッチ処理
9 背景 • 検索用のスコアデータを生成するバッチ処理を作成した時の話 • 「検索スコアの元になるデータ(raw data)」と「検索スコアのデータ」を生成して 登録したい • ActiveRecord使いたい
• 肥大化するインフラのコストをなるべく抑えたい
10 要件 • バッチの実行回数はそれほど多くない → 常時サーバを起動しない構成にしたい • 初期のモノリスのAPIにrakeタスクが多くあり、肥大化している → シンプルに切り出したい
• 3つのタスクがあり、2つめ以降は前のタスクが完了している必要がある →ジョブチェーンする アプリケーション
11 要件 • raw dataはバッチ処理や分析の時のみ利用したく、その他は不要 • とはいえ、ファイルだとデータ損失が不安だし分析もしづらいので、データベー ス使いたい → 必要に応じて利用可能なデータベース
データ
12 構成
13 構成 この点線の中からはみ出ないように 文字、写真を配置してください
14 処理の流れ
15 処理の流れ① この点線の中からはみ出ないように 文字、写真を配置してください ① cronでjobの起動
16 処理の流れ② この点線の中からはみ出ないように 文字、写真を配置してください ② インスタンスの起動
17 処理の流れ③ この点線の中からはみ出ないように 文字、写真を配置してください ③ イメージの取得
18 処理の流れ④ この点線の中からはみ出ないように 文字、写真を配置してください ④ ジョブ(rake task)の実行 / Aurora Servelessの起動
19 処理の流れ⑤ この点線の中からはみ出ないように 文字、写真を配置してください ⑤ ジョブの実行結果をトリガする
20 処理の流れ⑥ この点線の中からはみ出ないように 文字、写真を配置してください ⑥ 次のjobを起動(繰り返し)
21 処理の流れ⑦ この点線の中からはみ出ないように 文字、写真を配置してください ⑦ 各インスタンスの削除 / Aurora Serverlessの停止
22 ジョブが失敗した場合 この点線の中からはみ出ないように 文字、写真を配置してください ジョブの実行結果をトリガして、メール 通知
23 設定周り
24 基本設定 AWS 公式ガイドや各記事に詳細があるので割愛
25 AWS BatchのCron起動
26 AWS Batchのジョブチェーン
27 Aurora Serverlessの起動時間を考慮 • rakeタスクが実行されるとDB接続が発生し、DBが起動する。 • タイムアウト時間が短いとrake タスクが失敗するのでdatabase.ymlのtimeout を少し長めに設定するようにした。
28 InnoDBインデックスの最大キー長を考慮 • 絵文字に対応するため文字コードは utf8mb4を使用している。 • utf8mb4の場合は1文字あたり最大で 4バイト使用する。 • 単一カラムインデックスの最大キー長は
767バイトまで作成可能。 • RDS(MySQL)やAuroraでは3072バイトまで拡張可能だが、 Aurora Serverlessでは拡張に必要なパラ メータのinnodb_large_prefixを有効にできない。 • 結果的にRailsデフォルトのstring(varchar)255文字でカラムを作成しようとすると、 255 x 4 = 1020(>767)でカラム作成時にエラーになる。 • stringでカラムを作る時には文字数をきちんと絞る必要があり、今回は要件的に問題なかった。
29 コスト比較
30 ざっくりとした比較 従来 (常時起動) 今回 (実績) データベース (例)Aurora t3.small: 約5,000円/month
t3.medium: 約10,000円/month 約1800円/month( 約½ ~ ¼ ) アプリケーション (バッチ) (例) c5.large: 約8,500円 約1500円/month( ⅕ 以下 ) ※ インスタンス利用費のみの比較 ※ AWS Batchのコンピューティング環境は optimalにすると、C、M、Rいずれかのタイプが 使われる (インスタンスタイプを指定することも可能 ) ※ ちなみに、AWS Batchの利用自体は無料
31 まとめ
32 まとめ • 今回のテーマが「Rails × ◦◦」ということだったが、ほぼ◦◦部分のサーバレスな バッチ処理の話をした。 • AWS Batch
× Aurora Serverless で構築した。 • コストも安価に構築できた。
33 告知:勉強会やります! https://event.spacemarket.com/events/spacemarket_meetup ※ または、connpassで「スペースマーケット」で検索してください。 7/4(木) 19:30 ~ @新宿
34 当日どんな話が聞けるのか?
ご静聴ありがとうございました。