WiseN

[Reinvent2019] AMI 생성 및 관리를 자동화 - EC2 Image Builder 소개

Dec 17, 2019   |   AWS

작성자_황성영

페이스북 공유하기 트위터 공유하기
Blog thumbnail

들어가며



안녕하십니까. GS네오텍 황성영입니다.

이번 리인벤트 행사에서 EC2 Image Builder라는 신규 기능이 추가 되었습니다. EC2 이미지 빌더라고 하는걸 보니 AMI를 만들어 주는 모양인데요. 해당 기능을 통해 AMI 생성/ 유지/관리/검증 등 관리 작업을 간소화 할 수 있게 되었습니다.

오늘 포스팅에서는 EC2 Image Builder 개요와 간단한 데모를 소개하겠습니다.

 

EC2 Image Builder 개요


 

먼저 골든 이미지에 대한 설명을 짧게 해야 할 것 같습니다. 골든 이미지는 OS 영역을 포함해 필수 패키지가 설치된 일종의 (검증된) 표준 이미지 개념입니다. 이 표준 이미지를 잘 활용하면 여러가지 이점이 생기는데요. 공통 부분을 미리 포장(패키징) 해놓음으로써 인스턴스 프로비저닝 시간을 최소화하고, 깨끗한(?) 이미지로 부터 새로운 객체들을 생성하기 때문에 보안 관점에서도 여러가지 이점이 있었습니다.

그런데 문제는 뭔가 하면. 이러한 골든 이미지가 제대로 효용을 발휘하려면, 주기적으로 이미지를 다시 만들어줘야 하는 부지런한(?)을 요구한다는 점이었습니다. 예를 들어 설치된 패키지 중 특정 버전에 취약점이 발견되었다면 해당 패키지가 업데이트된 이미지를 다시 만들어 줘야 한다는 것이죠. 더욱 큰 문제는 이미지를 생성한 이후의 작업(테스트, 공유)들도 덩달아 공수를 유발한다는 것 또한 부담이었습니다.

이런 관리 부담을 최소화하기 위해 이런 일련의 파이프라인을 자동화하는 툴도 있었습니다. Hashicorp의 Packer같은게 대표적이죠. 여러가지 클라우드 플랫폼을 지원하고, 컨테이너 환경도 지원하는 범용성이 높은 툴입니다. 다만 AWS 전용으로 개발된 프로젝트가 아니기 때문에 타 AWS 서비스와의 연동이나 권한관리(IAM) 측면에서 아다리가 딱(!) 맞게 만들어 진것은 아니라고 할 수 있겠죠.

그래서 이번에 AWS에서 EC2 Image Builder라는 신규 기능을 출시했습니다. 이미지 생성 및 관리를 자동화한 파이프라인을 제공하는 서비스입니다. 몇가지 간단한 설정만으로 보안성이 높은 골든 이미지를 생성하고 관리할 수 있습니다.

주요 기능

  • ​OS 이미지 생성, 유지, 검증, 배포 작업의 파이프라인 생성
  • AWS 및 On-Premise 환경의 이미지 생성 및 유지 관리 지원
  • 같은 조직(AWS Organization) 내에서 생성 이미지 공유

 

