1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

30日間で理解する GCP for AWSエンジニア - 実践ブログシリーズ - 9日目: Dockerイメージをどこに置く?ECRとArtifact Registryを比較

Last updated at Posted at 2025-08-26

【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:イベント駆動型サーバーレスの実装]
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?