AWS Репозиторий ECR - Как скопировать изображения из одной учетной записи и sh pu в другую учетную запись - PullRequest
2 голосов
/ 10 июля 2020

У меня две учетные записи - учетная запись A и учетная запись B. В учетной записи A у меня есть политика, в которой пользователь из учетной записи B может взаимодействовать с учетной записью A. У меня есть репозиторий в обеих учетных записях. У учетной записи B нет установленной политики (не уверен, нужна ли мне политика для учетной записи A для взаимодействия с ней).

Мой вопрос: как перенести sh изображений ecr из учетной записи A в учетную запись B . Я хотел бы получить копию изображения учетной записи A в учетной записи B. Возможно ли это.

Ответы [ 2 ]

2 голосов
/ 10 июля 2020

Это не поддерживаемая в настоящее время функция ECR, поэтому вам нужно будет выполнить следующие шаги для перехода с одной учетной записи на другую:

  • aws ecr get-login-password --region <region> docker login --username AWS --password-stdin <aws_account_id>.dkr.ecr.<region>.amazonaws.com - Запустите это для исходной учетной записи
  • docker pull $SOURCE_IMAGE:$VERSION - перетащить последний тег на ваш локальный
  • docker tag $SOURCE_IMAGE:$VERSION $TARGET_IMAGE:$VERSION - Tag новое изображение на основе исходного исходного изображения
  • aws ecr get-login-password --region <region> docker login --username AWS --password-stdin <aws_account_id>.dkr.ecr.<region>.amazonaws.com - Запустите это для целевой учетной записи
  • docker push $TARGET_IMAGE:$VERSION - Pu sh изображение docker до целевой учетной записи ECR.
1 голос
/ 10 июля 2020

Если вы хотите переместить все репозитории из определенного региона в другую учетную запись (целевую учетную запись), используйте нижеприведенный сценарий.

  • Он перечислит все репо из учетной записи A
  • Создать репо в аккаунте B
  • Изображение тега
  • pu sh изображение в аккаунт B
#!/bin/bash
TARGET_ACCOUNT_REGION="us-west-2"
DESTINATION_ACCOUNT_REGION="us-west-2"
DESTINATION_ACCOUNT_BASE_PATH="123456.dkr.ecr.$DESTINATION_ACCOUNT_REGION.amazonaws.com/"


REPO_LIST=($(aws ecr describe-repositories --query 'repositories[].repositoryUri' --output text --region $TARGET_ACCOUNT_REGION))
REPO_NAME=($(aws ecr describe-repositories --query 'repositories[].repositoryName' --output text --region $TARGET_ACCOUNT_REGION))


for repo_url in ${!REPO_LIST[@]}; do
        echo "star pulling image ${REPO_LIST[$repo_url]} from Target account"
        docker pull ${REPO_LIST[$repo_url]}


        # Create repo in destination account, remove this line if already created
        aws ecr create-repository --repository-name ${REPO_NAME[$repo_url]}
        docker tag   ${REPO_LIST[$repo_url]} $DESTINATION_ACCOUNT_BASE_PATH/${REPO_NAME[$repo_url]} 
        docker push $DESTINATION_ACCOUNT_BASE_PATH/${REPO_NAME[$repo_url]} 
done

Убедитесь, что вы уже получили токен входа для обеих учетных записей, или добавьте эту команду в сценарий.

        aws ecr get-login-password --region $TARGET_ACCOUNT_REGION | docker login --username AWS --password-stdin ${REPO_LIST[$repo_url]}
        # destination account login, make sure profile set for accoutn destination
        aws ecr get-login-password --region $DESTINATION_ACCOUNT_REGION --profile destination_account | docker login --username AWS --password-stdin ${REPO_LIST[$repo_url]}

aws -cli-cheatsheet

...