1. IaC 개요
IaC
Infrastructure as Code, 프로그래밍형 인프라
인프라 구성을 코드를 통해 자동으로 구축, 관리, 프로비저닝
예시 - 100개의 서버로 구성된 인프라 구축
- 수동 설정 : 오랜 시간이 걸리고 구축 도중 높은 오류 발생 확률
- IaC 활용 설정 : 하나의 코드를 통해 100개 서버를 자동으로 구축
IaC 장점
- 비용 절감
- 배포 속도 향상
- 오류 감소
- 인프라 일관성 향상 (멱등성)
용어
프로비저닝 (provisioning)
- 클라우드 서비스를 시작하고 구성하는 것
- 인프라를 설정하는 프로세스 -> 시스템, 데이터, 네트워크 작동을 준비하는 과정
형상 관리 (configuration management)
- 서버 운영상 필요한 소프트웨어를 설치하고 설정으로 관리하는 것
- 설정 관리에 사용되는 여러 정보 이력 관리
IaC vs 형상 관리
- IaC : 코드를 이용한 인프라 관리
- 형상 관리 : 운영체제 상에서 패키지를 설치하고 필요한 설정을 코드로 관리하는 것
배포
deploy
- 프로비저닝된 서버를 실행시키기 위해 어플리케이션 버전을 제공하는 작업
오케스트레이션 (orchestration)
- 여러 시스템 또는 서비스를 조정하는 것
- 오케스트레이션의 목표는 배포, 관리, 확장, 네트워킹 자동화
AWS에서 제공하는 IaC 서비스
Ansible
별도의 agent 없이 IaC 서비스 제공, SSH 기반으로 IaC 서비스 제공
(윈도우에서 사용불가, 반드시 리눅스로만 사용)
Puppet
Chef
GUI 기반으로 IaC 서비스 제공
(윈도우에서도 사용 가능)
기타
AWS의 대표적인 IaC 구성 조정 도구 (참고1) (참고2)
- 스택을 형성할 때마다 AWS CloudFormation에서 템플릿에 설명된 리소스를 프로비저닝과 구성을 담당하는 AWS 리소스를 수동으로 생성/구성 필요 X, 어떤 것이 무엇에 의존하는지 파악할 필요 X
장점
- 인프라 관리 간소화
- 신속하게 인프라 복제
- 인프라 변경 사항을 쉽게 제어 및 추적
JSON 또는 YAML을 이용하여 작성
JSON
- 각 요소 작성할 때 tab 간격 (4칸)을 사용하여 작성
- 요소는 key:value 형식
- 파일 확장자 : .json
- CloudFormation
YAML
- 각 요소 작성할 때 space 4칸을 사용하여 작성
- 요소는 key:value 형식
- 파일 확장자 : .yaml , .yml
- CloudFormation, Ansible, 쿠버네티스 등
템플릿 - Template
- 스택 리소스 프로비저닝 및 구성을 위해 필요한 텍스트 파일
- JSON 또는 YAML 형식의 파일로 작성
- AWS CloudFormation Designer를 사용하여 GUI 기반으로 작성 가능
- AWS CloudFormation 템플릿을 AWS 리소스 구축을 위한 청사진으로 사용
스택 - Stack
- 하나의 단위로 관리할 수 있는 AWS 리소스 모음
- 스택의 생성, 업데이트, 삭제를 통해 리소스 모음의 생성, 업데이트, 삭제
- 스택의 모든 리소스는 AWS CloudFormation 템플릿을 통해 정의
- 스택을 삭제하면 모든 리소스는 모두 삭제
1. JSON 또는 YAML 포맷으로 AWS CloudFormation 템플릿 작성
- 작성된 템플릿을 S3 버킷에 저장
- 템플릿 파일은 로컬 저장 또는 S3 버킷 저장 선택 가능
-
템플릿 위치를 지정하여 CloudFormation 스택 생성
-
템플릿에 지정된 스택을 통해 AWS 리소스에 대한 프로비저닝 및 구성 작업 진행
- 서비스 메뉴 -> 관리 및 거버넌스 -> CloudFormation
CloudFormation 템플릿을 시각적인 도구를 사용하여 작성할 때 활용
Designer 사용법
리소스 유형
- 템플릿을 구성할 리소스에 대한 종류를 시각적인 형태로 제공
- EC2 리소스 유형을 선택하면 일반적인 EC2 기반으로 인프라 구성을 위한 리소스 유형 존재
- EC2 리소스 유형의 Instance가 EC2를 의미
- CloudFormation -> 스택 -> 스택 생성
준비된 템플릿 : 사용자가 생성한 템플릿
샘플 템플릿 사용 : AWS에 미리 만들어져 있는 템플릿
Designer에서 템플릿 생성 : Designer를 이용하여 생성 및 사용
- 템플릿 지정
템플릿 소스 선택
-> 스택 세부 정보 지정
- 스택 이름
- 파라미터
- template 파일에 지정된 파라미터 정보 표시
- 해당 template을 이용하여 AWS 리소스 생성시 필요한 파라미터 입력시 사용
-> 스택 옵션 구성
- 태그 지정
- 권한 : 선택 사항
- 스택 실패 옵션 선택
모든 스택 리소스 롤백
성공적으로 프로비저닝된 리소스 보존
-> 고급 옵션
선택 사항
스택 생성
스택 생성 후 이벤트 정보를 확인하면 해당 스택이 템플릿을 이용하여 수행하는 과정 정보가 출력된다.
과정 중 에러가 발생하면 원인을 파악하여 템플릿 내용을 수정하고 다시 수행하는 과정 반복
=> 스택을 삭제하면 스택에 의해 생성된 모든 AWS 리소스는 삭제됨
- 템플릿 버전
- 템플릿 문자는 문자열 형태 사용
- 값을 지정하지 않은 경우 최신 버전 템플릿 포맷 버전으로 지정
- 템플릿에 대한 추가 정보 제공
- CloudFormation은 Metadata 섹션에 포함된 정보를 변환/수정/삭제 X
- 민감 정보는 포함하지 않는 것이 좋다
Parameter (선택 사항)
- 스택을 생성하거나 업데이트할 때 실행 시간에 템플릿에 전달하는 값
- 템플릿의 Resource 및 Outputs 섹션에서 파라미터 참조 가능
- 최대 60개 파라미터 지정 가능
- 각 파라미터마다 CloudFormation이 스택을 프로비저닝할 실행시간에 대한 값 할당 필요
- 파라미터는 동일한 템플릿에서 선언 및 참조 필요
- 파라미터 참조시에는 !ref <파라미터 이름> 형식 사용
Mapping (선택 사항)
- 조건부 파라미터값을 지정하는데 사용 가능한 키와 관련 값의 매핑
- Mappings 섹션은 "키 이름" "Mappings"로 이루어짐
- 매핑 키 이름은 문자열 사용
Resources (필수)
AWS 리소스 및 해당 속성 지정
- Logical ID : Resource 식별자, 논리적 ID, 반드시 영문/숫자, 고유한 값을 가져야 함
- Resource type : 리소스 유형은 선언하려는 리소스 유형 식별
- 리소스 속성(Properties) : 리소스에 지정가능한 추가 옵션
outputs (선택 사항)
- 스택 속성을 볼 때마다 반환하는 값 설명
- CloudFormation은 outputs 섹션에 포함된 정보를 삭제 or 난독화 X
- 최대 60개 출력 가능
3. TIF
어느덧 AWS 기본(?)이 끝나고 도커 들어가기 전 IaC가 시작되었다. 지난번 리눅스도 그렇고 AWS 기초도 그렇고 초반엔 그럭저럭 따라잡을만하다가 막판 가서 놓치고 헤메는 것을 이번에도 또 반복할 생각을 하니 벌써부터 아찔하다.
이제 기존 비(非)코딩 IT분야로 여겨졌던 분야들도 점차 코딩이 대세가 되어가는 추세에 드디어 말로만 익히 들어왔던 IaC를 접하긴 했지만 아직도 구체적으로 어떻게 하는진 크게 와닿진 않는다. 이건 앞으로 수업을 더 진행하면서 알아봐야 할 것 같긴하다.
IaC가 정확히 어떤지 아직 잘 모르기에 유튜브에 조금이나마 찾아봤다.