ECRコンテナイメージのAWSアカウント間移行
今週はAWSクラウドリソースのアカウント間移行をテーマに特定のサービスについて移行方法のTipsを発信していきます。
目次
背景
リソースのアカウント間移行の背景ですが、元々2つのAWSアカウントで開発環境を運用しており、諸事情により1つのアカウントを削除することになったので削除アカウントで作成したリソースを一部もう一つのアカウントへ移行することになりました。
移行対象サービス
AWSの完全マネージド型のコンテナレジストリサービスであるAmazon Elastic Container Registryです。
移行手順
1.移行元のECRレジストリにログインし、ローカルにDockerイメージをプルする。
まず以下ユーザーガイドP15を参照し、以下のようにaws cliのコマンドを実行してログイン認証します。
コマンド例
aws ecr get-login-password --region <リージョン名> | docker login --username AWS --password-stdin <アカウントID>.dkr.ecr.<リージョン名>.amazonaws.com
ユーザーガイドは以下。
https://docs.aws.amazon.com/ja_jp/AmazonECR/latest/userguide/ecr-ug.pdf
次に下記のようにローカル環境にてDockerが起動されていることを確認し、
コマンドラインツールにてイメージプルのコマンドを実行します。
コマンド例
docker pull <アカウントID>.dkr.ecr.<リージョン名>.amazonaws.com/<リポジトリ名>:<バージョン>
出力結果例
2.移行先アカウントのECRレジストリに移行元アカウントのリポジトリと同名のリポジトリを作成します。
リポジトリ一覧右上にある「リポジトリを作成」から簡単にリポジトリを作成することができます。
作成結果
3.移行先のリポジトリへローカルイメージをプッシュする
ローカルにあるプッシュ対象のイメージIDを確認する。
コマンドラインでdocker imagesを実行
RIPOSITORYとある列がイメージ名を指し、
<アカウントID>.dkr.ecr.<リージョン名>.amazonaws.com/<リポジトリ名>という構成になっており、AWSではリポジトリのパス(リポジトリの住所)を意味している。
今回移行先ように既存イメージの住所を変更してあげる(イメージ名を変更する)ことで移行先アカウントのECRリポジトリへのプッシュを可能とすることが重要です。
なので移行したいイメージに対し、docker tagをコマンドして改名してあげます。
※実際はコピーしたイメージ対象に対し、新しく名前をつけます。
コマンド例
docker tag <イメージID> <移行先アカウントID>.dkr.ecr.<リージョン名>.amazonaws.com/<リポジトリ名>(変更後のイメージ名)
実行例
後はイメージ名を変更したイメージに対し、移行先のリポジトリへプッシュするだけです。
コマンド例
docker push <移行先アカウントID>.dkr.ecr.<リージョン名>.amazonaws.com/<リポジトリ名>:<バージョン>(改名したイメージ名)
実行結果
以上でアカウント間のECRリポジトリ移行は完了です。お疲れ様でした。
ではまた、会いましょう。