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サーバー デプロイ方法の模索 / Exploring ...
Search
コドモン開発チーム
November 10, 2025
160
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ECSとEFSを組み合わせた Batchサーバー デプロイ方法の模索 / Exploring deployment methods for a Batch server using ECS and EFS
コドモン開発チーム
November 10, 2025
More Decks by コドモン開発チーム
See All by コドモン開発チーム
アラート疲れからの脱却 - リソースタグで仕分けるSlack通知戦略 / Breaking Free from Alert Fatigue – A Slack Notification Strategy Using Resource Tags for Routing
codmoninc
0
28
SREに優しいTerraform構成 modulesとstateの組み方 / terraform-modules-state-for-sre
codmoninc
0
340
モノリスなプロダクトの「ほどよい」リプレイス戦略 / A "Just Right" Replacement Strategy for Monolithic Products
codmoninc
0
120
Don't Just Patch — MOTTAINAI! Learn Security from Laravel CVE Diffs
codmoninc
0
240
ソースコードで比較する React / Vue / Svelte の セキュリティ設計思想 / security design philosophy react vue svelte
codmoninc
5
640
少人数SREチームが、長寿なシステムを構築・運用するための取り組み / Efforts by a Small SRE Team to Build and Operate Long-Lived Systems
codmoninc
0
330
フルリモートのその先へ〜パパね、いつも家にいるけどちゃんとこうして働いてるよ〜 / Beyond Full Remote
codmoninc
0
650
多様な働き方を支えるチーム開発カルチャーと 今後の展望 / Team Development Culture Supporting Diverse Workstyles and Future Outlook
codmoninc
0
550
ペアプロ未経験・未知のスキル領域・フルリモートからでも挑戦できる? 40代転職者の実態 / pair-programming-remote-career-change
codmoninc
0
560
Featured
See All Featured
Making the Leap to Tech Lead
cromwellryan
135
10k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
200
The agentic SEO stack - context over prompts
schlessera
0
840
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
640
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
370
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.6k
Raft: Consensus for Rubyists
vanstee
141
7.6k
Skip the Path - Find Your Career Trail
mkilby
1
160
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
350
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