기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
패키지 개요
패키지는 종속성을 해결하고 소프트웨어를 설치하는 데 필요한 소프트웨어 및 메타데이터 번들입니다. CodeArtifact에서 패키지는 패키지 이름, 선택적 네임스페이스(예: @types/node
에 있는 @types
), 패키지 버전 세트, 패키지 수준 메타데이터(예: npm 태그)로 구성됩니다.
목차
지원되는 패키지 형식
AWS CodeArtifact는 Cargo, Generic, Maven, npm, NuGet, PyPI, Ruby, Swift 패키지 형식을 지원합니다.
패키지 게시
npm
,twine
,Maven
, Gradle
, nuget
, dotnet
등의 도구를 사용하여 지원되는 모든 패키지 형식의 새 버전을 CodeArtifact 리포지토리에 게시할 수 있습니다.
게시 권한
AWS Identity and Access Management (IAM) 사용자 또는 역할에는 대상 리포지토리에 게시할 수 있는 권한이 있어야 합니다. 패키지를 게시하려면 다음 권한이 필요합니다.
-
화물:
codeartifact:PublishPackageVersion
-
일반:
codeartifact:PublishPackageVersion
-
Maven:
codeartifact:PublishPackageVersion
,codeartifact:PutPackageMetadata
-
npm:
codeartifact:PublishPackageVersion
-
NuGet:
codeartifact:PublishPackageVersion
,codeartifact:ReadFromRepository
-
Python:
codeartifact:PublishPackageVersion
-
Ruby:
codeartifact:PublishPackageVersion
-
Swift:
codeartifact:PublishPackageVersion
위의 권한 목록에서 IAM 정책은 codeartifact:PublishPackageVersion
및 codeartifact:PutPackageMetadata
권한에 대한 package
리소스를 지정해야 합니다. 또한 codeartifact:ReadFromRepository
권한에 사용할 repository
리소스도 지정해야 합니다.
CodeArtifact에서의 권한에 대한 자세한 내용은 AWS CodeArtifact 사용 권한 참조 섹션을 참조하세요.
패키지 자산 덮어쓰기
이미 존재하며 콘텐츠가 다른 패키지 자산은 다시 게시할 수 없습니다. 예를 들어 Maven 패키지를 JAR 자산 mypackage-1.0.jar
과 함께 이미 게시했다고 가정해 보겠습니다. 이 자산은 이전 자산과 새 자산의 체크섬이 동일한 경우에만 다시 게시할 수 있습니다. 새 콘텐츠가 있는 동일한 자산을 다시 게시하려면 먼저 delete-package-versions 명령을 이용해 패키지 버전을 삭제하세요. 콘텐츠가 다른 동일한 자산 이름을 다시 게시하려고 하면 HTTP 409 충돌 오류가 발생합니다.
여러 자산을 지원하는 패키지 형식(일반, PyPI 및 Maven)의 경우, 필요한 권한이 있다면 기존 패키지 버전에 이름이 다른 새 자산을 추가할 수 있습니다. 일반 패키지의 경우 패키지 버전이 Unfinished
상태에 있는 한 새 자산을 추가할 수 있습니다. npm은 패키지 버전당 자산 하나만 지원하므로, 게시된 패키지 버전을 어떤 식으로든 수정하려면 먼저 delete-package-versions를 사용하여 패키지 버전을 삭제해야 합니다.
이미 존재하는 자산(예:mypackage-1.0.jar
)을 다시 게시하려고 할 때 게시된 자산과 새 자산의 내용이 동일하면, 작업은 멱등성이기 때문에 성공하게 됩니다.
프라이빗 패키지 및 퍼블릭 리포지토리
CodeArtifact는 CodeArtifact 리포지토리에 저장된 패키지를 npmjs.com 또는 Maven Central 같은 퍼블릭 리포지토리에 게시하지 않습니다. CodeArtifact는 퍼블릭 리포지토리에서 CodeArtifact 리포지토리로 패키지를 가져오지만 패키지를 반대 방향으로 옮기지는 않습니다. CodeArtifact 리포지토리에 게시하는 패키지는 비공개로 유지되며 액세스 권한을 부여한 AWS 계정, 역할 및 사용자만 사용할 수 있습니다.
패치가 적용된 패키지 버전 게시
수정된 패키지 버전을 게시하고 싶지만 이러한 버전이 퍼블릭 리포지토리에서 사용 가능한 버전일 수도 있습니다. 예를 들어 mydep 1.1
이라는 중요한 애플리케이션 종속성에서 버그를 발견한 경우, 패키지 공급업체가 변경 사항을 검토하고 수락하기 전에 먼저 이를 수정해야 할 수 있습니다. 앞서 설명한 것처럼 CodeArtifact에서는 업스트림 리포지토리와 외부 연결을 통해 CodeArtifact 리포지토리에서 퍼블릭 리포지토리에 접근할 수 있는 경우 CodeArtifact 리포지토리에서 mydep 1.1
을 게시할 수 없습니다.
이 문제를 해결하려면 퍼블릭 리포지토리에서는 접근할 수 없는 다른 CodeArtifact 리포지토리에 패키지 버전을 게시하세요. 그런 다음 copy-package-versions
API를 사용하여 mydep 1.1
의 패치된 버전을 사용할 CodeArtifact 리포지토리에 복사합니다.
게시를 위한 자산 크기 제한
게시할 수 있는 패키지 자산의 최대 크기는 할당량 입력 AWS CodeArtifact에 표시된 자산 파일 크기 최대 할당량에 따라 제한됩니다. 예를 들어 현재 자산 파일 크기 최대 할당량보다 큰 Maven JAR 또는 Python 휠은 게시할 수 없습니다. CodeArtifact에 더 큰 자산을 저장해야 한다면 할당량 증가를 요청하세요.
자산 파일 크기 최대 할당량을 제외하고, npm 패키지 게시 요청의 최대 크기는 2GB입니다. 이 제한은 자산 파일 크기 최대 할당량과 무관하며 할당량을 늘려도 이 제한이 늘어나지는 않습니다. npm 게시 요청(HTTP PUT)에서는 패키지 메타데이터와 npm 패키지 tar 아카이브의 콘텐츠가 하나로 묶입니다. 따라서 게시할 수 있는 npm 패키지의 실제 최대 크기는 포함된 메타데이터의 크기에 따라 달라집니다.
참고
게시된 npm 패키지는 최대 크기가 2GB 미만으로 제한됩니다.
게시 지연 시간
CodeArtifact 리포지토리에 게시된 패키지 버전은 대부분 1초 이내에 다운로드할 수 있습니다. 예를 들어 npm 패키지 버전을 npm publish
를 이용해 CodeArtifact에 게시하는 경우, npm
install
명령을 이용하면 1초 이내에 해당 버전을 사용할 수 있습니다. 하지만 게시가 일관적이지 않으며 시간이 더 오래 걸릴 수도 있습니다. 게시 후 즉시 패키지 버전을 사용해야 한다면, 재시도를 통해 다운로드가 안정적인지 확인하세요. 예를 들어 패키지 버전을 게시한 후, 방금 게시한 패키지 버전을 최초 다운로드 시도에서 사용할 수 없다면 다운로드를 최대 3번 반복하세요.
참고
일반적으로 퍼블릭 리포지토리에서 패키지 버전을 가져오는 작업은 게시보다 시간이 더 오래 걸립니다. 자세한 내용은 외부 연결 지연 시간 단원을 참조하십시오.
패키지 버전 상태
CodeArtifact의 각 패키지 버전에는 패키지 버전의 현재 상태 및 가용성을 설명하는 상태가 적용됩니다. AWS CLI 및 SDK에서 패키지 버전 상태를 변경할 수 있습니다. 자세한 내용은 패키지 버전 상태 업데이트 단원을 참조하십시오.
다음은 패키지 버전 상태에 적용되는 값입니다.
-
게시됨 - 패키지 버전이 성공적으로 게시되었으며 패키지 관리자를 이용해 요청할 수 있습니다. 패키지 버전은 패키지 관리자에 반환되는 패키지 버전 목록(예:
npm view <package-name> versions
출력)에 포함됩니다. 패키지 버전의 모든 자산은 리포지토리에서 사용할 수 있습니다. -
미완료 - 클라이언트가 패키지 버전용 자산을 하나 이상 업로드했지만
Published
상태로 전환하여 완료하지는 않았습니다. 현재는 일반 및 Maven 패키지 버전만이Unfinished
상태가 될 수 있습니다. Maven 패키지의 경우, 클라이언트가 패키지 버전용 자산을 하나 이상 업로드하지만 해당 버전이 포함된 패키지의maven-metadata.xml
파일을 게시하지 않으면 이 문제가 발생할 수 있습니다. Maven 패키지 버전이 미완료이면mvn
또는gradle
같은 클라이언트에게 반환되는 버전 목록에 패키지 버전이 포함되지 않으며, 따라서 빌드의 일부로 사용할 수 없습니다. PublishPackageVersion API를 호출할 때unfinished
플래그를 제공하면 일반 패키지를 의도적으로Unfinished
상태로 유지할 수 있습니다.unfinished
플래그를 생략하거나 UpdatePackageVersionsStatus API를 호출하면 일반 패키지를Published
상태로 변경할 수 있습니다. -
미등록 - 패키지 버전의 자산을 리포지토리에서 다운로드할 수 있지만, 패키지 버전이 패키지 관리자에게 반환되는 버전 목록에 포함되지 않습니다. 예를 들어 npm 패키지의 경우
npm view <package-name> versions
출력에 패키지 버전이 포함되지 않습니다. 즉, 사용 가능한 버전 목록에 버전이 표시되지 않기 때문에 npm의 종속성 확인 로직은 패키지 버전을 선택하지 않습니다. 하지만 미등록 패키지 버전이 이미npm package-lock.json
파일에서 참조된 경우, 예를 들어npm ci
를 실행 중일 때 해당 버전을 다운로드하여 설치할 수 있습니다. -
보관됨 - 패키지 버전의 자산을 더 이상 다운로드할 수 없습니다. 패키지 버전은 패키지 관리자에 반환되는 버전 목록에 포함됩니다. 자산을 사용할 수 없으므로 클라이언트의 패키지 버전 사용이 차단됩니다. 애플리케이션 빌드가 보관됨으로 업데이트된 버전을 사용하는 경우, 패키지 버전이 로컬에 캐시되지 않으면 빌드가 중단됩니다. 보관됨 패키지 버전은 아직 리포지토리에 있기 때문에 패키지 관리자나 빌드 도구를 사용하여 다시 게시할 수 없지만, UpdatePackageVersionsStatus API를 사용하여 패키지 버전의 상태를 미등록 또는 게시됨으로 다시 변경할 수 있습니다.
-
폐기됨 - 패키지 버전이 목록에 표시되지 않으며 리포지토리에서 자산을 다운로드할 수 없습니다. 폐기됨과 보관됨의 주된 차이점은 폐기됨 상태인 경우 CodeArtifact가 패키지 버전의 자산을 영구적으로 삭제한다는 것입니다. 따라서 패키지 버전을 폐기됨에서 보관됨, 미등록 또는 게시됨으로 전환할 수 없습니다. 자산이 삭제되었으므로 패키지 버전을 더 이상 사용할 수 없습니다. 패키지 버전이 폐기됨으로 표시되면 패키지 자산 보관 요금이 청구되지 않습니다.
--status
파라미터 없이 list-package-versions를 호출하면, 기본적으로 모든 상태의 패키지 버전이 반환됩니다.
위에 나열된 상태 외에 DeletePackageVersions API를 사용하여 패키지 버전을 삭제할 수도 있습니다. 삭제된 패키지 버전은 리포지토리에 더 이상 존재하지 않으며 패키지 관리자 또는 빌드 도구를 사용하여 해당 패키지 버전을 자유롭게 다시 게시할 수 있습니다. 패키지 버전이 삭제되면 패키지 버전의 자산 보관 요금이 청구되지 않습니다.
패키지 이름, 패키지 버전 및 자산 이름 표준화
CodeArtifact는 패키지 이름, 패키지 버전과 자산 이름을 저장하기 전에 먼저 표준화합니다. 즉, CodeArtifact의 이름 또는 버전은 패키지가 게시될 때 제공된 것과 다를 수 있습니다. CodeArtifact에서 각 패키지 유형의 이름 및 버전을 표준화하는 방법에 대한 자세한 내용은 다음 설명서를 참조하세요.
CodeArtifact는 다른 패키지 형식에서는 표준화를 수행하지 않습니다.