상세 컨텐츠

본문 제목

elastic-beanstalk 무중단 배포 세팅

Aws

by 인생도NIO 2023. 1. 5. 15:47

본문

너무 많이 해메가지고..신입개발자가 살아남기란 쉽지가 않다 깨알 블로그정리.

 

난 두가지 방식으로 작업을 진행했다 . aws에 code-pipeline을 이용하여 자동화 배포 시스템 / github에서 제공하는 github-action을 사용한 무중단 자동화 시스템을 사용했다 .

 

name: Backend CI/CD

on:
push:
branches: [main]

jobs:
build:
name: Build and Test
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [16.x]

steps:
- uses: actions/checkout@v2
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v2
with:
node-version: ${{ matrix.node-version }}
cache: "npm"

# Download AWS CLI 2
- name: Install AWS CLI 2
run: |
unzip awscliv2.zip
which aws
sudo ./aws/install --bin-dir /usr/local/bin --install-dir /usr/local/aws-cli --update

# Configure AWS credentials
- 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: ${{ secrets.AWS_REGION }}

# npm install for ci
- run: npm ci

# - run: npm start

deploy:
name: BeanStalk Deploy
runs-on: ubuntu-latest
strategy:
matrix:
node-version: ["16.x"]
needs: build
steps:
- uses: actions/checkout@v2

# Initialize Node.js
- name: Install Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}

# Install project dependencies
- name: Install dependencies
run: npm install

# Download AWS CLI 2
- name: Install AWS CLI 2
run: |
unzip awscliv2.zip
which aws
sudo ./aws/install --bin-dir /usr/local/bin --install-dir /usr/local/aws-cli --update
# Configure AWS credentials
- 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: ${{ secrets.AWS_REGION }}

# Build
# - name: Run build
# run: npm run build

# Make upload zip file
- name: Generate deployment package
run: zip -r deploy.zip . -x '*.git*' './aws/*' './node_modules/*' './dist/*' awscliv2.zip

# Deploy to Elastic Beanstalk
- name: Deploy to EB
uses: einaregilsson/beanstalk-deploy@v21
with:
aws_access_key: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws_secret_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
application_name: TESTNODE
environment_name: Testnode-env
region: ap-northeast-2
version_label: 2
deployment_package: deploy.zip

내가 작성한 deploy.yml 파일이다. 

먼저 간단한 expressJS 코드를 세팅하고

elastic-beanstalk 환경생성 부분
클릭하고 들어가서 두번째

웹서버 환경을 선택한다 .

애플리케이션명을 작성을 한다.
환경정보와 플랫폼버전 정보
애플리케이션코드

샘플 애플리케이션 과 기존 코드를 업로드할거면 코드업로드를 눌러 맞는 환경을 세팅해준다. 난 최초 샘플애플리케이션을 선택하여 작업을 진행하였다 .
그리고 추가 구성옵션을 눌러서 무중단 배포에 필요한 시스템을 한번 만들어보자 .

사전설정부분

나는 로드밸런서를 사용할것이기에 사용자 지정구성으로 선택을 하였다 . 만약에 단일 인스턴스 선택시엔 로드밸런서를 구성할수가없다 .

 

소프트웨어를 수정을 눌러서 프록시서버는 Nginx를 선택하여 X-Ray데몬은 활성하지않고, 로그교체도 활성화 하지않겠다 .

환경속성

이것만 소프트웨어에서는 설정을 해두었다 expressJS 서버포트를 5000으로 포워딩 할것이기에 난 이것을 사용하였다 .

로드밸런서 설정부분

로드밸런서에서 보면 최소와 최대가 있는데 최소값과 최댓값을 잘못설정하면 비용이 증가하는것을 몸소 느낄수있을것이다 . 

난 최소 1개 최대 2개로 설정을 해두겠다 . default로는 최소1개 최대4개로 잡히기때문에 최소 1개 최대2개로 설정하였다 .

로드밸런서 인스턴스유형

인스턴스유형은 t2.micro를 사용하기로 했다 프리티어 버전이고, t2small 이 default로 잡히는데 난 t2micro만 사용할것이다.

롤링업데이트와 배포설정부분

롤링 업데이트는 배포방식만 수정하였다 배포방식은 추가 배치를 사용한 롤링 이게 배치를 하나 더 돌려 새로운 인스턴스가 활성화될때까지 기존 인스턴스를 종료하지않고 업데이트가 마치는시점에 기존인스턴스를 종료시키고 새로운 인스턴스에서 새로운 버전을 돌리게끔 하는 무중단 배포이다 .

이로써 모든 설정을 끝냈고 , 깃허브 액션에서 동작하는지 확인을 해보겠다 . deploy.yml에 환경명과 애플리케이션명이 다른이유는 필자는 기존에 미리 세팅을 해두었기때문에.. 참고 바랍니다 .

이렇게 깃헙 명령어를 터미널에 치고

깃허브에 액션에 들어가면 이렇게 진행중에있다.
이렇게 완료가 된다.
요러면 내가 세팅해놓은 노드 response가 뜬다.!!! 짝짝짝

관련글 더보기