投稿日:2026/10/21
更新日:2026/10/21

監視の設計書に「サイドカーは使わない」と書いてあり、サイドカーとは何か、なぜ使わないのかを整理したメモ。
サイドカーは「アプリの横に補助コンテナを1つずつ付ける」構成で、補助の仕事を1か所にまとめる「共有サービス構成」と比べると使い分けが分かりやすい。
localhost で話せて障害もタスク内で閉じる代わりに、台数・更新・認証情報・リソースがアプリと一緒に増える本体のアプリと同じ実行単位の中に、一緒に起動させる補助用のコンテナのこと。名前は、バイクの横に取り付ける側車(サイドカー)から来ている。
アプリのコードを変えずに、周辺の仕事を横のコンテナに任せるために使う。
| やらせる仕事 | 代表的なソフトウェア |
|---|---|
| ログを集めて外部へ送る | Fluent Bit |
| トレースやメトリクスを中継して送る | OpenTelemetry Collector |
| 通信の中継・暗号化・再試行 | Envoy(サービスメッシュ) |
localhost で通信できるタスクごとにサイドカーが付き、それぞれが送信先へ送る。
flowchart LR
subgraph T1["タスク1"]
A1["アプリ"] -->|localhost| S1["サイドカー"]
end
subgraph T2["タスク2"]
A2["アプリ"] -->|localhost| S2["サイドカー"]
end
S1 --> Dest["送信先"]
S2 --> Dest
補助の仕事をする Collector を独立したサービスとして1つにまとめ、各タスクのアプリはそこへ送る。
flowchart LR
subgraph T1["タスク1"]
A1["アプリ"]
end
subgraph T2["タスク2"]
A2["アプリ"]
end
A1 --> C["共有 Collector<br/>(独立したサービス)"]
A2 --> C
C --> Dest["送信先"]
| サイドカー構成 | 共有サービス構成 | |
|---|---|---|
| 置き場所 | アプリと同じタスクの中 | アプリとは別の独立したサービス |
| アプリからの送り先 | localhost |
タスクの外にある Collector |
| 台数 | アプリと同じ数(10 タスクなら 10 個) | アプリとは別に増減できる |
| 更新 | アプリのデプロイと一緒 | アプリのデプロイと切り離せる |
| 送信先の認証情報 | 各アプリのタスクに持たせる | Collector だけが持つ |
| CPU・メモリ | アプリの台数分だけ複製される | 1 か所にまとまる |
| 障害の影響 | タスクの中で閉じる | Collector が落ちると、送っている全サービスに及ぶ |
タスクの中で完結させる理由(タスク内でのログ収集、
localhost以外への送信禁止など)がなければ、共有サービス構成の方が更新・権限・リソースの面で扱いやすい。
あるサービスの監視の設計書では、トレースを送る OpenTelemetry Collector を各タスクに置かず、独立した ECS サービスとして1つにまとめる構成(上の共有サービス構成)を選んでいた。
設計書には、次のような要件が出てきたらサイドカーを検討し直す、とも書かれていた。
localhost 以外への送信を禁止したいいずれも「タスクの中で完結させたい」要件で、共有サービス構成では満たせないものになっている。
localhost が使えるのは awsvpc ネットワークモードのとき同じタスクのコンテナ同士が localhost で通信できるのは、タスク定義の networkMode が awsvpc のとき。Fargate は awsvpc が必須なので、Fargate なら常に使える。
EC2 上の bridge モードでは、同じタスクのコンテナ同士をつなぐのに links(bridge モード専用の設定)を使う。
essential 次第essential: true のコンテナが止まると、タスク内の他のコンテナもすべて止まる。essential: false のコンテナが止まっても、他のコンテナには影響しない。省略すると true 扱いになる。
サイドカーが落ちたときにアプリまで止めたいかどうかで、サイドカー側の essential を決める。
initContainers に書くKubernetes では、restartPolicy: Always を付けた initContainers の要素がサイドカーになる(v1.28 で導入、v1.33 で Stable)。
停止するときは、本体のコンテナが完全に止まるまでサイドカーの停止を待つので、本体より先にサイドカーが止まることはない。
use-sidecar は別物npm に use-sidecar という React 向けのパッケージがあり、lockfile を検索すると引っかかることがある。名前が同じだけで、ここで説明したコンテナの構成とは関係ない。