Amazon Web Services 한국 블로그

AWS CodeArtifact, Ruby gem 저장소 추가 기능 출시

이제 Ruby 개발자는 AWS CodeArtifact를 사용하여 gem을 안전하게 저장하고 검색할 수 있습니다. CodeArtifact는 gembundler와 같은 표준 개발자 도구와 통합됩니다.

애플리케이션은 네트워크 액세스, 암호화 또는 데이터 조작과 같은 일반적인 작업에 재사용 가능한 코드를 제공하여 개발 속도를 높이기 위해 종종 수많은 패키지를 사용합니다. 또한 개발자는 SDK 중에서도 AWS SDK 등을 포함시켜 원격 서비스에 액세스합니다. 이러한 패키지는 조직 내에서 제공되거나 오픈 소스 프로젝트와 같은 타사에서 제공할 수 있습니다. 패키지 및 종속 항목 관리는 소프트웨어 개발의 필수 요소입니다. Java, C#, JavaScript, Swift, Python과 같은 언어에는 종속 항목을 다운로드하고 해결하기 위한 도구가 있으며, Ruby 개발자는 일반적으로 gem번들러를 사용합니다.

하지만 타사 패키지를 사용할 경우 법적 및 보안상 문제가 발생합니다. 조직은 패키지 라이선스가 프로젝트와 호환되고 지적 재산권을 위반하지 않도록 해야 합니다. 또한 포함된 코드가 안전하며 공급망 공격이라고 하는 취약점을 유발하지 않는지 확인해야 합니다. 이러한 문제를 해결하기 위해 조직에서는 일반적으로 비공개 패키지 서버를 사용합니다. 개발자는 비공개 리포지토리를 통해 제공하고 보안 및 법무 팀에서 검토한 패키지만 사용할 수 있습니다.

CodeArtifact는 기본 인프라를 관리하지 않고도 내부 개발자 팀에 패키지를 안전하게 배포할 수 있는 관리형 서비스입니다. CodeArtifact는 이제 npm, PyPI, Maven, NuGet, SwiftPM 및 일반 형식 외에도 Ruby gem을 지원합니다.

gem번들러와 같은 기존 도구를 사용하여 AWS 클라우드의 CodeArtifact 리포지토리에서 Ruby gem 종속 항목을 게시하고 다운로드할 수 있습니다. CodeArtifact에 패키지를 저장한 후 Gemfile에서 참조할 수 있습니다. 그러면 빌드 시스템이 빌드 프로세스 중에 CodeArtifact 리포지토리에서 승인된 패키지를 다운로드합니다.

시작하기
조직의 다른 개발 팀과 공유할 패키지를 개발 중이라고 생각해 보세요.

이 데모에서는 환경을 준비하고, 패키지를 리포지토리에 업로드하며, 이 특정 패키지 빌드를 프로젝트의 종속 항목으로 사용하는 방법을 보여줍니다. Ruby 패키지와 관련된 단계에 중점을 두고 있다고 해봅시다. 동료 Steven이 작성한 자습서를 읽고 CodeArtifact를 시작할 수 있습니다.

패키지 리포지토리(MyGemsRepo) 및 도메인(stormacq-test)이 이미 구성되어 있는 AWS 계정을 사용하고 있습니다.

CodeArtifact - Ruby 리포지토리

Ruby 도구가 CodeArtifact 리포지토리에 액세스할 수 있도록 먼저 CodeArtifact에서 인증 토큰을 수집합니다.

export CODEARTIFACT_AUTH_TOKEN=`aws codeartifact get-authorization-token \
                                     --domain stormacq-test              \
                                     --domain-owner 012345678912         \
                                     --query authorizationToken          \
                                     --output text`

export GEM_HOST_API_KEY="Bearer $CODEARTIFACT_AUTH_TOKEN"

인증 토큰은 12시간 후에 만료된다는 점에 유의하세요. 새 토큰을 얻으려면 12시간 후에 이 명령을 반복해야 합니다.

그런 다음 저장소 엔드포인트를 요청합니다. 도메인 이름과 도메인 소유자(AWS 계정 ID)를 전달합니다. --format ruby 옵션에 주목합니다.

export RUBYGEMS_HOST=`aws codeartifact get-repository-endpoint  \
                           --domain stormacq-test               \
                           --domain-owner 012345678912          \
                           --format ruby                        \
                           --repository MyGemsRepo              \
                           --query repositoryEndpoint           \
                           --output text`

이제 리포지토리 엔드포인트와 인증 토큰이 생겼으니 gem은 이러한 환경 변수 값을 사용하여 비공개 패키지 리포지토리에 연결합니다.

아주 간단한 프로젝트를 만들어 빌드하고 패키지 리포지토리로 보냅니다.

CodeArtifact - 사용자 지정 패키지 빌드 및 푸시

$ gem build hola.gemspec 

