BLOG

AWS CodeArtifact 통한 소프트웨어 패키지 관리
작성일: 2020-07-31

소프트웨어 아티팩트 저장소 및 관련 패키지 관리자는 개발의 필수 구성 요소입니다. 패키지 관리자와 함께 사전 구축된 소프트웨어 라이브러리를 필요한 시점에 다운로드하고 참조하면 개발 및 빌드 프로세스가 모두 간소화됩니다. Maven Central, npm 공용 레지스트리PyPi(Python Package Index)와 같은 다양한 패키지 리포지토리를 사용할 수 있습니다. 여러 아티팩트 저장소와 함께 작업하면 애플리케이션의 소프트웨어 종속성 버전과 액세스를 신중하게 제어하려는 조직에 몇 가지 문제가 발생할 수 있습니다. 탐지되지 않고 공격 가능한 취약성이 조직의 응용프로그램으로 유입되는 것을 방지하기 위해 종속성에 대한 모든 변경사항을 제어해야 합니다. 중앙 집중식 저장소를 사용하면 조직에서 액세스 제어 및 버전 변경을 보다 쉽게 관리할 수 있으며, 패키지 버전을 업데이트할 때 IT 리더가 새 버전을 사용할 수 있도록 승인했다는 확신을 갖게 됩니다. 대규모 조직에서는 이러한 문제를 해결하기 위해 기존 아티팩트 저장소 소프트웨어로 전환할 수 있지만 이러한 제품은 설치, 구성, 유지 보수 및 확장 등과 관련된 추가적인 문제를 일으킬 수 있습니다. 소규모 조직의 경우 기존 아티팩트 저장소 소프트웨어의 가격과 유지 보수 작업이 만만치 않을 수 있습니다.

 

AWS CodeArtifact는 개발자와 조직이 개발, 구축 및 배포 프로세스에 사용되는 소프트웨어 패키지를 안전하게 저장하고 공유할 수 있도록 지원하는 완전한 관리형 아티팩트 저장소 서비스입니다. 오늘날 CodeArtifact는 MavenGradle(Java), npm 및 실(Javascript), piptwine(Python)과 같은 인기 있는 빌드 도구 및 패키지 관리자와 함께 사용할 수 있으며, 앞으로 더 많은 기능이 제공될 예정입니다. 새 패키지가 수집되거나 저장소에 게시되면 CodeArtifact는 자동으로 확장되며, 완전히 관리되는 서비스로서 CodeArtifact는 인프라 설치 또는 유지보수가 필요하지 않습니다. 또한 CodeArtifact는 지원되는 유형의 아티팩트 패키지를 저장할 수 있는 폴리글롯 아티팩트 저장소입니다. 예를 들어 Maven, npmPython 리포지토리의 패키지를 한 위치에 나란히 저장하도록 단일 CodeArtifact 리포지토리를 구성할 수 있습니다.

 

CodeArtifact 리포지토리는 도메인으로 구성됩니다. 조직에 대해 단일 도메인을 사용한 다음 리포지토리를 추가하는 것이 좋습니다. 예를 들어 팀별로 서로 다른 리포지토리를 사용하도록 선택할 수 있습니다. 패키지를 리포지토리에 게시하거나 외부 리포지토리에서 패키지를 수집하려면 개발자가 자주 사용하는 패키지 관리자 도구를 사용하면 됩니다. 시작 과정을 살펴보겠습니다.

 

CodeArtifact 시작하기

CodeArtifact를 시작하려면 먼저 조직의 도메인을 생성하여 리포지토리를 집계해야 합니다. 도메인은 패키지와 메타데이터를 리포지토리에서 사용하는 경우에도 실제 저장소를 수행하는 데 사용됩니다. 따라서 지정된 npm 패키지와 같은 단일 패키지 자산이 도메인당 한 번만 저장될 수 있는 이점이 있습니다. CodeArtifact 콘솔에서 왼쪽 탐색 패널에서 도메인을 선택하거나 대신 첫 번째 리포지토리를 만들 때 도메인을 만들 수 있습니다. 리포지토리 만들기를 클릭하여 여기서 수행할 작업입니다.

 

 

