はじめに
こんにちは。アメリカ在住で独学エンジニアを目指している Taira です。
本日は ECR について記事を書いていきたいと思います。
ECS 同様、AWS で CD を考えている方は必ず知っておく必要がある内容です。
ECR とは
ECR(Elastic Container Registry)は、AWS が提供するプライベートな Docker イメージレジストリです。
特徴
- Docker Hub の AWS 版のようなもの
- IAM と統合されていてセキュリティが高い
- ECS や EKS と連携しやすい
- VPC 内通信や VPC エンドポイントにも対応
Fargate × ECR:基本的に NAT Gateway が必要
Fargate は完全マネージドな実行基盤で、通常はプライベートサブネット内で動きます。
しかし、ECR から Docker イメージを pull するにはインターネットアクセスが必要です。
🔻 よって構成上、次のいずれかが必要:
方法説明 | |
---|---|
✅ NAT Gateway | プライベートサブネットのタスクがインターネットに出られるようにする |
✅ VPC エンドポイント(推奨) | NAT Gateway の代替。ECR への通信を VPC 内で完結させる |
VPC エンドポイントに必要なサービス:
com.amazonaws.<region>.ecr.api
com.amazonaws.<region>.ecr.dkr
-
com.amazonaws.<region>.s3
(ECR のイメージ実体は S3)
💡 ポイント:
NAT Gateway は料金がかかるため、個人開発や学習用途では VPC エンドポイントを使う方が安く済みます。
🖥 ECS on EC2 × ECR:NAT Gateway なしでも使える
ECS on EC2 では、EC2 インスタンスにパブリック IP を付けることで、NAT Gateway なしでもイメージを pull できます。
✅ 条件
- EC2 がパブリックサブネットに存在
- インターネットゲートウェイ経由で外部通信できる
-
docker login
で ECR に認証済みであること
🔒 ECR を使うメリットまとめ
たとえ NAT Gateway の有無に関係なく、ECR は以下の理由でおすすめです:
メリット説明 | |
---|---|
🔐 IAM によるアクセス制御 | 特定のユーザーやロールだけに pull/push を許可可能 |
🚀 ECS/Fargate との親和性 |
image: に ARN を書くことでシームレスに連携できる |
⏱ pull 制限なし | Docker Hub の「匿名 100 回/6 時間制限」を気にしなくて OK |
🌎 高速通信 | 同じリージョン内の ECR なら通信速度が安定 |
🔁 CI/CD との統合 | GitHub Actions などからの push も容易に構成可能 |
✅ 構成まとめ表
項目 FargateECS on EC2 | ||
---|---|---|
NAT Gateway 必要? | ✅ 基本必要(または VPC エンドポイント) | ❌ 不要(パブリック IP ありなら) |
VPC エンドポイント対応 | ✅ 必須級 | ❌ 基本不要 |
イメージ pull の起点 | タスク(内部的に Fargate) | EC2 インスタンス上の Docker |
ECR 使用の推奨度 | ⭐⭐⭐⭐☆ | ⭐⭐⭐⭐⭐ |
ちょっとした補足:ECR を使わずに Docker Hub でも動く?
→ 動きます。 ただし以下の点に注意:
- Docker Hub は無料アカウントに pull 制限あり(匿名 100 回/6 時間)
- プライベートレポジトリは有料プランが必要
- 商用利用・チーム利用ではセキュリティ面で不安が残る
まとめ
- Fargate で ECR を使う場合は NAT Gateway か VPC エンドポイントが必要
- ECS on EC2 ならパブリック IP で ECR に直接アクセス可能
- ECR は AWS サービスとの連携やセキュリティ面で非常に便利
- 小規模開発でも VPC エンドポイントを使えば Fargate でも安価に運用できる