AWS認定資格 WEB問題集&徹底解説
機械学習エンジニア–アソシエイト
AWSサービスの一つであるAmazon Elastic Container Registry (Amazon ECR)はどんな内容なのでしょうか?また、AWS認定資格の機械学習エンジニア-アソシエイト(MLA)に合格するためには、サービスのどんなポイントを押さえておけばよいのでしょうか?
ここでは、そんなあなたの疑問に回答していきたいと思います
1. サービス概要
Amazon Elastic Container Registry (ECR)は、Dockerコンテナイメージ・OCI(Open Container Initiative)アーティファクトをAWS上に安全に保管・管理・デプロイするためのフルマネージドコンテナレジストリです。 Amazon ECS・EKS・Fargate・Lambda(コンテナイメージデプロイ)・AWS Batch等との緊密な統合により、AWSのコンテナエコシステムの中核を担います。
ECRはプライベートリポジトリ(アカウント内専用)とパブリックリポジトリ(Amazon ECR Public / Gallery)の2種類を提供します。 プライベートリポジトリはIAMポリシーとリポジトリポリシーで細粒度のアクセス制御が可能で、組織内のコンテナイメージを安全に管理できます。
2. 主な特徴と機能
2.1 プライベートリポジトリ
アカウント・リージョンごとにプライベートレジストリが提供されます(URIは AWS_ACCOUNT_ID.dkr.ecr.REGION.amazonaws.com)。
各リポジトリに対してリポジトリポリシー(リソースベースポリシー)を設定し、クロスアカウントアクセスや特定のIAMロールへの権限付与が可能です。
2.2 イメージスキャン
- 基本スキャン(Basic Scanning): プッシュ時またはオンデマンドでOSパッケージの脆弱性をスキャン(Clair OSS利用)。
- 拡張スキャン(Enhanced Scanning): Amazon Inspectorと統合した継続的なスキャン。OSパッケージに加えプログラミング言語パッケージ(npm, Python pip等)の脆弱性も検出。CVSSスコアを含む詳細レポート。
2.3 ライフサイクルポリシー
リポジトリのコスト管理に欠かせない機能。ルールを設定して古いイメージを自動削除できます。
- イメージ数上限ルール(例: 最新10枚のみ保持)
- イメージ経過日数ルール(例: 30日以上経過したuntaggedイメージを削除)
- 複数ルールの優先度設定
2.4 レプリケーション
- クロスリージョンレプリケーション: 他リージョンのECRリポジトリへ自動コピー。マルチリージョンデプロイやDRに有効。
- クロスアカウントレプリケーション: 別AWSアカウントのECRへレプリケーション。中央リポジトリから各環境アカウントへの配布に活用。
2.5 OCI(Open Container Initiative)対応
DockerイメージだけでなくOCIアーティファクト(Helm Chart等)の保管にも対応。コンテナエコシステム全体のアーティファクト管理が可能です。
2.6 イミュータブルタグ
イメージタグのイミュータビリティを有効化すると、同一タグで異なるイメージへの上書き(タグの再利用)を防止できます。 本番環境でのイメージ管理の信頼性を高め、予期しない変更を防ぎます。
2.7 Lambda コンテナイメージサポート
Lambda関数をコンテナイメージとしてパッケージ化しECRに格納・デプロイできます(最大10GBのイメージサイズ)。 大きな依存ライブラリや機械学習モデルを含むLambda関数の実装が可能になります。
3. アーキテクチャおよび技術要素
- イメージのビルド・プッシュ: `docker build` でイメージ作成 → `aws ecr get-login-password | docker login` で認証 → `docker push` でECRへアップロード。
- イメージの保管: ECRはS3をバックエンドに使用してイメージレイヤーを保管(ユーザーはS3を直接操作しない)。
- イメージのプル: ECS/EKS/LambdaがECRからイメージをプル。VPCエンドポイント(ECR API/DKR)経由でインターネット不要のプライベートアクセスも可能。
- スキャン・ライフサイクル: プッシュ時に脆弱性スキャン実行。ライフサイクルポリシーで古いイメージを自動整理。
- レプリケーション: レジストリレベルのレプリケーション設定で他リージョン・他アカウントへ自動同期。
ECRはAWS管理のインフラ上で動作するフルマネージドサービスです。リポジトリの可用性・耐久性はAWSが保証し、 スケーリングもAWSが自動で対応します。
4. セキュリティと認証・認可
- IAMポリシー: ECRへのプッシュ/プル/削除操作をIAMユーザー・ロールで制御(例: ecr:GetDownloadUrlForLayer, ecr:BatchGetImage等)。
- リポジトリポリシー: S3バケットポリシーに相当するリソースベースポリシー。クロスアカウントアクセスや特定のIAMプリンシパルへの権限付与に使用。
- 保存時暗号化: デフォルトでAES-256(SSE-S3)暗号化。KMSキーによる暗号化も選択可能。
- 転送時暗号化: HTTPS(TLS)での通信。
- 認証: `aws ecr get-login-password` でIAM認証トークンを取得し、Dockerクライアントで使用。トークンの有効期限は12時間。
- VPCエンドポイント: ECRへのアクセスをVPC内に限定(Interface型エンドポイント: com.amazonaws.REGION.ecr.api / com.amazonaws.REGION.ecr.dkr)。インターネット経由不要でセキュアなプル。
- イメージスキャン統合: 拡張スキャン(Amazon Inspector)で脆弱性を継続的に監視し、EventBridge通知で早期対応。
5. 料金形態
- ストレージ: リポジトリに保存されたデータ量(GB/月)に対して課金。
- データ転送(アウトバウンド): ECRから他サービスへのデータ転送量に課金。同一リージョン内のECS/ECS Fargate/EKSへのプルは無料。
- パブリックリポジトリ(ECR Public): 保存は無料。匿名ユーザーからのプルにデータ転送料が発生(AWSアカウントからは無料)。
- 拡張スキャン: Amazon Inspector利用料(スキャンされたイメージ数に基づく)。
6. よくあるアーキテクチャ・設計パターン
- CI/CDパイプライン: CodeBuildでDockerイメージをビルド→ECRにプッシュ→ECS/EKSサービスを更新(ローリングデプロイ/Blue-Greenデプロイ)。CodePipeline全体を自動化。
- 中央レジストリ→マルチアカウント配布: 共有サービスアカウントのECRをプライマリとし、クロスアカウントレプリケーションで各環境(開発・ステージング・本番)アカウントへ自動配布。
- マルチリージョンデプロイ: クロスリージョンレプリケーションで複数リージョンのECRを同期。各リージョンのECS/EKSがローカルECRからプルして低レイテンシ・耐障害性を確保。
- Lambdaコンテナイメージ: 機械学習モデルや大型ライブラリをコンテナイメージ化してECRに格納。Lambdaは最大10GBのイメージをデプロイ可能。
- ライフサイクルによるコスト管理: untaggedイメージや古いdevタグイメージを定期自動削除。ストレージコストを継続的に最適化。
7. 設定・デプロイ手順(ハンズオン例)
- ECRコンソール(またはCLI)でプライベートリポジトリを作成。イメージタグのイミュータビリティ・スキャン設定・暗号化オプションを設定。
- CLI で認証:
aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin ACCOUNT_ID.dkr.ecr.ap-northeast-1.amazonaws.com - イメージをビルド・タグ付け・プッシュ:
docker build -t myapp ./docker tag myapp:latest ACCOUNT_ID.dkr.ecr.REGION.amazonaws.com/myapp:latest/docker push ... - ライフサイクルポリシーを設定(例: untaggedイメージを7日後に削除)。
- ECSタスク定義・EKSマニフェストでECRのイメージURIを指定してコンテナを起動。
- 拡張スキャン(Amazon Inspector)を有効化し、脆弱性検出時のEventBridgeアラート通知を設定。
8. 試験で問われやすいポイント
8.1 ECRの基本
- Q: Amazon ECRの主な用途は?
A: DockerコンテナイメージとOCIアーティファクトを保管するフルマネージドコンテナレジストリ。ECS/EKS/FargateへのデプロイやLambdaコンテナイメージに使用。 - Q: ECRはどこにイメージデータを保存するか?
A: Amazon S3をバックエンドに使用(ユーザーは透過的に使用)。
8.2 認証
- Q: ECRへのdockerログインはどのように行うか?
A: `aws ecr get-login-password` でIAM認証トークンを取得し `docker login` に渡す。トークンの有効期限は12時間。 - Q: ECS/EKSがECRからイメージをプルするための権限はどこで設定するか?
A: ECSタスク実行ロール(Task Execution Role)またはEKSのノードIAMロールに `ecr:GetDownloadUrlForLayer` 等のポリシーを付与する。
8.3 イメージスキャン
- Q: ECRの基本スキャンと拡張スキャンの違いは?
A: 基本スキャンはOSパッケージのみプッシュ時スキャン(Clair利用)。拡張スキャンはAmazon Inspector統合で言語パッケージも含む継続的スキャン。
8.4 ライフサイクルポリシー
- Q: ECRのストレージコストを削減するには?
A: ライフサイクルポリシーで古いイメージやuntaggedイメージを自動削除するルールを設定する。
8.5 セキュリティ
- Q: クロスアカウントでECRのイメージを共有するには?
A: リポジトリポリシーで他アカウントのIAMプリンシパルに対するプル権限を付与する。または、クロスアカウントレプリケーションでコピーする。 - Q: ECRへのアクセスをインターネット経由させたくない場合は?
A: VPCエンドポイント(ECR API用とDKR用の2つのInterface型エンドポイント+S3 Gatewayエンドポイント)を設定する。 - Q: イメージタグを上書き不可にするには?
A: リポジトリでイメージタグのイミュータビリティを有効化する。
8.6 レプリケーション
- Q: ECRのマルチリージョン・マルチアカウント展開を効率化するには?
A: ECRクロスリージョン/クロスアカウントレプリケーションを設定。プッシュ時に対象リージョン/アカウントへ自動同期される。
8.7 Lambdaコンテナイメージ
- Q: Lambda関数をコンテナイメージとしてデプロイする場合、イメージはどこに格納するか?
A: Amazon ECRのプライベートリポジトリ。最大イメージサイズは10GB。LambdaとECRは同一AWSアカウント・同一リージョンである必要がある。