AWS EKS, ECR을 통한 Continuous Deploy 세팅

AWS EKS, ECR을 통한 Continuous Deploy 세팅

생성일
2023년 05월 02일
태그
AWS EKS
AWS ECR
Docker
argoCD
AWS S3

Background

팀 내부에서 작업한 내용을 테스트할 수 있는 stage 환경이 있다. stage 환경은 AWS Amplify를 통한 파이프라인이 구축되어있다. AWS Amplify를 이용한 호스팅은 매우 편리하나, 내부 Cloudfront를 커스텀할 수 없다는 단점이 있었다. Cloudfront 의 IP를 고정할 수 없어 종종 서버 데이터를 잘 불러오지 못하는 문제가 있었다.
AWS Korea 측에서도 IP 고정은 불가능하다고 말씀을 주셔서 Amplify 로 배포되어 있는 stage 환경을 도커를 사용하여 EKS 로 배포하는 방식으로 바꾸기로 결정하였다.

적용해보기

Dockerfile 를 작성해준다. 작성된 Dockerfile 을 기반으로 이미지를 생성한다.
FROM node:18-alpine AS base RUN npm install -g pnpm@7.25.0 RUN pnpm --version FROM base AS deps RUN apk add --no-cache libc6-compat WORKDIR / # Install Dependencies COPY environments/.env.stg /environments/.env.stg COPY package.json pnpm-lock.yaml ./ # Rebuild the source code only when needed FROM base AS builder WORKDIR / COPY . . COPY --from=deps environments/.env.stg /environments/.env.stg # COPY .env.stg .env.production RUN pnpm install RUN pnpm build:stg # Production image, copy all the files and run next FROM base AS runner WORKDIR / ENV NODE_ENV=production COPY --from=builder environments/.env.stg /environments/.env.stg RUN addgroup main-web-v2 && adduser -S -u 1002 main-web-v2 main-web-v2 # Automatically leverage output traces to reduce image size # https://nextjs.org/docs/advanced-features/output-file-tracing COPY --from=builder /public ./public COPY --from=builder /node_modules ./node_modules COPY / ./ COPY --from=builder --chown=main-web-v2:main-web-v2 /.next ./.next USER main-web-v2 EXPOSE 3000 ENV PORT 3000 CMD ["pnpm", "start:stg"]
 
Dockerfile 을 기반으로 생성된 도커 이미지는 AWS ECR에 올라가고, 이를 기반으로 EKS로 배포가 가능했다. 해당 작업들은 아키텍쳐팀에 협조를 요청하여 진행하였다.

Issue

Bitbucket Repository에 환경변수 파일들이 올라가지 않기 때문에 Dockerfile 에서 환경 변수 파일에 접근이 불가능하였다.
따라서, 환경변수 파일을 S3 버킷에 저장하고 파이프라인 명령어에 S3 버킷의 환경 변수 파일을 다운로드 받는 과정을 추가하였다.
  • Bitbucket Repository Variables에 다음과 같은 환경변수를 추가해준다.
notion image
  • bitbucket-pipelines.yml 파일에 환경변수 다운로드 받는 커맨드를 추가해준다.
script: - eval $START_NOTIFICATION - eval $DOWNLOAD_ENV_FILES - eval $DOCKER_BUILD_PUSH_SCRIPT
 
다음과 같이 파이프라인 과정에서 S3 버킷에 있는 환경변수 파일을 잘 다운받는다.
notion image

댓글

guest