[배포] AWS를 이용한 배포 자동화

somin·2021년 9월 26일
1

배포

목록 보기
4/4

배포 자동화

1. 개념

  • 한 번의 클릭 혹은 명령어 입력을 통해 전체 배포 과정을 자동으로 진행하는 것
  • 수동적이고 반복적인 배포 과정을 자동화함으로써 시간 절약 가능
    *복잡하고 취약한 수동 배포과정을 자동화하면, 복잡하고 취약한 자동 프로세스가 생성되므로 배포 자동화를 위한 아키텍처를 재설계하는 과정이 필요
  • 새 버전 출시를 기다리지 않고도 오류를 즉시 수정 가능
  • 휴먼 에러(Human Error)를 방지

휴먼 에러

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

2. 배포 자동화 파이프라인

  • 파이프라인(Pipeline) : 소스 코드의 관리부터 실제 서비스로의 배포 과정을 연결하는 구조
  • 전체 배포 과정을 여러 단계(Stages)로 분리하며, 각 단계는 파이프라인 안에서 순차적으로 실행되고 단계마다 주어진 작업(Actions)을 수행
    *파이프라인의 단계는 상황과 필요에 따라 더 세분화되거나 간소화될 수 있음

파이프라인의 세 가지 단계

  1. Source 단계
    : 원격 저장소에 관리되고 있는 소스 코드에 변경 사항이 일어날 경우, 이를 감지하고 다음 단계로 전달하는 작업을 수행
  2. Build 단계
    : Source 단계에서 전달받은 코드를 컴파일, 빌드, 테스트하여 가공
    : Build 단계를 거쳐 생성된 결과물을 다음 단계로 전달하는 작업을 수행
  3. Deploy 단계
    :Build 단계로부터 전달받은 결과물을 실제 서비스에 반영하는 작업을 수행

AWS 배포 자동화

1. AWS 서비스

  • AWS에는 개발자 도구 섹션이 존재

1) CodeCommit

  • Source 단계를 구성할 때 CodeCommit 서비스를 이용
  • CodeCommit은 GitHub과 유사한 서비스를 제공하는 버전 관리 도구
  • 보안과 관련된 기능에 강점을 갖지만, 과금 가능성을 고려해야 함

2) CodeBuild

  • Build 단계에서는 CodeBuild 서비스를 이용
  • CodeBuild 서비스를 통해 유닛 테스트, 컴파일, 빌드와 같은 빌드 단계에서 필수적으로 실행되어야 할 작업을 명령어를 통해 실행할 수 있음
  • 자체 빌드 서버 없이 사용할 수 있고, 사용자를 지정하여 고유의 빌드 도구로 사용할 수 있음
  • 아티팩트까지 생성해주는 완전 관리형 서비스

3) CodeDeploy

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

CodeDeploy-Agent

  • 인스턴스를 CodeDeploy 배포에서 사용할 수 있게 해주는 소프트웨어 패키지
  • 소스코드의 appspec.yml 파일을 참조하여 배포를 실행
  • /opt/codedeploy-agent/deployment-root 경로에 인스턴스의 관련 개정, 배포 기록 및 배포 스크립트가 저장됨
  • EC2/온프레미스 컴퓨팅 플랫폼을 통해 배포하는 경우에만 필요

4) CodePipeline

  • 각 단계를 연결하는 파이프라인을 구축할 때 CodePipeline 서비스를 이용
  • AWS 프리티어 계정 사용 시 한 계정에 두 개 이상의 파이프라인을 생성하면 추가 요금이 부여될 수 있음

2. AWS CodePipeline

  • 작업(Actions) : 단계 구성에서 정의한 대로 지정된 순서나 연속 또는 병렬로 발생하는, 해당 단계의 아티팩트에서 수행된 작업
  • 단계(Stages) : 환경을 격리하고 해당 환경에서 동시 변경 작업의 수를 제한하는 데 사용할 수 있는 논리 단위
  • 전환(Transitions) : 파이프라인의 다음 단계로 이동하는 지점으로 단계의 전환 비활성과 활성을 활용하여 각 단계를 진행
  • 아티팩트(Artifacts) : 파이프라인 작업을 통해 만들어진 데이터 컬렉션으로, 일부 작업에서 생성되고 다른 작업에서 사용

각 Pipeline 단계 연결과 서비스

  1. Source Stage - AWS CodeCommit
    : git 기반 리포지토리를 호스팅하는 소스 제어 서비스
  2. Source Stage - GitHub
    : 분산 버전 관리 툴인 git 저장소 호스팅을 지원하는 웹 서비스
  3. Deploy Stage - AWS CodeDeploy
    : 다양한 컴퓨팅 서비스에 대한 소프트웨어 배포를 자동화하는 배포 서비스
  4. Build Stage - AWS CodeBuild
    : 소스 코드 컴파일, 테스트 실행, 배포 단계까지 마칠 수 있는 지속적 통합 서비스

3. AWS IAM

  • Identity and Access Management의 약자로 AWS 리소스에 대한 액세스를 안전하게 제어할 수 있는 웹 서비스
  • IAM을 사용하여 리소스를 사용하도록 인증(로그인) 및 권한 부여(권한 있음)된 대상을 제어

IAM 서비스 이용

  • 루트 사용자 계정을 사용하지 않고, 일상 및 관리 작업에는 권한이 있는 IAM User 계정을 사용
  • 실제 사용자 한 명을 위해 여러 user를 생성하기보다 하나의 user 계정을 정확하게 설정
  • 자격 증명을 공유하지 않음
  • 보안을 위해 MFA를 활성화
    *MFA(Multi-Factor Authentication) : 사용자 이름 및 암호 위에 추가 보호 계층을 추가하는 서비스

1) IAM Role

  • 각 엔터티(사용자, 서비스 등)에 AWS 서비스에 대한 권한 집합을 정의하는 IAM 자격 증명
  • Role은 한 사람과만 연관되지 않고 해당 역할이 필요한 사람이라면 누구든지 맡을 수 있음
  • 외부 자격 증명 공급자 서비스에 의해 인증된 외부 사용자가 사용할 수 있음
  • IAM Role을 부여할 수 있는 신뢰할 수 있는 객체 : AWS 서비스, AWS 유저(account), Web identity

2) IAM Policy

  • AWS 엔터티 또는 서비스에 연결될 때 해당 권한을 정의하는 AWS 객체
  • IAM User, User Group, Role의 권한을 정의하는 JSON 문서

3) IAM User

  • AWS와 상호 작용하기 위해 그 엔터티를 사용하는 사람 또는 애플리케이션
  • 한 사람과 연관 되며, 암호 또는 액세스 키가 부여
  • 여러 그룹에 속할 수 있으며, 그룹에 속하지 않아도 됨
  • 자신에게 할당된 정책을 가질 수 있음

4. AWS Parameter Store

  • 환경 변수를 보안적으로 전달하는 방법
  • 환경 변수는 절대 노출되지 않아야 할 값이기 때문에 소스 코드에 포함하거나, 컴퓨팅 서비스에 직접 주입하는 것은 보안적으로 위험

References

1. IAM

profile
✏️

0개의 댓글