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
Kamalって便利?社内プロジェクト3つを Kamal + AWSで運用した体験談
Search
yappu
September 28, 2025
0
380
Kamalって便利?社内プロジェクト3つを Kamal + AWSで運用した体験談
Kaigi on Rails2025の登壇資料です
yappu
September 28, 2025
Tweet
Share
More Decks by yappu
See All by yappu
3年目プログラマの開発環境 〜入社から今の環境に辿り着くまで〜
yappu0
0
750
Featured
See All Featured
The Cost Of JavaScript in 2023
addyosmani
53
9k
Practical Orchestrator
shlominoach
190
11k
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.9k
Agile that works and the tools we love
rasmusluckow
331
21k
Reflections from 52 weeks, 52 projects
jeffersonlam
352
21k
KATA
mclloyd
32
15k
GitHub's CSS Performance
jonrohan
1032
460k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.5k
The Straight Up "How To Draw Better" Workshop
denniskardys
237
140k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Fireside Chat
paigeccino
40
3.7k
The Language of Interfaces
destraynor
162
25k
Transcript
Kamalって便利? 社内プロジェクト3つを Kamal + AWSで運用した体験談 2025/09/26 @yappu
自己紹介 yappu / 株式会社ソニックガーデン Rails4年目、インフラ1年目 趣味は釣り、Vの推し活、登山
今日話すこと Kamalって何? Kamal + AWSでどのように運用してるのか Kamalで良かったこと、困ったこと まとめ
質問です
Kamal、使ったことあるよ! って方 ✋
Kamal、よく分からない って方 ✋
Kamalって何?
https://kamal-deploy.org/
Webアプリを物理でもクラウドでも どこでもデプロイできるツール
Rails8からデフォルトで入るように https://github.com/rails/rails/pull/51798
Kamalの特徴 どこにでもデプロイできる Dockerベースのデプロイツール yamlファイルでシンプルな設定 ブルーグリーンデプロイ
とにかくシンプル
例えば、setupコマンド
kamal setup Kamalでアプリを初めてデプロイする際に使用する コマンド サーバーの初期設定からデプロイまでを一括で実行
kamal setupの処理フロー 1.サーバー準備 - SSH接続してDockerをインストール 2.イメージ作成 - Dockerfileからビルドしてレジストリにプッシュ 3.デプロイ実行 -
サーバーでイメージをプルして新コンテナを起動 4.トラフィック切替 - kamal-proxyが新コンテナの正常性を確認 後、トラフィックを切り替え 5.クリーンアップ - 旧コンテナを停止し、不要なイメージを削除
None
つまり
サーバーとDockerを動かせる環境を 準備するだけでデプロイできる
とてもシンプル!!
ちなみに...
Kamalの由来 カマルは、船乗りが北極星で緯度を測定し航路 を維持するために使用した古代アラブの航海用 具に由来する名称
アラブ人が使った「カマール」 昔の人達は、GPSなしでどうやって現在位置を割り出していたのか | ログミーBusiness
というわけで本題です。
Kamalを使って 3つの社内プロジェクトを 運用している話
まずは経緯をざっくりと
自分がインフラ担当になって Kamalを採用するまでの経緯
とある日...
インフラ何も分からないな〜 勉強しないとな〜 上司 勉強も兼ねて若手で社内プロジェクト を開発・運用することにしたから インフラ担当を頼んだ! 了解です。頑張ります。 (マジっすか)
数日後...
(任されはしたけど) インフラ何も分からないな〜 勉強しないとな〜 上司 社内プロジェクトをデプロイを できるようにしておいて! 構成は任せるから 了解です。頑張ります。 (マジっすか)
herokuとかrenderとかの お手軽デプロイしか知らないのに、 ど、どうしよう... そういや、Kamalってのがあるらしいな、 ちょっと調べてみるか... 手軽にAWSでデプロイできた!便利かも! これで試してみよう!
という経緯でKamalを採用しました
AWSを使うことにしたのは すぐに試せる環境がAWSだったから です
どんな構成でやってるのか
構成
構成
EC2
複数サーバーにデプロイする場合 deploy.yml
Kamalで 良かったこと、困ったこと
特に困ったこと2つ ALBヘルスチェック問題 複数人開発でのデプロイ問題
ALBヘルスチェック問題
ALBのヘルスチェック 各ターゲットに対しヘルスチェックを定期実行する 1つのインスタンスに1つのヘルスチェック プライベートIPが使われる
なんか失敗する...
Railsまでリクエストが 来てない!
なぜだ...
Kamal Proxyが原因っぽい
Kamal Proxyとは 1.ゼロダウンタイムデプロイのための最小限のHTTPプロキシ 2.外部からのHTTPリクエストを適切なコンテナにルーティング 3.自動SSL機能 4.ヘルスチェック機能
Kamal Proxyとは 1.ゼロダウンタイムデプロイのための最小限のHTTPプロキシ 2.外部からのHTTPリクエストを適切なコンテナにルーティング 3.自動SSL機能 4.ヘルスチェック機能
詳しく調査
EC2の中のKamal Proxyを調査
ここで止まってそう!
Kamal Proxyは どうやってリクエストを 各コンテナに振り分けているのか
Kamal Proxyのリクエストの振り分け リクエストのホスト名を元にどのコンテナに リクエストを転送するか決めている
なるほど 💡
ALBのヘルスチェックは プライベートIPなので、Kamalが リクエストを振り分けできない
None
解決策
解決策 1つのアプリでプライベートIPを受け付ける ように設定した!
None
解決 🎉
複数人開発でのデプロイ問題
構築初期の頃は自動デプロイを 作っていなかった
デプロイのたびに 連絡してもらっていた
デプロイしました〜 開発 メンバ デプロイお願いしますー 開発 メンバ 不具合あったので修正しました。 もう一度お願いします。 デプロイしました〜
めんどい!
なぜこうなったのか
kamal deployコマンド ローカルPCからサーバーにSSH接続できる 公開鍵、秘密鍵が必要 ECRにdockerイメージをプッシュする ローカルPCからECRにプッシュする権限が必要 デプロイする人を増やすたびにキーを発行するか、 共有する必要がある kamalでデプロイする時
簡単に増やしたくない
ということで自動デプロイを 作ることにしました
構成
CodePipeline
解決 🎉
困ったことを話しましたが
Kamal、いいところもある
自動SSL対応 SSLをtrueにするだけ Let's Encrypt + Goのautocert サイトにアクセス => 証明書チェック =>
期限切れ を検出 → 新証明書取得開始
データメンテ、デバッグが楽 エイリアスが設定できてすぐにサーバーでコマンド実行できる kamal console kamal shell kamal logs
環境を分けてデプロイも簡単 ファイルを分けたらいいだけ deploy.yml deploy.staging.yml deploy.production.yml 環境ごとのデプロイ kamal deploy -d staging
kamal deploy -d production
loggingに設定を書くだけ Amazon CloudWatch Logsの設定例 Dockerのログ収集の設定も簡単
他にもいろいろありますが、 設定がシンプルで簡単!
サーバーとDockerを動かせる環境を準備するだ けでデプロイできる 設定がシンプルで簡単 Kamal ProxyとALBの組み合わせは若干苦戦する 複数人開発のデプロイには気をつけて それを踏まえてもメリットたくさん まとめ
以上です! ありがとうございました! 😊