Amazon Elastic Container Registry (Amazon ECR) は、セキュリティ、スケーラビリティ、信頼性を備えた AWS マネージドコンテナイメージレジストリサービスです。
参考:
Amazon ECR の開始方法
Amazon ECR の使用を開始するには、Amazon ECR コンソールでリポジトリを作成します。Amazon ECR コンソールの指示に従って、最初のリポジトリの作成を開始します。
イメージリポジトリを作成するには
リポジトリは、Docker または Open Container Initiative (OCI) イメージを Amazon ECR に保存する場所です。Amazon ECR からイメージをプッシュまたはプルするたびに、イメージをプッシュまたはプルするリポジトリとレジストリの場所を指定します。
リポジトリ作成手順例
-
Amazon ECR コンソール (https://console.aws.amazon.com/ecr/) を開きます。
-
リポジトリを作成 画面で以下のように設定し、
リポジトリを作成
をクリックします。
一般設定:- 可視性設定:
プライベート
を選択します。 - リポジトリ名: 任意のリポジトリ名を指定します。
- タグのイミュータビリティ:
無効
イメージスキャンの設定:
- プッシュ時にスキャン:
無効
暗号化設定:
- KMS 暗号化:
無効
- 可視性設定:
レジストリの認証
参考:
認証トークンは、IAM プリンシパルからアクセス可能で 12 時間有効な Amazon ECR レジストリにアクセスするために使用されます。
「認可トークンを使用する - CLI を使用して Amazon ECR プライベートレジストリに対して Docker を認証するには」を参考にしAmazon ECRにログインしてみます。
AWS CLI の get-login-password コマンドを使用して認証トークンを取得します。
# aws ecr get-login-password --region ap-northeast-1
eyJwYX...(省略)...fQ==
この認証トークンを使用して、Amazon ECRにログインしたり、各種コマンドを実行したりできます。
skopeoコマンドでのログインコマンド実行例:
# /usr/bin/skopeo login --tls-verify=false -u AWS -p eyJwYX...(省略)...fQ== xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com
Login Succeeded!
CP4Dのプライベート・コンテナー・レジストリーとして使用する場合に注意すること
CP4D docのこちらのステップを実行する際の注意点です。
Amazon ECRはCP4Dのプライベート・コンテナー・レジストリー要件の2つ目 イメージ名でのパス分離文字の使用を許可している
を満たしていないようです。
プライベート・コンテナー・レジストリーは、以下の要件を満たしている必要があります
- Docker イメージ・マニフェスト・バージョン 2、スキーマ 2 のサポート
- イメージ名でのパス分離文字の使用を許可している
- Red Hat OpenShift Container Platform クラスターに近接していること
- クラスター内のすべてのノードからアクセス可能で、すべてのノードがプライベート・コンテナー・レジストリーにプッシュしたり、プライベート・コンテナー・レジストリーからプルしたりするための許可を持っている必要があります。
そのため、手順どおりにイメージのミラーリングを実行する(cpd-cli manage mirror-images
)と次のようなエラーになります。
エラー例:
error: unable to push manifest to XXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/cpopen/ibm-cert-manager-operator:4.1.0-ppc64le: name unknown: The repository with name 'cpopen/ibm-cert-manager-operator' does not exist in the registry with id 'XXXXXXXXXX'
このエラーを回避するため、Amazon ECRの場合は、ミラーリングの前に各イメージ名のリポジトリを作成しておく必要があります。手順例は以下のとおりです。
-
(CP4D doc記載の手順どおり) ミラーリング前に実行する「IBM Entitled Registryからミラーリングするイメージへのアクセス権限があることを確認」のための次のコマンドを実行します。
cpd-cli manage list-images \ --components=${COMPONENTS} \ --release=${VERSION} \ --inspect_source_registry=true
-
上のコマンドの実行により、
${CPD_CLI_MANAGE_WORKSPACE}/olm-utils-workspace/work/offline/${VERSION}/.ibm-pak/data/cases/*/*/*images.csv
ファイルが作成されます。この*images.csv
ファイルを参照すると必要なイメージ名を取得できます。例として、次が
ibm-cert-manager-4.1.0-images.csv
の先頭部分を抜き出したものです。2フィールド目image_name
がイメージ名です。このイメージ名(この例ではcpopen/ibm-cert-manager-operator
)を持つリポジトリを作成します。ibm-cert-manager-4.1.0-images.csvregistry,image_name,tag,digest,mtype,os,arch,variant,insecure,digest_source,image_type,groups icr.io,cpopen/ibm-cert-manager-operator,4.1.0,sha256:4e3ec61a34fc7c71d213999b68b1f5c3f866f97e19c12fb001d506d4166a50f1,LIST,"","","",0,CASE,"","" icr.io,cpopen/ibm-cert-manager-operator,4.1.0-amd64,sha256:8c4a4e3d5b99e3ab93c52c3a16beb23a1cda20cc6c4bba0ba02ce1eaa75bdcba,IMAGE,linux,amd64,"",0,CASE,"","" :
-
必要なイメージ名のリポジトリを作成します。
Amazon ECR コンソールから作成することも可能ですが、数が多いので、次のようなコマンドで作成することをお勧めします。aws ecr create-repository \ --repository-name $repo_name \ --image-scanning-configuration scanOnPush=true \ --region $AWS_REGION
Amazon Elastic File System のセットアップを実施する場合は、nfs-subdir-external-provisioner
リポジトリも作成しておく必要があります。
リポジトリを作成しておけば、あとは手順どおりにイメージのミラーリングを実行できます。
認証トークンをインストール環境変数 PRIVATE_REGISTRY_PUSH_PASSWORD
と PRIVATE_REGISTRY_PULL_PASSWORD
にセットします。
export PRIVATE_REGISTRY_LOCATION=xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com
PRIVATE_REGISTRY_PUSH_USER=AWS
PRIVATE_REGISTRY_PUSH_PASSWORD=eyJwYX...(省略)...fQ==
PRIVATE_REGISTRY_PULL_USER=AWS
PRIVATE_REGISTRY_PULL_PASSWORD=eyJwYX...(省略)...fQ==