학습 목표
- Infrastructure as Code(이하 IaC)의 의미와 필요성을 이해할 수 있다.
- 수동으로 인프라를 설정하는 것의 장/단점을 파악할 수 있다.
- IaC의 장점을 파악할 수 있다.
- IaC의 종류를 파악할 수 있다.
- 선언형 IaC와 절차형 IaC의 차이를 이해할 수 있다.
- 테라폼의 특징 및 장점을 통해 테라폼의 주 사용 목적을 이해할 수 있다.
- 예상치 못한 인프라 변경을 어떻게 대비하는지 이해할 수 있다.
- 불변(Immutable)한 인프라를 구성한다는 것의 의미를 이해할 수 있다.
- 테라폼의 작동 원리를 이해할 수 있다.
- 테라폼 공식 문서를 통해, HCL 언어로 인프라를 구성할 수 있다.
- 주요 명령어를 이해할 수 있다.
- 테라폼 상태 파일의 의미를 이해할 수 있다.
- 테라폼 상태 파일을 이용한 운영의 모범 사례를 이해할 수 있다.
- AWS VPC 구성을 더욱 잘 이해할 수 있다.
- VPC 및 public/private 서브넷에 대한 개념을 보다 더 확실하게 이해할 수 있다.
- 수동 설정의 한계
- 휴먼 에러 때문에 서버ㅣ스를 설정할 때에 잘못 설정하기 쉬움
- 설정을 통해 예측되는 상태를 관리하기 어려움
- 환경 설정에 대한 내용을 다른 팀 멤버에 전달하기 어려움
- DevOps의 주요 가치 중 하나는 자동화
- 코드형 인프라는 설정을 코드로 작성하여 클라우드 인프라스트럭처의 생성/수정/삭제를 자동화하는 바업
- 서버, 데이터베이스, 네트워크, 배포 프로세스, 테스트 등 거의 모든 것을 코드로 관리할 수 있다는 의미
- IaC의 특징 및 장점
- 인프라르 만드는과정이 자동화되므로, 오류가 훨씬 덜 발생하고 안전함
- 쉽게 공유할 수 있고, 버전 관리에도 용이함
- 코드와 현재 상태를 비교하여, 추후 인프라 상태의 변경에 따르는 위험을 분석하고 검증할 수 있음
- 배포 과정을 소수의 시스템 관리자만 진행하는 것이 아닌, 개발자 스스로가 배포하고 인프라를 통제할 수 있는 환경으로 만들 수 있음
- 프로비저닝
- 클라우드 서비스를 시작하고 구성하는 것
- 시스템, 데이터, 소프트웨어로 서버를 준비하고 네트워크 작동을 준비함
- Puppet, Ansible 등과 같은 구성 관리 도구를 사용하여 서버를 프로비저닝할 수 있음
- 배포
- 프로비저닝된 서버를 실행하기 위해 애플리케이션 버전을 제공하는 작업
- AWS CodePipeline, Jenkins, Github Actions를 통해 수행할 수 있음
- 오케스트레이션
- 여러 시스템 또는 서비스를 조정하는 작업
- 마이크로서비스, 컨테이너, Kubernetes로 작업할 때 일반적인 용어
- 도구: Kubernetes, Saltm Fabric 등
예상치 못한 인프라 변경에 따른 사고
- Configuration Drift: 예상치 못한 인프라 변경에 대한 사고와 미치는 영향
- 잘못 설정된 것을 찾기 위한 도구: AWS Config
- 바른 설정을 지정해 놓고, 찾고 고칠 수 있게 만들어 줌
- 사고 감지 도구: AWS CloudFormation Drift Detection
- Terraform state files
- 개발 방법에 가까운 솔루션
- 정상 작동 상태를 파일로 저장
- Terraform의 상태 정의 파일은 인프라의 실제 상태와 비교 대상으로서 현재 상황을 진단/점검할 수 있음
- 방지 방법
- 불변한(Immutable) 인프라스트럭처는 인프라 변경을 원천적으로 막을 수 있는 방법론
- 실제로 인프라를 수동 설정으로 변경할 수 있지만, 다음의 실천적인 방법을 통해 애초에 그 가능성을 막는 것
- 한번 생성했으면 수정하지 않는다
- 프로비저닝 및 배포했으면, 콘솔에 접속해서 수동으로 설정하지 않음
- 변경은 삭제 후 생성을 의미
- 인스턴스 내부 구성(사용자 스크립트 등)이 필요할 경우, AMI로 만들어 놓는다
- Develop → Deploy → Configure가 아닌, Develop → Configure → Deploy
- 코드형 인프라(IaC)를 사용한다
- 한번 생성했으면 수정하지 않는다
'Code States > TIL' 카테고리의 다른 글
[0515-0516] (페어) Infrastructure as Code - Terraform x AWS (1) | 2023.05.16 |
---|---|
[0512] Infrastructure as Code - Terraform (0) | 2023.05.12 |
[0511] (페어) 마이크로서비스 작성 - 서버리스 애플리케이션 (0) | 2023.05.11 |
[0510] (페어) 마이크로서비스 작성 - 서버리스 애플리케이션 (0) | 2023.05.11 |
[0510] (페어) 마이크로서비스 작성 - API Gateway와 서버리스 애플리케이션 (1) | 2023.05.10 |