AWS 배포 자동화

개발 공부 기록·2021년 8월 20일
0

Network

목록 보기
9/9
post-thumbnail

Automated Deployment

배포 자동화란 한 번의 클릭 혹은 명령어 입력을 통해 전체 배포 과정을 자동으로 진행하는 것

배포 자동화가 필요한 이유

  • 수동적이고 반복적인 배포 과정을 자동화함으로써 시간이 절약됨
  • 휴먼 에러(Human Error)를 방지

휴먼 에러란 사람이 수동적으로 배포 과정을 진행하는 중에 생기는 실수
특정 과정을 생략하거나 다르게 진행하여 오류가 발생하는 것이 휴먼 에러의 예
배포 자동화를 통해 전체 배포 과정을 매번 일관되게 진행하는 구조를 설계하여 휴먼 에러 발생 가능성을 낮춤

배포 자동화 파이프라인

배포에서 파이프라인(Pipeline)이란 용어는 소스 코드의 관리부터 실제 서비스로의 배포 과정을 연결하는 구조

파이프라인은 전체 배포 과정을 여러 단계(Stages)로 분리

각 단계는 파이프라인 안에서 순차적으로 실행되며, 단계마다 주어진 작업(Actions)을 수행

파이프라인의 대표적인 세 단계

1. Source 단계

Source 단계에서는 원격 저장소에 관리되고 있는 소스 코드에 변경 사항이 일어날 경우, 이를 감지하고 다음 단계로 전달하는 작업을 수행

2. Build 단계

Build 단계에서는 Source 단계에서 전달받은 코드를 컴파일, 빌드, 테스트하여 가공하고 Build 단계를 거쳐 생성된 결과물을 다음 단계로 전달하는 작업을 수행

3. Deploy 단계

Deploy 단계에서는 Build 단계로부터 전달받은 결과물을 실제 서비스에 반영하는 작업을 수행

파이프라인의 단계는 상황과 필요에 따라 더 세분화되거나 간소화될 수 있다

aws 개발자 도구

aws 개발자 도구 섹션에서 제공하는 서비스를 활용하여 배포 자동화 파이프라인을 구축 가능

1. CodeCommit

Source 단계를 구성할 때 CodeCommit 서비스를 사용

CodeCommitGitHub와 유사한 서비스를 제공하는 버전 관리 도구

GitHub와 비교했을 때 CodeCommit 서비스는 보안과 관련된 기능에 강점을 가짐 (소스 코드의 유출이 크게 작용하는 기업에서는 매우 중요한 요소)

CodeCommit을 사용할 때는 과금 가능성을 고려 (프리티어에서 한개 이상으로 사용할 시 사용 요금이 부과될 수도 있음)
=> 사이드 프로젝트나 가볍게 작성한 소스 코드를 저장해야 할 경우에는 GitHub를 이용하는 것이 효과적

2. CodeBuild

Build 단계에서는 CodeBuild 서비스를 사용

CodeBuild 서비스를 통해 유닛 테스트, 컴파일, 빌드와 같은 빌드 단계에서 필수적으로 실행되어야 할 작업을 명령어를 통해 실행 가능

buildspec.yml은 CodeBuild가 빌드를 실행하는 데 사용하는 YAML 형식의 빌드 명령 및 관련 설정의 모음

3. CodeDeploy

Deploy 단계를 구성할 때는 기본적으로 다양한 서비스를 이용 가능

그 중 CodeDeploy 서비스를 이용하면 실행되고 있는 서버 애플리케이션에 실시간으로 변경 사항을 전달 가능

또한 S3 서비스의 S3 버킷을 통해 업로드된 정적 웹 사이트에 변경 사항을 실시간으로 전달하고 반영 가능

  • appspec.yml은 배포 자동화를 도와주는 CodeDeploy-Agent가 인식하는 파일
  • 타입스크립트로 서버를 작성하였다면 CodeDeploy과정에 빌드가 되어야함

4. CodePipeline

각 단계를 연결하는 파이프라인을 구축할 때 CodePipeline 서비스를 사용

AWS 프리티어 계정 사용 시 한 계정에 두 개 이상의 파이프라인을 생성하면 추가 요금이 부여될 수 있다.

IAM (Identity and Access Management)

IAM 서비스는 AWS 내에서 자격 증명(Authentication)에 대해 지원하고 제어

대표적으로 User와 User Group 설정을 통해 AWS 계정에 대한 리소스 접근과 관리 권한을 다른 사람에게 부여하고, Role 설정을 통해 AWS 서비스 간 접근 권한을 부여

Role

역할(Role)은 AWS의 개체(서비스, 사용자 등)가 다른 서비스에 접근하게 할 수 있도록 해주는 방법

EC2 인스턴스에 역할을 부여함으로써 다른 AWS 서비스를 호출할 수 있는 권한을 가짐

profile
둔필승총(鈍筆勝聰) - 기억보다는 기록을

0개의 댓글