AWS ECR Автоматическое создание хранилища, если его не существует - PullRequest
0 голосов
/ 25 июня 2018

Возможно ли автоматически создать AWS ECR-репозиторий, если он еще не существует. Потому что я использовал локальный экземпляр реестра Docker и который создает сам репо на push. Есть ли способ настроить то же самое с ECR

Ответы [ 4 ]

0 голосов
/ 16 мая 2019

один лайнер для создания репо, если он не существует:

aws ecr describe-repositories --repository-names ${REPO_NAME} || aws ecr create-repository --repository-name ${REPO_NAME}

0 голосов
/ 08 февраля 2019

Вы можете сделать это, но вам нужно сначала проверить, существует ли репо.Я взломал этот bash-скрипт вместе, и он делает то, что мне нужно:

#!/bin/bash

aws ecr describe-repositories --repository-names $1 2>&1 > /dev/null
status=$?
if [[ ! "${status}" -eq 0 ]]; then
    aws ecr create-repository --repository-name $1
fi

Аргументом будет некое имя репо.Чтобы это работало в CodeBuild, заданию потребуется роль IAM, которая позволяет ему создавать репозиторий ECR.Если вам нужно ввести учетные данные CLI AWS в работу по сборке кода, ознакомьтесь с этим сообщением в блоге AWS:

https://aws.amazon.com/blogs/devops/how-to-create-an-ami-builder-with-aws-codebuild-and-hashicorp-packer/

Мы делаем именно то, что описано в разделе «Создание».«Спецификация сборки» для использования JQ для извлечения учетных данных AWS.

0 голосов
/ 28 марта 2019

Если вы хотите, чтобы это было автоматизировано в сценарии Jenkins, просто используйте этот фрагмент кода:

def ensureRegistry(accountId, region, repoName) {
    Logger log = new Logger(this)
    def accId = shell.output("aws --region ${region} ecr describe-repositories --repository-names \"${repoName}\" | jq .repositories[].registryId | tr -d '\"'")
    if (accId == accountId) {
        log.info("Docker repository ${repoName} exists for account ${accId}")
    } else {
        log.info("Docker repository ${repoName} doesn't exist for account ${accId}")
        shell.status("aws --region ${region} ecr create-repository --repository-name \"${repoName}\"")
        log.info("Docker repository ${repoName} was just created for account ${accId}")
    }
}

shell.groovy - это:

def output(cmd) {
    sh(script: cmd, returnStdout: true)
}

def status(cmd) {
    sh(script: cmd, returnStatus: true)
}
0 голосов
/ 25 июня 2018

Вы можете использовать интерфейс командной строки AWS для создания репозиториев на лету и, возможно, поместить их в сценарий где-нибудь локально, если хотите.

aws --region REGION_NAME ecr create-repository --repository-name REPO_NAME --profile default

docker tag IMAGE_NAME AWS_ACCOUNT_ID.dkr.ecr.REGION_NAME.amazonaws.com/IMAGE_NAME

aws ecr get-login --no-include-email --region REGION_NAME --profile default

Это вернет логин с большим ключом в вашем терминале, скопируйтезатем вставьте его в свой терминал и нажмите «Ввод» (не самый лучший способ для обеспечения безопасности!)

docker push AWS_ACCOUNT_ID.dkr.ecr.REGION_NAME.amazonaws.com/IMAGE_NAME

После этого перейдите в ECR, найдите свой репозиторий и откройте его.Перейдите на вкладку «Разрешения», а затем примените политику, которая позволит другим ресурсам использовать ее, если вам нужно.

Что касается автоматического создания репо при отправке изменений?Вы можете создать репозиторий CodeCommit и добавить его в качестве триггера к изменению Codepipeline, которое будет выполнено, а затем настроить buildspec.yml для выполнения этих команд консоли AWS.

...