티스토리 뷰

반응형
 

CodeArtifact 트와 함께 npm 구성 및 사용 - CodeArtifact

레지스트리 URL은 슬래시 (/) 로 끝나야 합니다. 그렇지 않으면 리포지토리에 연결할 수 있습니다.

docs.aws.amazon.com

  • 부서에서 운영하는 aws codeartifact 사설 npm repository의 리소스에 접근하기 위해서는 Dockerfile에 aws cli를 설치하고, aws configure를 하는 작업을 진행할 수 있다.
  • 그러나 이 경우 다음과 같은 문제가 발생할 수 있다:
    • aws credential이 컨테이너 내부에 남게 된다.
    • 또는 Dockerfile에서 aws 명령어를 사용하기 위해 ACCESS_KEY_ID 또는 SECRET_ACCESS_KEY를 컨테이너에 넘겨주어야 한다.
  • 특히 두 번째의 경우 ARG를 사용한다고 하더라도 docker image history [image_id]에서 credential이 plain text로 남는 문제가 있다.
  • 이러한 경우에 대비하여 aws codeartifact는 CODEARTIFACT_AUTH_TOKEN을 통한 인증을 제공한다!

 

사전 준비

  • 다음의 항목을 로컬 PC에서 준비한다:
    • aws cli 설치
    • aws codeartifact에 접근이 가능한 aws cli credential 및 aws configure 과정

 

실습

[~] CODEARTIFACT_AUTH_TOKEN=`aws codeartifact get-authorization-token --domain [MY_DOMAIN] --domain-owner [DOMAIN_OWNER] --region [REGION] --query authorizationToken --output text`
[~] npm config set registry=https://[MY_DOMAIN]-[DOMAIN_OWNER].d.codeartifact.[REGION].amazonaws.com/npm/[MY_REPOSITORY]/
[~] npm config set //[MY_DOMAIN]-[DOMAIN_OWNER].d.codeartifact.[REGION].amazonaws.com/npm/[MY_REPOSITORY]/:_authToken=$CODEARTIFACT_AUTH_TOKEN
[~] npm config set //[MY_DOMAIN]-[DOMAIN_OWNER].d.codeartifact.[REGION].amazonaws.com/npm/[MY_REPOSITORY]/:always-auth=true
[~]
  • 대괄호 내부의 내용은 다음과 같이 입력한다.
    • MY_DOMAIN: 접근하고자 하는 aws codeartifact 도메인
    • DOMAIN_OWNER: MY_DOMAIN을 소유한 계정 ID
      • 소유한 계정이 자기 자신이라면 aws sts get-caller-identity로도 확인 가능하다.
    • MY_REPOSITORY: aws codeartifact의 리포지토리 이름
    • REGION: aws codeartifact가 존재하는 리전
  • 참고로, registry의 엔드포인트(위 코드 블럭의 'https://[MY_DOMAIN]-[DOMAIN_OWNER].d.codeartifact.[REGION].amazonaws.com/npm/[MY_REPOSITORY]/)'는 다음의 명령어로도 확인할 수 있다.
[~] aws codeartifact get-repository-endpoint --domain [MY_DOMAIN] --domain-owner [DOMAIN_OWNER] --repository [MY_REPOSITORY] --region [REGION] --format npm
[~]
  • 위 과정의 결과는 echo 및 .npmrc에서 확인할 수 있다.
[~] echo $CODEARTIFACT_AUTH_TOKEN
# CODEARTIFACT_AUTH_TOKEN이 출력된다.
[~] cat ~/.npmrc
registry=https://[MY_DOMAIN]-[DOMAIN_OWNER].d.codeartifact.[REGION].amazonaws.com/npm/[MY_REPOSITORY]/
//[MY_DOMAIN]-[DOMAIN_OWNER].d.codeartifact.[REGION].amazonaws.com/npm/[MY_REPOSITORY]/:_authToken=[CODEARTIFACT_AUTH_TOKEN]
//[MY_DOMAIN]-[DOMAIN_OWNER].d.codeartifact.[REGION].amazonaws.com/npm/[MY_REPOSITORY]/:always-auth=true
[~]
  • 이제 준비된 .npmrc 파일을 Dockerfile의 COPY를 통해 내부로 넘겨준다.
    • Dockerfile이 존재하는 디렉토리가 [temp]라고 가정하면, 우선 temp에 .npmrc를 복사해두도록 하자!
[~] cd temp
[~/temp] cp ~/.npmrc .
[~/temp]
  • 이 때, Dockerfile의 예시는 다음과 같다.
[~/temp] vi Dockerfile
FROM node:14-alpine

ENV PORT=3000

COPY .npmrc package.json package-*.json ./
RUN npm install

EXPOSE ${PORT}
ENTRYPOINT [ "node", "app.js" ]

[~/temp]
  • COPY를 통해 temp 디렉토리의 npmrc를 내부로 넘겨주며, npm install은 해당 npmrc를 토대로 동작하게 된다.
  • docker build . 를 통해 확인해보자!
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함