web-dev-qa-db-ja.com

AWS ECRリポジトリが存在しない場合は作成します

AWS ECRリポジトリがまだ存在しない場合、どのように作成できますか?

23
Ysak

存在しない場合にリポジトリを作成する1つのライナー:

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

これは可能ですが、最初にリポジトリが存在するかどうかを確認する必要があります。私はこの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で機能させるには、ジョブにECRリポジトリの作成を許可するIAMロールが必要です。 AWS CLI認証情報をコードビルドジョブに取り込む必要がある場合は、次のAWSブログ投稿をご覧ください。

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

「ビルド仕様の作成」で説明されている内容を正確に実行して、JQを使用してAWS認証情報を抽出します。

4

AWSは、リポジトリが存在しない場合にのみリポジトリを作成します。あなたは単にエラーと失敗を無視することができます
|| true同じリポジトリが存在する場合:

aws ecr create-repository --repository-name <repo_name> || true
2
Akif

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)
}
2
Aleks Sidorenko

条件付きでリポジトリを作成することに加えて、リポジトリURIも抽出する場合は、次の複数行のbashコマンドを検討してください。

REPO_URI=$(aws ecr describe-repositories --repository-names "${REPO_NAME}" --query "repositories[0].repositoryUri" --output text 2>/dev/null || \
           aws ecr create-repository --repository-name "${REPO_NAME}"  --query "repository.repositoryUri" --output text)

リポジトリURIは、tagおよびPush操作に役立ちます。


部分的なクレジット: answer JS

0
Acumenus