카테고리 없음

GitHub Actions를 사용한 CodeDeploy 예제 가이드

idea9329 2024. 10. 17. 11:18
반응형

 

GitHub Actions AWS CodeDeploy를 결합하면 애플리케이션을 자동으로 배포하는 강력한 CI/CD 파이프라인을 구축할 수 있습니다. 이 글에서는 GitHub Actions를 사용하여 AWS CodeDeploy로 애플리케이션을 자동 배포하는 방법을 단계별로 설명하고, 이를 효과적으로 활용하는 방법을 소개합니다. CI/CD 파이프라인을 통해 개발에서 배포까지의 작업을 자동화하고, 코드의 변경 사항을 빠르게 반영할 수 있는 프로세스를 구축할 수 있습니다.


1. GitHub Actions와 AWS CodeDeploy란?

1.1 GitHub Actions

GitHub Actions는 GitHub에서 제공하는 CI/CD 도구로, 코드 저장소에서 발생하는 이벤트에 따라 작업을 자동으로 실행할 수 있습니다. 주로 코드 빌드, 테스트, 배포를 자동화하는 데 사용됩니다.

1.2 AWS CodeDeploy

AWS CodeDeploy는 애플리케이션을 EC2 인스턴스, AWS Lambda 함수, 또는 온프레미스 서버에 배포할 수 있는 서비스입니다. 이를 통해 배포 과정에서 최소한의 다운타임을 유지하면서 배포를 자동으로 진행할 수 있습니다.


2. GitHub Actions를 이용한 CodeDeploy 설정

2.1 사전 요구 사항

GitHub Actions와 AWS CodeDeploy를 사용하기 위해서는 다음의 설정이 필요합니다.

  • AWS 계정: CodeDeploy를 사용할 AWS 계정이 있어야 합니다.
  • IAM Role 및 사용자: GitHub에서 AWS에 액세스할 수 있도록 필요한 권한을 가진 IAM Role 및 사용자 생성이 필요합니다.
  • S3 버킷: 배포를 위한 애플리케이션 파일이 저장될 S3 버킷이 필요합니다.
  • EC2 인스턴스: CodeDeploy를 통해 배포할 대상 EC2 인스턴스가 필요합니다.

2.2 IAM 사용자 설정

AWS 콘솔에서 GitHub Actions가 사용할 수 있는 IAM 사용자를 생성하고, CodeDeploy 및 S3에 액세스할 수 있는 권한을 부여합니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:*",
        "codedeploy:*",
        "ec2:*"
      ],
      "Resource": "*"
    }
  ]
}

이 사용자에 대한 Access Key Secret Key를 생성하여 GitHub Actions에 사용할 수 있도록 설정합니다.


3. GitHub Actions 설정

3.1 AWS 자격 증명 저장

GitHub 저장소의 Secrets에 AWS 자격 증명(Access Key ID 및 Secret Access Key)을 저장합니다.

  1. GitHub 저장소로 이동하여 Settings 탭 클릭
  2. Secrets and variables -> Actions 클릭
  3. New repository secret 버튼 클릭하여 AWS_ACCESS_KEY_ID와 AWS_SECRET_ACCESS_KEY 저장

3.2 GitHub Actions Workflow 파일 생성

main.yml 또는 원하는 이름의 GitHub Actions Workflow 파일을 생성합니다. 이 파일은 .github/workflows/ 디렉토리 안에 위치해야 하며, 여기서 CodeDeploy와의 통합 작업을 정의합니다.

name: Deploy to AWS EC2 via CodeDeploy

on:
  push:
    branches:
      - main  # main 브랜치에 푸시할 때 트리거

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v2

      - name: Set up Node.js (또는 다른 빌드 환경)
        uses: actions/setup-node@v2
        with:
          node-version: '14'

      - name: Install dependencies
        run: npm install  # 예: Node.js 프로젝트 의존성 설치

      - name: Build project
        run: npm run build  # 예: 빌드 명령어 실행

      - name: Zip the project files
        run: zip -r my-app.zip .  # zip 파일로 압축

      - name: Upload to S3
        run: aws s3 cp my-app.zip s3://your-s3-bucket/my-app.zip
        env:
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}

      - name: Deploy to AWS CodeDeploy
        run: |
          aws deploy create-deployment \
            --application-name MyApp \
            --deployment-config-name CodeDeployDefault.OneAtATime \
            --deployment-group-name MyDeploymentGroup \
            --s3-location bucket=your-s3-bucket,key=my-app.zip,bundleType=zip
        env:
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}

위 예제는 main 브랜치에 코드가 푸시되면:

  1. 코드를 체크아웃하고
  2. Node.js 환경을 설정한 후
  3. 애플리케이션을 빌드하고
  4. S3 버킷에 업로드한 뒤
  5. CodeDeploy를 통해 EC2 인스턴스에 배포하는 작업을 수행합니다.

4. AWS CodeDeploy 설정

4.1 CodeDeploy 애플리케이션 및 배포 그룹 생성

AWS CodeDeploy 콘솔에서 애플리케이션 배포 그룹을 설정합니다.

  1. 애플리케이션 생성: 애플리케이션 이름을 지정하고, 배포 유형을 EC2/온프레미스 또는 Lambda로 선택합니다.
  2. 배포 그룹 생성: EC2 인스턴스에서 실행될 배포 그룹을 생성하고, 대상 EC2 인스턴스를 선택합니다. 또한 롤백, 로드밸런서 설정 등을 선택할 수 있습니다.

4.2 AppSpec 파일 구성

AppSpec 파일은 CodeDeploy가 애플리케이션을 배포할 때 어떤 작업을 수행해야 하는지를 정의하는 파일입니다. 프로젝트 루트에 appspec.yml 파일을 추가합니다.

version: 0.0
os: linux
files:
  - source: /
    destination: /home/ec2-user/my-app

hooks:
  ApplicationStart:
    - location: scripts/start_server.sh
      timeout: 300
      runas: ec2-user

이 파일은 애플리케이션을 배포할 위치와 배포 후 실행할 스크립트 등을 정의합니다.


5. 결론

GitHub Actions와 AWS CodeDeploy를 사용하면 자동 배포를 간편하게 설정할 수 있습니다. 이번 가이드에서는 GitHub Actions에서 애플리케이션을 S3로 업로드하고, AWS CodeDeploy를 통해 EC2 인스턴스에 배포하는 전체 프로세스를 소개했습니다. CI/CD 파이프라인을 통해 코드 변경 사항이 즉시 배포되며, 이를 통해 개발 속도와 효율성을 크게 향상시킬 수 있습니다.

이 글을 통해 GitHub Actions와 AWS CodeDeploy를 결합한 자동 배포 환경을 구축하는 데 도움이 되길 바랍니다!

반응형