はじめに
アメリカ在住のTairaです。
昨日で実務が始まり1週間がたち色々学ぶことが多いと身に沁みて実感し、忘れないうちに記事に起こしておこうと思いました
実は、実務でDB操作する際に踏み台サーバーを使用したのですが、個人開発ではECS Execをつかって操作していたので、若干困惑しました。
なので、この記事では、踏み台サーバー と ECS Exec を 「本番DBを操作するための手段」 という観点に限定して比較します。
対象とするのは、次のようなケースです。
- 障害調査時のデータ確認
- DB の中身を直接確認する作業
- 軽微な本番データ修正
アプリケーションのデプロイ方法や AWS 全体のネットワーク設計といった話題には踏み込みません。
あくまで 「DB操作をどこから行うか」 という点に絞って整理します。
踏み台サーバー(EC2 + Secrets Manager + SSO)
今回の踏み台サーバーは EC2 上に用意されており、 AWS の認証には SSO を利用します。
aws configure ssoaws sso login
を行った上で、DB 接続時に Secrets Manager から認証情報を取得します。
[Developer]
|
| AWS SSO
v
[EC2 (Bastion)]
|
| IAM Role
| + Secrets Manager
v
[Database]
この構成のポイント
- DB のユーザー名・パスワードは EC2 に保存しない
- DB 認証情報は Secrets Manager が管理
- EC2 は DB 操作を行うための踏み台としてのみ利用
- アプリケーション実行環境には影響を与えない
踏み台サーバーは、 本番アプリケーションとは別の場所から DB に直接アクセスして操作するための仕組み として使われます。
DB 操作は基本的に SQL を用いた直接操作 が前提になります。
ECS Exec(DB操作の文脈)
ECS Exec は、 稼働中の ECS タスク(アプリケーションコンテナ)に入る仕組みです。
DB 操作の観点では、 アプリケーションと 同じ実行環境 で操作できる点が特徴です。
[Developer]
|
| AWS SSO / IAM
v
[ECS Task (App Container)]
|
| IAM Role
| + Secrets Manager
v
[Database]
この構成のポイント
- ECS Exec の実行権限は IAM(SSO ログイン前提)
- DB 認証情報は Secrets Manager 管理
- ORM を含め、アプリケーションと同じ環境で DB 操作が可能
- 追加の EC2 は不要
ORM を使ったデータ確認や修正を 本番アプリケーションそのものの環境で行える のが ECS Exec の特徴です。
DB操作という観点での共通点
踏み台サーバー(EC2)と ECS Exec は、 DB 操作という点では次の共通点があります。
- DB 認証情報は Secrets Manager で管理
- AWS の認証は SSO / IAM
- 本番 DB を直接操作する
- 手動操作になりやすい
そのため、 Secrets 管理や AWS 認証の仕組み自体が大きな違いになるわけではありません。
DB操作のやり方としての違い
違いはシンプルで、 「DBをどこから操作するか」 に集約できます。
踏み台サーバー(EC2)
[EC2]
↓
DB
- アプリケーション実行環境とは別の場所から DB を操作
- DB 操作がアプリケーションの実行に影響しにくい
- SQL を使った直接操作が中心
ECS Exec
[App Container]
↓
DB
- アプリケーション実行環境に入って DB を操作
- ORM を使った操作が可能
- 操作内容によってはアプリケーションへの影響を考慮する必要がある
比較表(DB操作の観点のみ)
| 観点 | 踏み台サーバー(EC2) | ECS Exec |
|---|---|---|
| AWS 認証 | SSO / IAM | SSO / IAM |
| Secrets 管理 | Secrets Manager | Secrets Manager |
| DB 操作場所 | アプリとは別の EC2 | アプリコンテナ |
| ORM 利用 | ×(SQL操作) | ◎ |
| アプリへの影響 | 起きにくい | 起きる可能性あり |
| 追加リソース | EC2 が必要 | 不要 |
どう使い分けるか(DB操作視点)
-
アプリケーション実行環境に影響を与えず DB を操作したい
→ 踏み台サーバー(EC2) -
アプリケーションと同じ環境で ORM を使って操作したい
→ ECS Exec
まとめ
- 本記事は DB操作という観点に限定した比較である
- 踏み台サーバーは
アプリケーション実行環境に影響を与えず DB を直接操作する仕組み - ECS Exec は
アプリケーション実行環境に入って DB を操作する仕組み - 違いは「DBをどこから操作するか」