【AWS経験者向け】Dockerイメージをどこに置く?ECRとArtifact Registryを徹底比較
はじめに:コンテナレジストリの選択が開発効率を左右する
皆さん、こんにちは!「30日間でGCPをマスターするAWSエンジニアの挑戦」シリーズ、9日目へようこそ。
現代の開発において、コンテナイメージの管理は重要な要素です。AWSでは ECR(Elastic Container Registry) を使用してDockerイメージを管理し、ECS、EKS、Fargateと連携してきた方も多いでしょう。
GCPでは Artifact Registry がこの役割を担いますが、単なるコンテナレジストリの代替品ではありません。より包括的なパッケージ管理プラットフォームとして設計されています。
この記事では、実際の開発・運用シーンで重要となる以下の観点から両サービスを比較します:
- 対応フォーマットと拡張性
- 料金体系とコスト最適化
- セキュリティと権限管理
- 開発者体験と運用効率
基本スペック比較:単機能 vs 多機能の設計思想
対応フォーマット
項目 | AWS ECR | GCP Artifact Registry |
---|---|---|
Docker イメージ | ✅ Native | ✅ Native |
OCI イメージ | ✅ 対応 | ✅ 対応 |
Helm チャート | ❌ 非対応 | ✅ 対応 |
Maven (Java) | ❌ 非対応 | ✅ 対応 |
npm (Node.js) | ❌ 非対応 | ✅ 対応 |
PyPI (Python) | ❌ 非対応 | ✅ 対応 |
Go モジュール | ❌ 非対応 | ✅ 対応 |
APT (Debian) | ❌ 非対応 | ✅ 対応 |
YUM (RPM) | ❌ 非対応 | ✅ 対応 |
ECRはコンテナイメージに特化した設計で、シンプルで高性能なコンテナレジストリです。一方、Artifact Registryは「統合パッケージ管理プラットフォーム」として、開発で使用するあらゆるアーティファクトを一元管理できます。
リージョンとレプリケーション
項目 | AWS ECR | GCP Artifact Registry |
---|---|---|
レプリケーション | クロスリージョンレプリケーション対応 | マルチリージョンリポジトリ対応 |
地理的冗長性 | 手動設定が必要 | 自動的に複数リージョンに分散 |
災害復旧 | 別リージョンへの手動レプリケーション | 内蔵された冗長性 |
料金体系比較:隠れたコストに注意
ストレージ料金(東京リージョン、月額)
サービス | ストレージ料金 | 無料枠 | 特記事項 |
---|---|---|---|
AWS ECR | $0.10/GB | プライベート: なし パブリック: 50GB/月 |
パブリックリポジトリは無料 |
GCP Artifact Registry | $0.10/GB | 0.5GB/月 | すべてのフォーマットで共通 |
データ転送料金
転送タイプ | AWS ECR | GCP Artifact Registry |
---|---|---|
同リージョン内 | 無料 | 無料 |
リージョン間 | $0.09/GB | $0.05/GB |
インターネット | $0.114/GB | $0.12/GB |
API リクエスト | $0.0004/1000リクエスト | 無料 |
コストのポイント:
- GCPはリージョン間転送が44%安い
- AWSはAPI呼び出しに課金があるが、GCPは無料
- 大量のイメージpull/pushがある環境ではGCPが有利
セキュリティと権限管理:統合 vs 分離
脆弱性スキャン機能
項目 | AWS ECR | GCP Artifact Registry |
---|---|---|
スキャンエンジン | Clair ベース | Container Analysis API |
料金 | $0.09/スキャン(初回無料) | 基本スキャン無料 継続的スキャン有料 |
検出可能な脆弱性 | CVE、OS パッケージ | CVE、OSパッケージ、言語パッケージ |
SBOM(Software Bill of Materials) | 対応 | 対応 |
権限管理の違い
AWS ECR の権限設定:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::ACCOUNT:role/EKSRole"
},
"Action": [
"ecr:GetDownloadUrlForLayer",
"ecr:BatchGetImage"
]
}
]
}
GCP Artifact Registry の権限設定:
bindings:
- members:
- serviceAccount:my-service@project.iam.gserviceaccount.com
role: roles/artifactregistry.reader
権限管理の特徴:
- AWS: IAM ポリシー + リポジトリポリシーの二層構造
- GCP: IAM のみで一元管理、よりシンプル
実践ハンズオン:両サービスでの開発体験を比較
AWS ECR でのイメージ管理
# 1. ECR ログイン
aws ecr get-login-password --region ap-northeast-1 | \
docker login --username AWS --password-stdin \
123456789012.dkr.ecr.ap-northeast-1.amazonaws.com
# 2. リポジトリ作成
aws ecr create-repository --repository-name my-app
# 3. イメージタグ付けとプッシュ
docker tag my-app:latest \
123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/my-app:latest
docker push 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/my-app:latest
GCP Artifact Registry でのイメージ管理
# 1. Docker 認証設定
gcloud auth configure-docker asia-northeast1-docker.pkg.dev
# 2. リポジトリ作成
gcloud artifacts repositories create my-docker-repo \
--repository-format=docker \
--location=asia-northeast1 \
--description="My Docker repository"
# 3. イメージタグ付けとプッシュ
docker tag my-app:latest \
asia-northeast1-docker.pkg.dev/my-project/my-docker-repo/my-app:latest
docker push asia-northeast1-docker.pkg.dev/my-project/my-docker-repo/my-app:latest
追加: マルチフォーマットリポジトリの活用例(GCP)
# Java Maven パッケージのアップロード
mvn deploy -Dartifact.registry.url=https://asia-northeast1-maven.pkg.dev/my-project/my-maven-repo
# npm パッケージの公開
npm publish --registry=https://asia-northeast1-npm.pkg.dev/my-project/my-npm-repo
CI/CD パイプラインでの使い勝手
GitHub Actions での比較
AWS ECR の場合:
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ap-northeast-1
- name: Login to ECR
run: |
aws ecr get-login-password | docker login --username AWS --password-stdin $ECR_REGISTRY
GCP Artifact Registry の場合:
- name: Authenticate to Google Cloud
uses: google-github-actions/auth@v1
with:
credentials_json: ${{ secrets.GCP_SA_KEY }}
- name: Configure Docker
run: gcloud auth configure-docker asia-northeast1-docker.pkg.dev
運用管理とモニタリング
ライフサイクル管理
項目 | AWS ECR | GCP Artifact Registry |
---|---|---|
自動削除ポリシー | Lifecycle Policy で詳細設定可能 | 保持ポリシーでシンプル設定 |
タグの変更可能性 | Immutable/Mutable選択可能 | デフォルトでImmutable |
削除防止 | Image Scanning結果ベースの削除防止 | IAMベースの削除防止 |
モニタリングとログ
項目 | AWS ECR | GCP Artifact Registry |
---|---|---|
アクセスログ | CloudTrail で記録 | Cloud Audit Logs で記録 |
メトリクス | CloudWatch メトリクス | Cloud Monitoring メトリクス |
アラート設定 | CloudWatch Alarms | Cloud Monitoring Alerts |
選択指針:どちらを選ぶべきか?
AWS ECR を選ぶべきケース
- 既存のAWSインフラとの統合を最優先する場合
- コンテナイメージのみを管理する場合
- 高度なライフサイクル管理が必要な場合
- 厳密なコスト管理(パブリックリポジトリの無料枠活用)
GCP Artifact Registry を選ぶべきケース
- 多様なパッケージフォーマットを一元管理したい場合
- シンプルな権限管理を重視する場合
- グローバルな開発チームでのアーティファクト共有
- リージョン間でのデータ転送コストを削減したい場合
まとめ:コンテナレジストリの未来を見据えた選択
評価項目 | AWS ECR | GCP Artifact Registry |
---|---|---|
対応フォーマット | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
料金効率 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
権限管理 | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
AWS統合 | ⭐⭐⭐⭐⭐ | ⭐⭐ |
運用シンプルさ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
ECRは成熟したコンテナレジストリとしてAWSエコシステムとの深い統合が魅力です。一方、Artifact Registryは現代的な開発ワークフローに最適化された統合パッケージ管理プラットフォームとして、より包括的なソリューションを提供します。
次回は、サーバーレスコンピューティングの世界へ進みます。AWS LambdaとGoogle Cloud Functionsの違いを深掘りし、イベント駆動アーキテクチャの実装を比較します。
この記事が役に立った方は、ぜひ「いいね」や「ストック」をお願いします!
シリーズ記事一覧
- [【1日目】はじめの一歩!AWSエンジニアがGCPで最初にやるべきこと]
- [【2日目】GCPのIAMはAWSとどう違う?「プリンシパル」と「ロール」の理解]
- [【3日目】VPCとVPCネットワーク:GCPのネットワーク設計思想を理解する]
- [【4日目】S3とCloud Storage:オブジェクトストレージを徹底比較]
- [【5日目】RDSとCloud SQL:マネージドデータベースの運用管理の違い]
- [【6日目】EC2とCompute Engine:インスタンスの起動から課金モデルまで]
- [【7日目】1週間のまとめ:AWSとGCP、それぞれの得意なことと設計思想]
- [【8日目】EKSとGKE:Kubernetesのマネージドサービスを比較体験!]
- [【9日目】Dockerイメージをどこに置く?ECRとArtifact Registryを徹底比較](この記事)
- [【10日目】LambdaとCloud Functions:イベント駆動型サーバーレスの実装]