Before 2022/AWS & DevOps

CloudFormation & troposphere를 활용한 IaC 맛보기

Eljoe 2021. 3. 15. 23:27

IaC(Infrastruction as Code, 코드로서의 인프라)

코드를 이용해 인프라를 자동으로 구축, 관리, 프로비저닝하는 접근 방식이다. 프로비저닝, 시스템 변경 및 구성에 대해 일관되게 반복되는 과정을 코드를 통해 자동화하면 빠르게 변경/구성할 수 있으며, 수동으로 구성 시 발생하는 누락 및 잘못 설정하는 등의 인적 실수를 없앨 수 있다.

 

인프라 구성을 코드로 처리하므로 애플리케이션 구성과의 경계가 좁아지면서 개발자와 운영자의 경계가 모호해진 요즘의 DevOps에서 새로이 각광받고 있다.

 

대표적으로 Hashcorp의 Terraform과 오늘 간단히 실습하게 될 AWS의 CloudFormation등이 있다.

 

CloudFormation

사용하고자 하는 AWS 리소스를 JSON이나 YAML 형태의 템플릿 파일로 작성해 클라우드 포메이션에 간단히 업로드하기만 하면 이를 분석해 리소스를 자동으로 생성하고 갱신한다. 이렇게 생성된 리소스를 스택이라고 부른다.

또한, Web GUI를 통해 시각적으로 템플릿을 수정할 수 있는 도구인 Designer도 제공한다.

CloudFormation 스택 생성 워크플로우(출처 : AWS CloudFormation 사용 설명서)

CloudFormation 템플릿을 Python으로 쉽게 구성해주는 라이브러리인 troposphere를 이용해 템플릿 파일을 생성하고 해당 파일에서 User Data를 실행하여 node js로 Hello World 어플리케이션 실행 및 배포까지 해보도록 하겠다.

 

Github Gist에서 node js 코드 및 Service 생성

코드 조각이나 메모, 로그를 무료로 남길 수 있는 Github-Gist에 로그인하고 우측 상단 '+'를 눌러 코드 입력창에 접속한다.

 

아래와 같이 'helloworld.js(확장자 필수)'를 입력한다.

 

 

'Add file'을 눌러 service 파일(helloworld.service)도 입력한다.

 

입력을 마쳤다면 'Create secret gist'을 눌러 코드 조각을 생성한다.

생성된 코드의 Raw 링크를 bitly로 단축시킨 후 링크를 기록해둔다.

 

troposphere 설치 및 코드 작성(Anaconda3 env)

아래와 같은 pip 라이브러리 설치 명령어를 입력한다.

pip install troposphere

 

설치가 완료되었다면 'helloworld-cf-template.py' 파일을 생성하고 다음과 같은 troposphere 코드를 입력한다.

* 기록해둔 단축 링크를 각각 wget 링크에 삽입한다.

 

 

파이썬 인터프리터를 실행시켜 JSON 형태로 출력이 된 것을 확인하고 Terminal에서 다음과 같이 명령어를 입력한다.

(인터프리터 경로) > python helloworld-cf-template.py > helloworld-cf.template

 

해당 경로로 들어가면 .template 파일이 생성된 것을 확인할 수 있다.

 

CloudFormation 스택 생성

CloudFormation 스택 생성 페이지로 접속한다.

* 참고로 작성자는 서울 리전에서 제공하는 t2 micro 인스턴스의 ami를 활용하였기에 하기 모든 작업은 서울(ap-northeast-2)에서 이뤄진다.

 

 

'템플릿 준비' 항목은 '준비된 템플릿'으로 설정

'템플릿 소스' 항목은 '템플릿 파일 업로드'

'파일 선택'을 클릭하여 좀 전에 생성한 .template 파일을 업로드한다.

업로드가 완료되면 'S3 URL' 링크가 생성되며 '다음' 버튼을 클릭한다.

 

다음과 같은 스택 세부 정보 지정 페이지로 접속되며, '스택 이름'에는 'HelloWorld'를 입력하고 '파라미터' 항목의 'KeyPair'는 소유중인 키페어 값을 선택하고 '다음' 버튼을 클릭한다.

* '파라미터' 항목에는 이전 troposphere에서 작성한 paramter 값이 출력된다.

 

 

스택 옵션 구성 페이지에는 별다른 옵션 값 입력이 필요 없으므로 '다음' 버튼을 클릭한다.

 

 

검토 페이지로 접속을 하면 이전에 입력한 값들을 단계별로 확인할 수 있으며, 올바르게 입력했다면 하단 '스택 생성' 버튼을 클릭한다.

 

 

아래와 같이 실시간으로 스택 이벤트가 발생하는 것을 확인할 수 있으며 모든 과정이 정상적으로 진행이 되었다면

마지막 행에 스택 이름과 함께 'CREATE_COMPLETE' 상태가 표시된다.

 

 

'출력' 탭을 선택하면 아래와 같이 이전 troposphere에서 작성한 output 값들이 출력되는 것을 확인할 수 있으며

'WebUrl' 항목의 링크를 클릭하여 node 서버(:3000)가 정상적으로 실행되는지 확인해보자.

 

결과 화면

 

참고서적