​ 대상 (`19년 12월 기준)

  • ​Amazon Linux 2, Window Server(2019/2016/2012 R2)만 지원
  • 기존 AWS AMI, EBS 스냅샷 이미지 형식만 지원

​ 요금

  • ​Image Builder 자체에 대한 과금은 없음
  • 로그 저장, 이미지 생성, 저장, 공유에 사용되는 AWS 리소스에 대한 부분만 과금

 

EC2 Image Builder 데모


오늘 데모는 Image Builder를 사용하여 Apache가 설치된 이미지를 생성을 하고 생성된 AMI로 인스턴스를 만들어 보는 간단한 시나리오입니다. 



처음 파이프라인을 작성하려면, 레시피를 만들어야 합니다. 레시피에서는 어떤 OS, 이미지, 생성할 이미지에 빌드 및 테스트 할 컴포넌트를 선택합니다. EC2 Image Builder에서 관리하는 이미지를 선택하거나(기존에 생성한 이미지도 가능) 사용자 지정 AMI ID를 지정 할 수 있습니다. 여기서는 Amazon Linux 2 이미지를 사용하도록 하겠습니다.
 



다음은 이미지에 빌드할 컴포넌트를 선택할 수 있습니다. 아마존에서 기본으로 제공하는 컴포넌트를 선택하거나 사용자가 직접 만들어 사용 할 수 있습니다. Create build component를 클릭하여 apache를 설치, OS update 하는 컴포넌트(.yaml)를 작성하겠습니다.

install_apache

  name: install_apache
description: This is install_apache testing document.
schemaVersion: 1.0

phases:
- name: build
steps:
- name: InstallApache
action: ExecuteBash
inputs:
commands:
- sudo yum install httpd -y
- sudo systemctl enable httpd
- sudo systemctl start httpd

- name: validate
steps:
- name: CheckApache
action: ExecuteBash
inputs:
commands:
- rpm -qi httpd

- name: test
steps:
- name: TestApache
action: ExecuteBash
inputs:
commands:
- curl localhost

 

update_os

  name: update_os
description: This is os_update testing document.
schemaVersion: 1.0

phases:
- name: build
steps:
- name: InstallLinuxUpdate
action: UpdateOS

 

  

만든 2개의 컴포넌트를 추가하시면 됩니다. 테스트도 동일하게 아마존에서 제공하는 컴포넌트를 쓰거나 직접 작성한 컴포넌트를 사용 할 수 있습니다. 차이점이라면 이미지가 빌드가 된 후 테스트를 진행합니다.​ 이번에는 테스트 항목을 직접 작성하지 않고 아마존에서 제공하는 simple-boot-test를 사용하도록 하겠습니다.
 


 

레서피를 만들고 나서는 파이프라인의 여러 세부사항을 설정 할 수 있습니다. Image Builder에서 관련 권한을 사용할 수 있도록 위와 같이 역할을 만들어 줍니다.

 

 |

추가적으로 스케줄 옵션을 선택하거나 만든 이미지를 원하는 타입의 인스턴스를 선택하여 테스트를 할 수 있습니다. 선택하지 않으면 기본 설정값을 따라갑니다. 스케줄 옵션은 메뉴얼로, 인스턴스 타입은 t2.large로 설정하겠습니다. 인스턴스 생성될 때 SNS로 알람을 받거나 원하는 VPC, 서브넷, 보안그룹, 트러블 슈팅 설정도 가능합니다만, 데모에서는 이 부분을 넘어가도록 하겠습니다.

 




마지막 설정입니다. 생성 이미지에 라이센스를 연결하거나 생성된 이미지의 이름, 어디 지역으로 배포할 지, 시작 권한을 설정 할 수 있습니다. 여기서는 이름 설정과 서울과 도쿄 지역으로 배포를 하겠습니다. 여기까지 작성하면 파이프라인이 완성됩니다.

 




파이프라인을 실행하게 되면 파이프라인을 생성한 리전에서 빌드, 테스트 작업이 이루어 졌으며, 서울, 도쿄 리전에 AMI가 생성된 것을 확인 할 수 있습니다.

 



생성된 AMI로 인스턴스를 생성하고 HTTP 접속을 하면 Apache가 설치된 것을 확인 할 수 있습니다.
 

 

마무리


해당 기능을 다시 한번 정리하면 다음과 같습니다.

  • 이미지 생성, 관리 등 관련 작업이 간편하다
  • AWS에서 이미지 생성, 관리를 해주기 때문에 이미지에 대한 보안의 취약점을 줄일수 있다
  • 이미지에 도입하는 구성 요소를 독자적으로 작성하거나 만든 이미지로 테스트도 독자적으로 가능하다
  • 이 모든 과정을 파이프라인으로 구성하여 자동화가 가능하다

 

개인적으로는 컴포넌트를 개별적으로 관리하고 생성할 이미지에 추가하고 제거하는 부분이 굉장히 편리했습니다.

오늘 포스팅은 여기서 마칩니다.

끝!