Amazon Web Services 한국 블로그
AWS CodeArtifact 출시 – 소프트웨어 패키지 관리 서비스
소프트웨어 아티팩트 리포지토리, 그리고 관련 패키지 관리자는 개발의 필수 구성 요소입니다. 라이브러리가 필요할 때, 패키지 관리자와 함께 사전 빌드된 라이브러리를 다운로드하여 참조하면 개발 및 구축 프로세스가 간소화됩니다. Maven Central, npm 공용 레지스트리, PyPi(Python Package Index) 등 다양한 패키지 리포지토리를 사용할 수 있습니다.
여러 개의 아티팩트 리포지토리로 작업할 경우 해당 애플리케이션의 소프트웨어 종속성 버전과 액세스를 모두 신중하게 제어하려는 조직에서 몇 가지 문제가 발생할 수 있습니다. 감지되지 않고 악용될 수 있는 취약점이 조직의 애플리케이션에 영향을 주지 못하도록 하려면 종속성의 모든 변경 사항을 제어해야 합니다. 중앙 집중식 리포지토리를 사용하면 조직이 보다 쉽게 액세스 제어와 버전 변경을 관리할 수 있으며, 패키지 버전을 업데이트할 때 IT 책임자가 이미 새 버전을 사용 승인한 상태이므로 팀의 만족도가 높아집니다.
규모가 큰 조직은 이러한 문제를 해결하기 위해 기존 아티팩트 리포지토리 소프트웨어로 전환할 수 있지만, 이런 제품은 설치, 구성, 유지 관리 및 확장 시 추가적인 문제를 야기할 수 있습니다. 규모가 작은 조직의 경우 기존 아티팩트 리포지토리 소프트웨어의 가격과 유지 관리 작업이 큰 부담으로 작용할 수 있습니다.
오늘 출시한 AWS CodeArtifact는 개발자와 조직을 위한 완전관리형 아티팩트 리포지토리 서비스로 개발, 구축 및 배포 프로세스에 사용되는 소프트웨어 패키지를 안전하게 저장하고 공유할 수 있도록 합니다. 현재 CodeArtifact는 Maven 및 Gradle(Java용), npm 및 yarn(Javascript용), pip 및 twine(Python용)와 같이 널리 사용되는 구축 도구 및 패키지 관리자와 함께 사용할 수 있습니다. 새로운 패키지가 수집되거나 리포지토리에 게시되면 CodeArtifact가 자동으로 확장되며 완전관리형 서비스로서 CodeArtifact는 사용자 측에서 인프라를 설치하거나 유지 관리할 필요가 없습니다.
또한 CodeArtifact는 polyglot 아티팩트 리포지토리이므로 지원되는 모든 유형의 아티팩트 패키지를 저장할 수 있습니다. 예를 들어 Maven, npm 및 Python 리포지토리의 패키지를 한 위치에 나란히 저장하도록 단일 CodeArtifact 리포지토리를 구성할 수 있습니다.
CodeArtifact 리포지토리는 도메인으로 구성됩니다. 조직에 단일 도메인을 사용한 후 거기에 리포지토리를 추가하는 것이 좋습니다. 예를 들어 팀별로 설로 다른 리포지토리를 사용하도록 선택할 수 있습니다. 리포지토리에 패키지를 게시하거나 외부 리포지토리에서 패키지를 가져오려면 개발자에게 익숙한 패키지 관리자 도구를 사용하기만 하면 됩니다. 시작하는 과정을 살펴 보겠습니다.
AWS CodeArtifact 시작하기
CodeArtifact를 시작하려면 먼저 리포지토리를 집계할 조직의 도메인을 생성해야 합니다. 도메인은 패키지와 메타데이터를 리포지토리에서 소비하더라도 패키지와 메타데이터의 실제 저장을 수행하는 데 사용됩니다. 이는 단일 패키지 자산, 예를 들어 지정된 npm 패키지가 리포지토리 수에 관계 없이 도메인당 한 번만 저장된다는 이점이 있습니다. CodeArtifact 콘솔에서 왼쪽 탐색 패널에 있는 [도메인]을 선택하거나, 아니면 여기에서 제가 하듯이 첫 리포지토리 생성 프로세스의 일부로 [리포지토리 생성]을 클릭하여 도메인을 생성합니다.
먼저 리포지토리 이름을 정하고 선택적으로 설명을 입력하면 리포지토리를 몇 개의 업스트림 리포지토리에 연결하는 옵션이 제공됩니다. 리포지토리에 없는 패키지를 요청하는 경우 CodeArtifact는 이러한 업스트림 리포지토리에서 각 패키지를 가져와 CodeArtifact 리포지토리에 캐싱합니다.
CodeArtifact 리포지토리도 다른 CodeArtifact 리포지토리를 위한 업스트림 역할을 할 수 있습니다. 일례로 npm public registry 및 PyPi에서 패키지를 가져와 보겠습니다. CodeArtifact는 이러한 외부 연결을 관리하기 위해 사용자를 대신하여 생성한 리포지토리를 npm-store 및 pypi-store로 참조합니다.
[다음]을 클릭하고, 도메인을 선택하거나, 도메인을 소유할 계정을 선택한 후 도메인 이름을 지정하여 새 도메인을 생성합니다. CodeArtifact는 단일 AWS Key Management Service(KMS) 키를 사용하여 도메인에서 모든 자산과 메타데이터를 암호화합니다. 여기에서는 서비스에서 자동으로 생성된 키를 사용하겠지만, 직접 생성한 키를 사용할 수도 있습니다.
[다음]을 클릭하면 설정을 검토할 수 있는 최종 단계로 이동하며, 선택한 업스트림 리포지토리의 패키지 흐름이 예상한 대로인지 확인할 수 있습니다. [리포지토리 생성]을 클릭하면 프로세스가 완료되며, 이 경우 도메인과 리포지토리, 그리고 업스트림을 나타내는 2개의 추가 리포지토리가 생성됩니다.
이 간단한 설정 프로세스를 사용한 후 npm 및 PyPi에서 업스트림을 가져오도록 구성된 도메인과 초기 리포지토리는 이제 소프트웨어 아티팩트 패키지를 저장할 준비가 되었으며 필요한 경우 리포지토리를 추가할 수도 있습니다. 그러나 이 예에서는 다음 단계로 아래와 같이 CodeArtifact 리포지토리에 액세스하여 업스트림 리포지토리, npm 및 pip의 패키지 관리자를 구성합니다.
패키지 관리자 구성
여러 패키지 관리자를 구성하는 단계는 설명서에서 참조할 수 있지만, 리포지토리를 선택했을 때 필요한 지침은 콘솔에서도 편리하게 확인할 수 있습니다. npm으로 시작한 후 먼저 npm-pypi-example-repository를 선택하고 [연결 지침 보기]를 클릭하면 지침에 액세스할 수 있습니다.
표시되는 대화 상자에서 구성하려는 패키지 관리자를 선택하면 관련 지침이 표시됩니다. AWS Command Line Interface(CLI)를 사용하여 전체 프로세스(npm, pip 및 twine의 프로세스)를 관리하거나, CLI 명령을 사용해 토큰을 받은 다음 npm 명령을 실행하여 토큰을 리포지토리 참조에 연결할 수 있습니다.
사용하는 패키지 관리자나 따르는 지침 모음에 관계 없이, 이 명령은 12시간 동안 유효한 인증 토큰을 리포지토리의 패키지 관리자 구성에 연결합니다. 토큰을 새로 고치는 것을 잊어버리지 않기 위해 매일 작업을 시작할 때 토큰을 자동으로 새로 고치도록 관련 명령을 시작 프로파일에 추가하는 접근 방식을 선택했습니다.
동일한 지침에 따라 마찬가지로 AWS CLI 접근 방식을 사용하여 pip를 비슷하게 다시 구성합니다.
C:\> aws codeartifact login --tool pip --repository npm-pypi-example-repository --domain my-example-domain --domain-owner ACCOUNT_ID
Writing to C:\Users\steve\AppData\Roaming\pip\pip.ini
Successfully logged in to codeartifact for pypi
이것으로 완료되었습니다! 이제 Node.js 및 Python 애플리케이션에서 단일 리포지토리를 사용하여 종속성을 구현할 준비가 되었습니다. 리포지토리에 없고 새로 추가한 종속성은 지정된 업스트림 리포지토리에서 가져와 CodeArtifact 리포지토리에 추가됩니다.
몇 가지 간단하게 테스트한 후 게시물을 마무리하겠습니다. 먼저 빈 디렉터리로 변경한 후, 간단한 npm install
명령을 실행합니다. 이 예에서는 AWS Cloud Development Kit를 설치합니다.
npm install -g aws-cdk
CodeArtifact 콘솔에서 리포지토리를 선택하면 AWS Cloud Development Kit의 패키지와 해당 종속성이 이제 업스트림 npm public registry 리포지토리에서 다운로드되어 리포지토리에 추가되는 것을 확인할 수 있습니다.
CodeArtifact 리포지토리가 polyglot이기 때문에 지원되는 모든 유형의 패키지를 저장할 수 있다고 앞서 언급했습니다. 이제 Python 패키지를 추가해 보겠습니다. 이 예에서는 널리 사용되는 이미지 조작 라이브러리인 Pillow를 추가합니다.
> pip3 install Pillow
Looking in indexes: https://aws:****@my-example-domain-123456789012.d.codeartifact.us-west-2.amazonaws.com/pypi/npm-pypi-example-repository/simple/
Collecting Pillow
Downloading https://my-example-domain-123456789012.d.codeartifact.us-west-2.amazonaws.com/pypi/npm-pypi-example-repository/simple/pillow/7.1.2/Pillow-7.1.2-cp38-cp38-win_amd64.whl (2.0 MB)
|████████████████████████████████| 2.0 MB 819 kB/s
Installing collected packages: Pillow
Successfully installed Pillow-7.1.2
콘솔에서 앞서 추가한 npm 패키지와 함께 Python 패키지가 있는 것을 확인할 수 있습니다.
저는 콘솔을 사용하여 작업을 확인했지만 CLI 명령으로 동일한 결과를 얻을 수도 있습니다. 예를 들어 다음 명령을 실행하여 리포지토리 패키지를 나열할 수 있습니다.
aws codeartifact list-packages --domain my-example-domain --repository npm-pypi-example-repository
아시겠지만, 도메인, 리포지토리 및 포함된 패키지를 사용하는 작업에 유용한 추가 명령을 사용할 수 있습니다.
정식 출시
AWS CodeArtifact는 프랑크푸르트, 아일랜드, 뭄바이, 버지니아 북부, 오하이오, 오리건, 싱가포르, 스웨덴, 시드니, 도쿄 리전에서 정식 버전으로 사용할 수 있습니다. 6월 12일 정오(PST)에 Twitch.tv/aws 또는 LinkedIn Live를 시청하십시오. CodeArtifact를 시작하는 방법을 직접 살펴볼 수 있습니다.