티스토리 뷰
이번에 해볼 내용은 Github Action을 사용하여 ECR에 컨테이너(애플리케이션)를 올리고, 이를 직접 EC2 인스턴스 내에서 Docker를 통해 받아와 구동시켜 볼 예정이다.
목차는 아래와 같다.
1. 인스턴스 생성
2. 프로젝트 생성
3. Github Action, AWS ECR 관련 script 작성
4. 인스턴스 접속
5. 인스턴스 내 docker 설치
6. 이미지 받기
7. 프론트 백엔드 라우팅 (revcerse proxying)
8. 컨테이너 실행
1. 인스턴스 생성
인스턴스를 생성한다. pem 키, 보안 그룹등은 편한대로 설정하여 생성하면 된다.
2. 프로젝트 생성
배포하고자 하는 프로젝트를 생성한다. 필자는 이전 블로그에서 사용했던 프로젝트를 사용하였다.
3. Github Action, AWS ECR 관련 script 작성
deploy.yml에선 AWS 자격 증명 -> ECR 로그인 -> Docker 이미지 빌드 및 푸시 과정을 거친다.
deploy.yml 작성 이전에 Dockerfile을 작성한다.
# 1. Build Stage
FROM node:22 AS build
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install --production
COPY . .
# 2. Production Stage
FROM node:22-slim AS production
WORKDIR /usr/src/app
COPY --from=build /usr/src/app /usr/src/app
ENV PORT=3000
EXPOSE 3000
# 애플리케이션 실행
CMD ["node", "app.js"]
.dockerignore 도 작성하자.
node_modules
.git
Dockerfile
.dockerignore
deploy.yml은 ECR에 이미지를 푸시하는 과정까지 작성해준다. 아래와 같다.
name: Deploy to Amazon Web Service Elastic Beanstalk
on:
push:
branches:
- feature
jobs:
deploy:
runs-on: ubuntu-latest
steps:
# 1. 코드 체크아웃
- name: Checkout code
uses: actions/checkout@v3
# 2. AWS 자격 증명 설정
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: us-east-1
# 3. Amazon ECR Public에 로그인
- name: Login to Amazon ECR Public
run: |
aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws/n1b7r8u0
# 4. Docker 이미지 빌드 및 푸시
- name: Build, tag, and push image to Amazon ECR Public
env:
ECR_REGISTRY: public.ecr.aws/n1b7r8u0
ECR_REPOSITORY: ${{ secrets.ECR_REPOSITORY_NAME }}
IMAGE_TAG: ${{ github.sha }}
run: |
docker build . -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
echo "::set-output name=image::$ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG"
4. 인스턴스 접속
인스턴스에 접속한다.
5. 인스턴스 내 docker 설치
ubuntu 기준 명령어는 아래와 같다.
sudo apt update
sudo apt install -y docker.io
sudo systemctl start docker
sudo systemctl enable docker
이어서 aws cli도 설치해준다.
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
aws --version
인증도 해준다.
aws configure
AWS Access Key ID [None]:
AWS Secret Access Key [None]:
Default region name [None]:
Default output format [None]:
6. 이미지 받기
이미지를 받아준다.
docker pull public.ecr.aws/n1b7r8u0/ktb-study:1fcb30131c5924d63d4ea3e6cd440f63a01b8099
7. 프론트 백엔드 라우팅 (revcerse proxying)
리버스 프록싱을 진행할 것이기 때문에 정적 웹 호스팅 서비스를 지원하는 cloudfront에서 설정을 해준다.
경로는 CloudFront > 배포 > distribution_id > 원본 > 원본 생성 이다.
원본을 생성할 땐 origin을 로드밸런서로 이어준다.
이 후, 동작 > 동작 생성 을 클릭해준다.
필자의 웹 프로젝트의 경우, 모든 백엔드의 라우팅 함수에는 '/api/'가 앞에 붙어있다.
따라서 동작은 /api/* 로 설정해준다.
뷰어 프로토콜 정책 > Redirect HTTP to HTTPS
8. 컨테이너 실행
ec2에서 컨테이너를 실행시키고 통신이 잘 되는지 확인한다. 끝!
'AWS' 카테고리의 다른 글
Elastic beanstalk + Git Action 무 중단 배포 구현(완) - 3 (feat. ECR) (0) | 2024.12.16 |
---|---|
Elastic beanstalk + Git Action 무 중단 배포 구현 - 2 (feat. S3) (5) | 2024.12.10 |
Elastic beanstalk + Git Action 무 중단 배포 구현 - 1 (feat. S3) (2) | 2024.12.05 |
EC2 모니터링- Slack 슬랙 연동 하여 알림 받기 (0) | 2024.08.24 |
- Total
- Today
- Yesterday
- docker
- 쿠버네티스 오브젝트
- 마법사 상어와 비바라기 자바
- EB
- 백준
- 구간합구하기
- EC2
- 단지번호붙이기 자바
- k8s
- 코딩테스트
- java #스프링 #spring #server
- 단지번호붙이기 JAVA
- 쿠버네티스 개념
- 백준 상자넣기
- Java #코린이 #자바
- dfs
- 백준 상자 넣기 자바
- 무중단배포
- 자바
- 백준 그림 자바
- 백준 1965 풀이
- 프로그래머스
- Java #객체 #자바기초 #자바
- ECR
- 행렬 테두리 회전하기 자바
- AWS
- StatefulSet
- 자료구조
- java
- k8s object
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |