Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
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
1.9k
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
250
SSRした動的コンテンツをFastlyにキャッシュする
dkakinoki
0
1.1k
CtoCマーケットプレイスを成長させる オンライン決済の仕組み
dkakinoki
1
850
[Stripe] ConnectのManual Payoutsを利用して 任意のタイミングで売上を入金する
dkakinoki
0
3.4k
Other Decks in Programming
See All in Programming
Advanced Micro Frontends: Multi Version/ Framework Scenarios
manfredsteyer
PRO
0
120
PHPカンファレンス関西2025 基調講演
sugimotokei
6
1k
知って得する@cloudflare_vite-pluginのあれこれ
chimame
1
130
[Codecon - 2025] Como não odiar seus testes
camilacampos
0
100
副作用と戦う PHP リファクタリング ─ ドメインイベントでビジネスロジックを解きほぐす
kajitack
3
500
MCPで実現できる、Webサービス利用体験について
syumai
7
2.2k
バイブスあるコーディングで ~PHP~ 便利ツールをつくるプラクティス
uzulla
1
300
202507_ADKで始めるエージェント開発の基本 〜デモを通じて紹介〜(奥田りさ)The Basics of Agent Development with ADK — A Demo-Focused Introduction
risatube
PRO
5
1.3k
No Install CMS戦略 〜 5年先を見据えたフロントエンド開発を考える / no_install_cms
rdlabo
0
400
フロントエンドのパフォーマンスチューニング
koukimiura
6
2.3k
AIコーディングエージェント全社導入とセキュリティ対策
hikaruegashira
15
8.8k
はじめてのWeb API体験 ー 飲食店検索アプリを作ろうー
akinko_0915
0
180
Featured
See All Featured
A better future with KSS
kneath
238
17k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
47
9.6k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.3k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
331
22k
Thoughts on Productivity
jonyablonski
69
4.8k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Docker and Python
trallard
45
3.5k
A designer walks into a library…
pauljervisheath
207
24k
Git: the NoSQL Database
bkeepers
PRO
431
65k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.8k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.9k
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 当日どんな話が聞けるのか?
ご静聴ありがとうございました。