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
ECSとEFSを組み合わせた Batchサーバー デプロイ方法の模索
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Konishi tatsuhiro
November 07, 2025
63
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ECSとEFSを組み合わせた Batchサーバー デプロイ方法の模索
JAWS-UGコンテナ支部 x ストレージ支部コラボ会 の発表資料です。
https://storage-jaws.connpass.com/event/371127/
Konishi tatsuhiro
November 07, 2025
More Decks by Konishi tatsuhiro
See All by Konishi tatsuhiro
アラート疲れからの脱却 - リソースタグで仕分けるSlack通知戦略
tatsukoni
1
78
少人数SREチームが、長寿なシステムを構築・運用するための取り組み
tatsukoni
0
8
レガシー共有バッチ基盤への挑戦 - SREドリブンなリアーキテクチャリングの取り組み
tatsukoni
0
420
コンテナイメージ脆弱性検知の実践事例 ~ 基礎から応用まで ~
tatsukoni
0
56
コンテナイメージを複数のチームで扱うための、ビルドフローの構築・運用
tatsukoni
0
160
休日・夜間のインスタンス自動停止をSREチームで運用してみた
tatsukoni
0
32
手付かずだったSecurity Hub運用を改善した話
tatsukoni
0
39
Featured
See All Featured
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
The Curious Case for Waylosing
cassininazir
1
380
Faster Mobile Websites
deanohume
310
31k
ラッコキーワード サービス紹介資料
rakko
1
3.6M
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
1
180
Between Models and Reality
mayunak
4
330
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
120k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
170
Embracing the Ebb and Flow
colly
88
5.1k
AI: The stuff that nobody shows you
jnunemaker
PRO
8
710
Transcript
ECSとEFSを組み合わせた Batchサーバー デプロイ方法の模索 2025年11月07日 株式会社コドモン 小西達大 JAWS-UGコンテナ支部 x ストレージ支部コラボ会
2 経歴 1996年生まれ。 前職でアプリケーションエンジニアとして従事後、株式会社コドモン のSREチームに昨年ジョイン。 自己紹介 小西 達大 こにし たつひろ
3 目次 ECS × EFS に取り組むことになった発端 課題解決のための構成模索 具体的な実装例 まとめ 1
2 3 4
4 ECS × EFS に取り組むことになった発端 課題解決のための構成模索 具体的な実装例 まとめ 1 2
3 4
5 CONFIDENTIAL - © 2022 CoDMON Inc. 5 コンテナ化(EC2 →
ECS)の取り組み • 各アプリケーションのコンテナ化(EC2 → ECS)を推進し、インフラ / デプ ロイ構成の標準化により認知負荷 / 運用負荷の改善を図っている • EC2で動くものはバッチサーバー1つに...!
6 CONFIDENTIAL - © 2022 CoDMON Inc. 6 Batch サーバーの特性
• cron経由で、最短1分間隔で動く処理が多く存在している ◦ ほぼリアルタイムで動くことが求められる • 各バッチ処理が実行途中で中断されることは許容されない ◦ アプリケーション側で、Graceful Shutdown に対応していない ◦ サービス的に重要な処理が動いている
7 CONFIDENTIAL - © 2022 CoDMON Inc. 7 Batch EC2
→ ECS化 したいが... • cron経由で、最短1分間隔で動く処理が多く存在している ◦ EventBridge → ECS RunTask 方式だと、タスク起動時間が問題になる ◦ 1つのECS Taskの中でcronを動かせば良いのでは?
8 CONFIDENTIAL - © 2022 CoDMON Inc. 8 Batch EC2
→ ECS化 したいが... • 各バッチ処理が実行途中で中断されることは許容されない ◦ デプロイ時に新旧タスクの入れ替えが発生 ◦ 旧Taskで実行中だった処理は中断されるので、要件を満たせない...
9 ECS × EFS に取り組むことになった発端 課題解決のための構成模索 具体的な実装例 まとめ 1 2
3 4
10 CONFIDENTIAL - © 2022 CoDMON Inc. 10 解決したい課題 •
[要件] デプロイ時に、旧タスク側で実行中だった処理が中断されないこと ◦ [認知負荷軽減] なるべく作り込みの少ないシンプルな方法で解決したい ◦ [運用負荷軽減] 手作業での運用は極力減らしたい
11 CONFIDENTIAL - © 2022 CoDMON Inc. 11 課題解決のための構成模索 •
EC2の場合、デプロイのタイミングで「Ansible経由でgit pull(& 各種デプ ロイコマンド実行)」という方法をとっており、実行中の処理には影響を及 ぼさなかった
12 CONFIDENTIAL - © 2022 CoDMON Inc. 12 課題解決のための構成模索 •
ECSで同じ方式をとることもできなくはないが... ・ECS Task停止時にコードが失われることへ の考慮 ・稼働中のコンテナに対して、各種デプロイ コマンドを実行する必要あり ・イミュータブルインフラストラクチャを保 てない
13 CONFIDENTIAL - © 2022 CoDMON Inc. 13 課題解決のための構成模索 •
ECS × EFS を組み合わせることで、上手くできそう! ・ECS Task停止時にコードが失われることへの考慮 → コードをEFSに外出し(永続化)することで解消 ・稼働中のコンテナに対して、各種デプロイコマン ドを実行する必要あり → コード更新用Taskを介することで解消 ・イミュータブルインフラストラクチャを保てない → 工夫次第で回避可能?(後述)
14 ECS × EFS に取り組むことになった発端 課題解決のための構成模索 具体的な実装例 まとめ 1 2
3 4
15 CONFIDENTIAL - © 2022 CoDMON Inc. 15 実装例 •
ミドルウェアはDockerfileで宣言的に定義 & コンテ ナイメージに梱包 • 日常のデプロイで更新したいファイル(アプリケー ションコード / crontab)はEFSに配置 & ECSにマウ ント { "containerDefinitions": [ { "mountPoints": [ { "sourceVolume": "src-volume", "containerPath": "/var/www/src" }, { "sourceVolume": "crontab-volume", "containerPath": "/var/spool/cron/crontabs" } ] } ], "volumes": [ { "name": "src-volume", "efsVolumeConfiguration": { "fileSystemId": "fs-xxxxxxxxxx", "rootDirectory": "/var/www/src" } }, { "name": "cron-volume", "efsVolumeConfiguration": { "fileSystemId": "fs-xxxxxxxxxx", "rootDirectory": "/var/spool/cron/crontabs" } } ] }
16 CONFIDENTIAL - © 2022 CoDMON Inc. 16 実装例 -
デプロイ時 • デプロイ時にコード更新用の一時Taskを起動し、各 種デプロイコマンドを実行してEFSを更新 • 実行中の処理はそのままで、処理実行側Taskのコー ドは自動更新される。 { "containerDefinitions": [ { "entryPoint": [ "bash", "/root/entrypoint/deploy.sh" ], "mountPoints": [ { "sourceVolume": "efs-volume", "containerPath": "/mnt/efs" } ] } ], "volumes": [ { "name": "efs-volume", "efsVolumeConfiguration": { "fileSystemId": fs-xxxxxxxxxx", "rootDirectory": "/" } } ] }
17 CONFIDENTIAL - © 2022 CoDMON Inc. 17 実装例 -
イミュータブル性を考慮 • デプロイ時にBuild & Push • 更新したコンテナイメージから一時タスクを起動 • 日常のデプロイで更新したいファイル(アプリケーションコード / crontab) をrsyncしてEFSに配置
18 CONFIDENTIAL - © 2022 CoDMON Inc. 18 実装例 -
イミュータブル性を考慮 Pros ・コンテナイメージ:コンテナの中身 を一致させられる(イ ミュータブル性の確保) Cons ・コンテナイメージ作成時に各ファイルのタイムスタンプが 更新されるので、単純にrsyncするとデプロイのたびに大量の ファイルが更新される ・チェックサムの比較で更新するようにする(rsync -c)こと で回避可能だが、同期に時間がかかり、処理によってファイ ルが異なる懸念あり ・シンボリックリンク切替方式 等を利用すれば回避可能だ が、構成が煩雑になる
19 CONFIDENTIAL - © 2022 CoDMON Inc. 19 運用時の考慮点1(Fargateの場合) •
処理実行側Taskが起動しっぱなしだと、AWS Fargate基盤インフラストラク チャの更新により、予期しないタイミングでTask停止が発生する懸念がある • 影響のない時間帯(夜間等)で、定期的にTaskの再起動(ECS Service 強制デ プロイ)を実施する運用が必要
20 CONFIDENTIAL - © 2022 CoDMON Inc. 20 運用時の考慮点2 •
Dockerfile管理下を変更したい場合は、処理実行側Taskのコンテナイメージ自 体を差し替える必要があるため、何らかの手段が必要(↓一例)
21 ECS × EFS に取り組むことになった発端 課題解決のための構成模索 具体的な実装例 まとめ 1 2
3 4
22 CONFIDENTIAL - © 2022 CoDMON Inc. 22 アーキテクチャ評価 •
[要件] デプロイ時に、旧タスク側で実行中だった処理が中断されないこと ◦ [認知負荷軽減] なるべく作り込みの少ないシンプルな方法で解決したい ◦ [運用負荷軽減] 手作業での運用は極力減らしたい 評価 備考 要件 ⚪ デプロイ時に、旧タスク側で実行中だった処理は中断されない 認知負荷 △ イミュータブル性を確保しなければ構成は比較的シンプル イミュータブル性を確保したい場合は複雑になりそう コンテナイメージ差し替え時の考慮で一定作り込みが発生 運用負荷 ⚪ 各工程の自動化は達成できている
23 CONFIDENTIAL - © 2022 CoDMON Inc. 23 まとめ •
厳密なイミュータブル性を求めない(ECS化できれば恩恵を得られる)場合 は、ECS × EFS の組み合わせによって、比較的シンプルな構成でバッチサー バーのデプロイ要件を満たせる可能性がある • 厳密なイミュータブル性が求められる場合は、他構成の方がシンプルに実現 できるかも • EventBridge → ECS Task 起動 という構成が可能な場合は、そちらの方が 良い
None