컨테이너는 대부분 Fargate를 사용하는 것이 최선의 방법이라고 하지만 이번 토이프로젝트에는 비용을 들이고 싶지 않았다.
도커 컨테이너를 AWS 서비스를 이용해서 배포할때 제일 간단하게 + 비용없이(제일 중요) 하는 방법으로는 Github action(무료)로 ci/cd 파이프라인을 구축하여 ECR(월 5tb 무료)로 옮긴후 EC2로 배포하는 방법이 있다.
//deploy.yml
name: "Deploy to ECR"
"on":
push:
branches:
- "master"
jobs:
ci:
name: "Build Image"
runs-on: "ubuntu-latest"
steps:
- name: "Checkout Code"
uses: "actions/checkout@v4"
- name: "Setup Node version"
uses: actions/setup-node@v4
with:
node-version: 20.x
- name: "Install packages"
run: |
npm install
cd:
name: "Deployment"
runs-on: "ubuntu-latest"
needs:
- ci
env:
CREDENTIAL1 : ${{ secrets.CREDENTIAL1 }}
CREDENTIAL2 : ${{ secrets.CREDENTIAL2 }}
steps:
- name: "Checkout Code"
uses: "actions/checkout@v4"
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4.0.2
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ secrets.AWS_REGION }}
- name: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@v2
- name: Build, tag, and push image to Amazon ECR
id: build-image
env:
ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
ECR_REPOSITORY: ${{ secrets.ECR_REPOSITORY_NAME }}
IMAGE_TAG: ${{ github.sha }}
run: |
docker build --build-arg CREDENTIAL1="${{ env.CREDENTIAL1 }}" \
--build-arg CREDENTIAL2="${{ env.CREDENTIAL2 }}" \
-f Dockerfile -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG .
docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
//Dockerfile
...
FROM base AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
ARG CREDENTIAL1
ARG CREDENTIAL2
ENV CREDENTIAL1=$CREDENTIAL1
ENV CREDENTIAL2=$CREDENTIAL2
RUN \
CREDENTIAL1=$CREDENTIAL1 \
CREDENTIAL2=$CREDENTIAL2 \
npm run build;
...
참고) Dockerfile에서 ARG와 ENV 차이점

