Skip to content
On this page

EC2 기반 아키텍처에서의 AWS CodePipeline을 통한 배포 구성

문제 정의

프로젝트와 담당자별로 일관되지 않은 배포 환경과 프로세스로 인해 프로젝트 교체나 담당자 변경 시 일관성 있는 배포 환경을 보장하기 어려웠습니다.

개요

태그 기반의 EC2 인스턴스에 대해 구성원이 일관된 배포 환경을 마련하고, 자동화된 지속 배포(CD) 환경을 구축했습니다. 이를 통해 프로젝트 담당자가 변경되더라도 일관적인 방법으로 서버에 코드를 배포할 수 있게 되었습니다.

image.png

배경 지식

AWS CodePipeline은 소프트웨어 배포를 자동화할 수 있는 CI/CD 서비스입니다. EC2 인스턴스와 AWS 시스템 매니저(SSM)를 활용하여 배포의 일관성을 보장할 수 있습니다.

작업 내용

이 문서에서는 EC2 인스턴스에 대한 자동화된 배포 파이프라인을 AWS CodePipeline을 사용하여 구성하고 그 과정을 설명합니다.

사용 AWS 서비스 및 역할

CodePipeline

  • 역할: 자동으로 코드를 가져와서 빌드하고 배포하는 역할을 수행합니다.
    • Github 저장소 감지: 특정 브랜치에 푸시 또는 PR이 발생했을 때 트리거됩니다.
    • 배포 프로세스 관리: 새로운 코드 버전을 EC2 인스턴스에 배포합니다.
    • S3 사용: 최신 코드를 S3에 업로드 후 EC2가 이를 다운로드하여 배포합니다.

SSM (AWS Systems Manager)

  • 역할: EC2 인스턴스와 AWS 서비스 간의 원격 명령 실행 및 관리 기능을 수행합니다.
    • EC2 인스턴스 접근: 외부에서 직접 접근할 수 없는 EC2에 AWS SSM 서비스를 통해 명령을 전합니다.

이 과정에서 주체별 역할을 정리하면 다음과 같습니다.

단계주체작업 내용
1개발자GitHub에 코드 푸시
2CodePipeline코드 변경 감지 후 S3에 업로드
3CodePipelineSSM을 통해 EC2에 배포 요청
4SSMEC2의 ssm-agent에 명령 전달
5EC2 (ssm-agent)S3에서 코드 다운로드 및 배포

AWS 배포 자동화 작업 흐름

image.png

1. GitHub에 코드 푸시

  • GitHub 특정 브랜치에 코드 변경이 발생하면, CodePipeline이 자동으로 시작됩니다.

2. CodePipeline의 S3 업로드

  • Pipeline이 실행되며, 소스 코드를 S3 버킷에 업로드하여 준비합니다.

3. CodePipeline의 SSM을 통한 EC2 배포 요청

  • CodePipeline이 EC2에 직접 접속하는 대신 SSM을 통해 안전하게 명령을 전달합니다.

4. SSM이 EC2 내 ssm-agent를 통해 명령 실행

  • EC2 내 amazon-ssm-agent가 SSM 명령을 받고, 이를 기반으로 S3에서 최신 배포 파일을 다운로드하고, 배포 및 서비스 재시작을 처리합니다.

작업 수행 단계

  1. CodePipeline 생성

    • Github와 연결하고, 코드 변경 시 트리거되도록 설정합니다.
    • EC2 인스턴스는 태그 기반으로 배포 대상을 지정합니다.
  2. 권한 설정

    • CodePipeline 기본 롤에 S3 및 EC2 목록 조회 권한을 추가합니다.
    • EC2 인스턴스에 SSM 관리 권한(SSMInstancCore)을 부여하고 롤을 지정하여 시스템 관리 지원을 활성화합니다.
  3. 배포 수행

    • CodePipeline이 트리거되어 S3에 코드를 업로드하고, SSM을 통해 EC2 인스턴스로 배포합니다.

이 과정은 DevOps의 원활한 환경 제공을 목표로 합니다. 이를 통해 배포 과정의 자동화와 일관성을 확보하게 됩니다.

KeyWords: AMI, AWS, CI/CD, Cloud, CodePipeline, EC2, IAM, Lambda, S3, aws-ssm-agent SubType: CI/CD Type: DevOps