AWS SDK 또는 CLI로 CreateRepository 사용하기
AWS SDK 또는 CLI로 CreateRepository 사용하기 (Use CreateRepository with an AWS SDK or CLI)
AWS CLI와 Java, Kotlin, Python(Boto3), SAP ABAP SDK에서 CreateRepository 작업을 사용해 Amazon ECR 리포지토리를 생성하는 방법을 함께 살펴볼게요.
출처: 문서
본문
다음 코드 예제는 CreateRepository 를 사용하는 방법을 보여줘요. 작업(actions) 예제는 더 큰 프로그램에서 추출한 코드 조각으로, 컨텍스트 안에서 실행되어야 해요. 이 작업을 다음 코드 예제에서 컨텍스트와 함께 볼 수 있어요:
CLI (AWS CLI)
예제 1: 리포지토리 생성 (To create a repository)
다음 create-repository 예제는 계정의 기본 레지스트리(default registry)에서 지정된 네임스페이스 안에 리포지토리를 생성해요.
aws ecr create-repository \
--repository-name project-a/sample-repo
출력 (Output):
{
"repository": {
"registryId": "123456789012",
"repositoryName": "project-a/sample-repo",
"repositoryArn": "arn:aws:ecr:us-west-2:123456789012:repository/project-a/sample-repo"
}
}
자세한 내용은 Amazon ECR User Guide의 Creating a Repository를 참고하세요.
예제 2: 이미지 태그 불변성(immutability)으로 구성된 리포지토리 생성 (To create a repository configured with image tag immutability)
다음 create-repository 예제는 계정의 기본 레지스트리에서 태그 불변성(tag immutability)으로 구성된 리포지토리를 생성해요.
aws ecr create-repository \
--repository-name project-a/sample-repo \
--image-tag-mutability IMMUTABLE
출력 (Output):
{
"repository": {
"registryId": "123456789012",
"repositoryName": "project-a/sample-repo",
"repositoryArn": "arn:aws:ecr:us-west-2:123456789012:repository/project-a/sample-repo",
"imageTagMutability": "IMMUTABLE"
}
}
자세한 내용은 Amazon ECR User Guide의 Image Tag Mutability를 참고하세요.
예제 3: 스캔 구성(scanning configuration)으로 구성된 리포지토리 생성 (To create a repository configured with a scanning configuration)
다음 create-repository 예제는 계정의 기본 레지스트리에서 이미지 푸시 시 취약점 스캔(vulnerability scan)을 수행하도록 구성된 리포지토리를 생성해요.
aws ecr create-repository \
--repository-name project-a/sample-repo \
--image-scanning-configuration scanOnPush=true
출력 (Output):
{
"repository": {
"registryId": "123456789012",
"repositoryName": "project-a/sample-repo",
"repositoryArn": "arn:aws:ecr:us-west-2:123456789012:repository/project-a/sample-repo",
"imageScanningConfiguration": {
"scanOnPush": true
}
}
}
자세한 내용은 Amazon ECR User Guide의 Image Scanning을 참고하세요.
API 세부 사항은 AWS CLI Command Reference에서 CreateRepository를 참고하세요.
Java (SDK for Java 2.x)
참고 (Note) GitHub에 더 많은 내용이 있어요. 전체 예제를 확인하고 설정·실행 방법을 배우려면 AWS Code Examples Repository를 참고하세요.
/**
* Creates an Amazon Elastic Container Registry (Amazon ECR) repository.
*
* @param repoName the name of the repository to create.
* @return the Amazon Resource Name (ARN) of the created repository, or an empty string if the operation failed.
* @throws IllegalArgumentException If repository name is invalid.
* @throws RuntimeException if an error occurs while creating the repository.
*/
public String createECRRepository(String repoName) {
if (repoName == null || repoName.isEmpty()) {
throw new IllegalArgumentException("Repository name cannot be null or empty");
}
CreateRepositoryRequest request = CreateRepositoryRequest.builder()
.repositoryName(repoName)
.build();
CompletableFuture<CreateRepositoryResponse> response = getAsyncClient().createRepository(request);
try {
CreateRepositoryResponse result = response.join();
if (result != null) {
System.out.println("The " + repoName + " repository was created successfully.");
return result.repository().repositoryArn();
} else {
throw new RuntimeException("Unexpected response type");
}
} catch (CompletionException e) {
Throwable cause = e.getCause();
if (cause instanceof EcrException ex) {
if ("RepositoryAlreadyExistsException".equals(ex.awsErrorDetails().errorCode())) {
System.out.println("The Amazon ECR repository already exists, moving on...");
DescribeRepositoriesRequest describeRequest = DescribeRepositoriesRequest.builder()
.repositoryNames(repoName)
.build();
DescribeRepositoriesResponse describeResponse = getAsyncClient().describeRepositories(describeRequest).join();
return describeResponse.repositories().get(0).repositoryArn();
} else {
throw new RuntimeException(ex);
}
} else {
throw new RuntimeException(e);
}
}
}
API 세부 사항은 AWS SDK for Java 2.x API Reference에서 CreateRepository를 참고하세요.
Kotlin (SDK for Kotlin)
참고 (Note) GitHub에 더 많은 내용이 있어요. 전체 예제를 확인하고 설정·실행 방법을 배우려면 AWS Code Examples Repository를 참고하세요.
/**
* Creates an Amazon Elastic Container Registry (Amazon ECR) repository.
*
* @param repoName the name of the repository to create.
* @return the Amazon Resource Name (ARN) of the created repository, or an empty string if the operation failed.
* @throws RepositoryAlreadyExistsException if the repository exists.
* @throws EcrException if an error occurs while creating the repository.
*/
suspend fun createECRRepository(repoName: String?): String? {
val request =
CreateRepositoryRequest {
repositoryName = repoName
}
return try {
EcrClient.fromEnvironment { region = "us-east-1" }.use { ecrClient ->
val response = ecrClient.createRepository(request)
response.repository?.repositoryArn
}
} catch (e: RepositoryAlreadyExistsException) {
println("Repository already exists: $repoName")
repoName?.let { getRepoARN(it) }
} catch (e: EcrException) {
println("An error occurred: ${e.message}")
null
}
}
API 세부 사항은 AWS SDK for Kotlin API reference에서 CreateRepository를 참고하세요.
Python (SDK for Python (Boto3))
참고 (Note) GitHub에 더 많은 내용이 있어요. 전체 예제를 확인하고 설정·실행 방법을 배우려면 AWS Code Examples Repository를 참고하세요.
class ECRWrapper:
def __init__(self, ecr_client: client):
self.ecr_client = ecr_client
@classmethod
def from_client(cls) -> "ECRWrapper":
"""
Creates a ECRWrapper instance with a default Amazon ECR client.
:return: An instance of ECRWrapper initialized with the default Amazon ECR client.
"""
ecr_client = boto3.client("ecr")
return cls(ecr_client)
def create_repository(self, repository_name: str) -> dict[str, any]:
"""
Creates an ECR repository.
:param repository_name: The name of the repository to create.
:return: A dictionary of the created repository.
"""
try:
response = self.ecr_client.create_repository(repositoryName=repository_name)
return response["repository"]
except ClientError as err:
if err.response["Error"]["Code"] == "RepositoryAlreadyExistsException":
print(f"Repository {repository_name} already exists.")
response = self.ecr_client.describe_repositories(
repositoryNames=[repository_name]
)
return self.describe_repositories([repository_name])[0]
else:
logger.error(
"Error creating repository %s. Here's why %s",
repository_name,
err.response["Error"]["Message"],
)
raise
API 세부 사항은 AWS SDK for Python (Boto3) API Reference에서 CreateRepository를 참고하세요.
SAP ABAP (SDK for SAP ABAP)
참고 (Note) GitHub에 더 많은 내용이 있어요. 전체 예제를 확인하고 설정·실행 방법을 배우려면 AWS Code Examples Repository를 참고하세요.
TRY.
" iv_repository_name = 'my-repository'
oo_result = lo_ecr->createrepository(
iv_repositoryname = iv_repository_name ).
DATA(lv_repository_uri) = oo_result->get_repository( )->get_repositoryuri( ).
MESSAGE |Repository created with URI: { lv_repository_uri }| TYPE 'I'.
CATCH /aws1/cx_ecrrepositoryalrexex.
" If repository already exists, retrieve it
DATA lt_repo_names TYPE /aws1/cl_ecrrepositorynamels00=>tt_repositorynamelist.
APPEND NEW /aws1/cl_ecrrepositorynamels00( iv_value = iv_repository_name ) TO lt_repo_names.
DATA(lo_describe_result) = lo_ecr->describerepositories( it_repositorynames = lt_repo_names ).
DATA(lt_repos) = lo_describe_result->get_repositories( ).
IF lines( lt_repos ) > 0.
READ TABLE lt_repos INDEX 1 INTO DATA(lo_repo).
oo_result = NEW /aws1/cl_ecrcrerepositoryrsp( io_repository = lo_repo ).
MESSAGE |Repository { iv_repository_name } already exists.| TYPE 'I'.
ENDIF.
ENDTRY.
API 세부 사항은 AWS SDK for SAP ABAP API reference에서 CreateRepository를 참고하세요.
AWS SDK 개발자 가이드와 코드 예제의 전체 목록은 Using Amazon ECR with an AWS SDK를 참고하세요. 이 주제에는 시작하기(getting started) 정보와 이전 SDK 버전에 대한 세부 정보도 포함돼 있어요.