먼저 리포지토리의 이름과 설명(선택 사항)을 제공하고 리포지토리를 업스트림 리포지토리에 연결할 수 있는 옵션이 있습니다. 리포지토리에 없는 패키지에 대한 요청이 있을 때 CodeArtifact는 업스트림 리포지토리에서 해당 패키지를 가져와 CodeArtifact 리포지토리에 캐시합니다. CodeArtifact 리포지토리는 다른 CodeArtifact 리포지토리의 업스트림 역할도 할 수 있습니다. 예를 들어, npm 공용 레지스트리와 PyPi에서 패키지를 가져올 것입니다. CodeArtifact는 이러한 외부 연결을 npm-store 및 pypi-store로 관리하기 위해 대신 생성한 리포지토리를 참조합니다.

 

 

[Next]을 누른 후 도메인을 소유할 계정을 선택한 후 도메인 이름을 지정하여 도메인을 선택하거나 작성합니다. CodeArtifact는 단일 AWS Key Management Service (KMS)키를 사용하여 도메인의 모든 자산과 메타데이터를 암호화합니다. 여기서는 서비스에 의해 만들어질 키를 사용하지만, 저는 제 키를 사용할 수 있습니다.

 

 

[Next]을 클릭하면 설정을 검토할 수 있는 마지막 단계로 이동하며 선택한 업스트림 리포지토리의 패키지 흐름이 예상대로인지 확인할 수 있습니다. 리포지토리 만들기를 클릭하면 프로세스가 완료되고 이 경우 도메인, 내 리포지토리 및 업스트림을 나타내는 두 개의 추가 리포지토리가 생성됩니다.

 

 

 

이 간단한 설치 프로세스를 사용하면 npmPyPi에서 업스트림을 가져오도록 구성된 내 도메인과 초기 리포지토리가 소프트웨어 아티팩트 패키지를 보유할 수 있으며 필요한 경우 리포지토리를 추가할 수도 있습니다. 그러나 이 예제의 다음 단계는 CodeArtifact 저장소에 대한 액세스 권한을 사용하여 업스트림 저장소인 npm 및 pip의 패키지 관리자를 구성하는 것입니다.

 

 

패키지 매니저 구성

다양한 패키지 관리자를 구성하는 단계는 설명서에서 찾을 수 있지만 콘솔에서는 리포지토리를 선택할 때 필요한 지침도 제공합니다. npm부터 시작하겠습니다. 먼저 npm-pypi-예: repository를 선택하고 connection instructions보기를 클릭하여 지침에 액세스할 수 있습니다.

 

 

결과 대화상자에서 구성할 패키지 관리자를 선택하면 관련 지침이 표시됩니다. 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-c

 

CodeArtifact 콘솔에서 리포지토리를 선택하면 AWS Cloud Development Kit의 패키지와 그 종속성이 업스트림 npm 공용 레지스트리 리포지토리에서 다운로드되어 리포지토리에 추가되었음을 알 수 있습니다.

 

 

앞서 CodeArtifact 리포지토리는 polyglot이며 지원되는 모든 유형의 패키지를 저장할 수 있다고 언급했습니다. 이제 Python 패키지를 추가하겠습니다. 이 경우에는 인기 있는 이미지 manipulation 라이브러리입니다.

 

> 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는 현재 프랑크푸르트, 아일랜드, 뭄바이, 버지니아, 오하이오, 오리건, 싱가포르, 스웨덴, 시드니 및 도쿄 리전에서 이용가능하며, CodeArtifact에 대한 AWS CloudFormation지원도 곧 가능해질 예정입니다.

CodeArtifact 사용에 대한 추가 모범 사례 고려사항을 보려면 이 다음의 블로그 글을 참고해 주시기 바라며, Twitch.tv/aws 또는 LinkedIn Live에선 CodeArtifact를 시작하는 방법을 확인하 실수 있습니다.

 

원문URL: https://aws.amazon.com/ko/blogs/aws/software-package-management-with-aws-codeartifact/

** 메가존 클라우드 TechBlog는 AWS BLOG 영문 게재 글 중에서 한국 사용자들에게 유용한 정보 및 콘텐츠를 우선적으로 번역하여 내부 엔지니어 검수를 받아서, 정기적으로 게재하고 있습니다. 추가로 번역 및 게재를 희망하는 글에 대해서 관리자에게 메일 또는 SNS 페이지에 댓글을 남겨주시면, 우선적으로 번역해서 전달해드리도록 하겠습니다.