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
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
Six Lessons from altMBA
skipperchong
29
4.3k
The Limits of Empathy - UXLibs8
cassininazir
1
350
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
400
Google's AI Overviews - The New Search
badams
0
1k
Crafting Experiences
bethany
1
180
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
480
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.8k
GitHub's CSS Performance
jonrohan
1033
470k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
160
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.3k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
160
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
300
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