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)을 저장합니다.
- GitHub 저장소로 이동하여 Settings 탭 클릭
- Secrets and variables -> Actions 클릭
- 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 브랜치에 코드가 푸시되면:
- 코드를 체크아웃하고
- Node.js 환경을 설정한 후
- 애플리케이션을 빌드하고
- S3 버킷에 업로드한 뒤
- CodeDeploy를 통해 EC2 인스턴스에 배포하는 작업을 수행합니다.
4. AWS CodeDeploy 설정
4.1 CodeDeploy 애플리케이션 및 배포 그룹 생성
AWS CodeDeploy 콘솔에서 애플리케이션과 배포 그룹을 설정합니다.
- 애플리케이션 생성: 애플리케이션 이름을 지정하고, 배포 유형을 EC2/온프레미스 또는 Lambda로 선택합니다.
- 배포 그룹 생성: 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를 결합한 자동 배포 환경을 구축하는 데 도움이 되길 바랍니다!