Successfully built RubyGem
  Name: hola-codeartifact
  Version: 0.0.0
  File: hola-codeartifact-0.0.0.gem
  
$ gem push hola-codeartifact-0.0.0.gem 
Pushing gem to https://stormacq-test-486652066693.d.codeartifact.us-west-2.amazonaws.com/ruby/MyGemsRepo...

콘솔에서 패키지를 사용할 수 있는지 확인합니다.

CodeArtifact - Hola 패키지 있음

이제 패키지를 사용할 수 있게 되었으니 평소처럼 프로젝트에서 사용할 수 있습니다. 여기에는 내 컴퓨터에 로컬 ~/.gemrc 파일을 구성하는 작업이 포함됩니다. 콘솔에서 제공하는 지침을 따르고 ${CODEARTIFACT_AUTH_TOKEN}을 실제 값으로 바꾸는지 확인합니다.

CodeArtifact - 리포지토리에 연결하기 위한 콘솔 지침

~/.gemrc가 올바르게 구성되면 평소와 같이 gem을 설치할 수 있습니다. 내 비공개 gem 리포지토리에서 다운로드됩니다.

$ gem install hola-codeartifact

Fetching hola-codeartifact-0.0.0.gem
Successfully installed hola-codeartifact-0.0.0
Parsing documentation for hola-codeartifact-0.0.0
Installing ri documentation for hola-codeartifact-0.0.0
Done installing documentation for hola-codeartifact after 0 seconds
1 gem installed

업스트림에서 설치
리포지토리를 업스트림 소스와 연결할 수도 있습니다. 요청하면 업스트림에서 자동으로 gem을 가져옵니다.

리포지토리를 rubygems.org와 연결하려면 콘솔을 사용하거나 다음을 입력합니다.

aws codeartifact  associate-external-connection \
                   --domain stormacq-test       \
                   --repository MyGemsRepo      \
                   --external-connection public:ruby-gems-org

{
    "repository": {
        "name": "MyGemsRepo",
        "administratorAccount": "012345678912",
        "domainName": "stormacq-test",
        "domainOwner": "012345678912",
        "arn": "arn:aws:codeartifact:us-west-2:012345678912:repository/stormacq-test/MyGemsRepo",
        "upstreams": [],
        "externalConnections": [
            {
                "externalConnectionName": "public:ruby-gems-org",
                "packageFormat": "ruby",
                "status": "AVAILABLE"
            }
        ],
        "createdTime": "2024-04-12T12:58:44.101000+02:00"
    }
}

연결되면 CodeArtifact를 통해 모든 gem을 가져올 수 있습니다. 로컬에서 사용할 수 없는 경우 업스트림에서 패키지를 자동으로 가져옵니다.

$ gem install rake 

Fetching rake-13.2.1.gem
Successfully installed rake-13.2.1
Parsing documentation for rake-13.2.1
Installing ri documentation for rake-13.2.1
Done installing documentation for rake after 0 seconds
1 gem installed

콘솔을 사용하여 이제 내 리포지토리에서 레이크 패키지를 사용할 수 있는지 확인합니다.

알아야 할 사항
첫 번째 Ruby 패키지를 업로드하기 전에 염두에 두어야 할 몇 가지 사항이 있습니다.

  • 이전 지침에 표시된 명령을 시도하기 전에 최신 버전의 AWS CLI로 업데이트해야 합니다. 최신 버전의 CLI만이 CodeArtifact의 Ruby 리포지토리에 대해 알고 있습니다.
  • 인증 토큰은 12시간 후에 만료됩니다. 갱신을 자동화하는 스크립트를 작성하거나 예약된 AWS Lambda 함수를 사용하여 토큰을 AWS Secrets Manager(예시)에 안전하게 저장하기를 권장합니다.

요금 및 가용성
Ruby 패키지의 CodeArtifact 비용은 이미 지원되는 다른 패키지 형식의 비용과 동일합니다. CodeArtifact 요금은 스토리지(월별 GB 단위), 요청 수, 인터넷 또는 다른 AWS 리전으로의 데이터 전송이라는 세 가지 지표에 따라 달라집니다. 동일한 리전의 AWS 서비스로의 데이터 전송에는 요금이 부과되지 않습니다. 예를 들어, CodeArtifact 데이터 전송 요금 부과 없이 Amazon Elastic Compute Cloud(Amazon EC2) 또는 AWS CodeBuild에서 지속적 통합 및 배포(CI/CD) 작업을 실행할 수 있습니다. 평소처럼 세부 정보는 요금 페이지에서 확인할 수 있습니다.

CodeArtifact for Ruby 패키지는 CodeArtifact가 제공되는 13개 리전 모두에서 사용할 수 있습니다.

이제 Ruby 애플리케이션을 구축하고 비공개 패키지를 CodeArtifact에 업로드하세요!

— seb