IaC 란?
- Infrastructure as Code (코드형 인프라)
- 코드로 클라우드 Infrastructure를 구성할 수 있음 (생성, 수성, 삭제 등을 자동화 함)
- Infrastructure의 설계도
IaC 장점
- 인프라 구성 자동화 가능
- 휴먼에러 방지
- 쉽게 공유가능
- 버전 관리 용이
- 코드와 현재 상태 비교 가능 -> 인프라 상태 변경에 따른 위험 분석 및 검증 가능
- 개발자가 스스로 배포하고 인프라 통제 할 수 있는 환경 구성 가능
프로비저닝 vs 배포 vs 오케스트레이션
프로비저닝
- 클라우드 서비스를 시작하고 구성하는 것
- 시스템, 데이터 및 소프트웨어로 서버를 준비하고 네트워크 작동을 준비
- Puppet, Ansible 등과 같은 구성 관리 도구를 사용하여 서버 프로비저닝 가능
배포
- 프로비저닝 된 서버를 실행하기 위해 어플리케이션 버전을 제공하는 것
- AWS CodePipeline, Jenkins, Github Actions 등 을 통해 배포 가능
오케스트레이션
- 여러 시스템 또는 서비스를 조정하는 작업
- 마이크로서비스, 컨테이너 및 쿠버네티스로 작업할 때 일반적 용어
- 쿠버네티스, Salt, Fabric 등이 오케스트레이션 도구의 예임
예상치 못한 인프라의 변경에 따른 사고 (Configuration Drift)
- 여러사람이 필요한 만큼의 권한보다 많은 권한을 갖게되어 시스템에 영향을 주는 행동을 했을 시
어떻게 대처할 수 있는가 또한 이러한 사고가 어떤 영향을 미치는가
사고 알아내기, 대처법
- 잘못된 설정 찾기
=> AWS Config
=> 바른 설정을 지정해놓고, 찾고 고칠 수 있게 해줌
- 사고 감지 도구
=> AWS CloudFormation Drift Detection
관리형 서비스 외에 개발 방법에 가까운 솔루션
- 정상 작동 상태를 파일로 저장
=> Terraform state file
인프라 변경에 따른 사고 방지
1. 불변한 (Immutable) infrastructure = 인프라 변경을 원천적으로 막음
2. 한번 생성했으면 수정하지 않음
- 프로비저닝 및 배포했으면, 콘솔에 접속해서 수동으로 설정하지 않음
- 변경 = 삭제 후 생성
3. 인스턴스 내부 구성 (사용자 스크립트 등) 이 필요할 경우 AMI로 만들어 놓음
- Develop -> Deploy -> Configure 가 아니라 Develop -> Configure -> Deploy 여야 함
4. 코드형 인프라 (IaC)를 사용함
IaC 종류와 Terraform 장점
절차형 IaC vs. 선언형 IaC
절차형 IaC
- 프로그래밍 언어를 이용해 직접 순차적으로 인프라를 생성하도록 코드 작성
- 선언형에 비해 더 강력한 일들을 할 수 있으나, 실제 적용된 결과를 가늠하기 어려움
- 코드를 읽기에 직관적이지 않음
- 종류 = AWS CDK, Pulumi
선언형 IaC
- JSON, WAML 등 을 사용
- 실제 인프라가 적용된 결과와 적용할 내용이 직관적으로 매핑됨
- 종류 = CloudFormation (AWS에서만 사용 가능)
= Azure Blueprint (Azure에서만 사용가능)
= Cloud Deployment Manager (GCP에서만 사용 가능)
= Terraform (어떤 클라우드 서비스에도 적용되는 범용 IaC)
Terraform 기초 Hands On
참고링크
https://learn.hashicorp.com/collections/terraform/aws-get-started
'IaC > Terraform' 카테고리의 다른 글
[Mac OS] Terraform 을 이용한 어플리케이션 구성 - Step 3~4 (0) | 2023.02.12 |
---|---|
[Mac OS] Terraform 을 이용한 어플리케이션 구성 - Step 2 (0) | 2023.02.11 |
[Mac OS] Terraform 을 이용한 어플리케이션 구성 - Step 1 (0) | 2023.02.11 |
YAML 이란 (0) | 2023.01.04 |