devops

IaC(Infrastructure as Code) 본문

DevOps/AWS

IaC(Infrastructure as Code)

vata500 2022. 6. 24. 17:54
반응형

DevOps의 주요 특징은 '자동화'다. 코드형 인프라(IaC)는 설정을 코드로 작성하기 때문에 클라우드 인프라스트럭처의 생성, 수정, 삭제를 자동화할 수 있다.

https://www.mend.io/resources/blog/infrastructure-as-code-iac/

서버, 데이터베이스, 네트워크, 배포 프로세스, 테스트 거의 모든 과정을 코드로 관리할 수 있다. 클라우드 네이티브 환경에서 운영은 모두 코드로 대체된다. 이는 IaC가 인프라스트럭처의 설계도가 될 수 있다는 의미다.

IaC의 장점

  • 인프라 생성이 자동화되므로, 오류가 덜 발생하고 안전하다.
  • IaC는 쉽게 공유되고 버전 관리에도 용이하다.
  • 코드와 현재 상태를 비교하여 추후 인프라 상태의 변경에 따르는 위험을 분석, 검증할 수 있다.
  • 배포 과정에 개발자, 관리자 모두 배포하고 통제가능한 환경이 만들어진다.

프로비저닝, 배포, 오케스트레이션

프로비저닝

시스템, 데이터 및 소프트웨어로 서버와 네트워크 작동을 준비한다. Puppet, Ansible과 같은 도구를 사용하여 서버를 프로비저닝할 수 있다. 클라우드 서비스를 시작하고 구성하는 것을 프로비저닝이라고 한다.

배포

배포는 프로비저닝된 서버를 실행하기 위해 어플리케이션 버전을 제공하는 작업이다. AWS CodePipeline, Jenkins, Gihub Actions로 배포한다.

오케스트레이션

여러 시스템, 서비스를 조정하는 작업이다. 마이크로서비스, 컨테이너, Kubernetes로 작업할 때 사용하는 용어다. 주요 도구는 Kubernetes, Salt, Fabric이 있다.

인프라 변경에 따른 사고(Configuration Drift)

제품의 클라우드 서비스는 다양한 관리자가 관리하기 때문에, 예상치 못한 사고가 발생할 수 있다. 이를 Configuration Drift라고 한다.

이런 사고를 찾아내는 방법들을 알아본다.

  • AWS Config : 바른 설정을 지정하여 찾고 고칠 수 있게 해준다.
  • AWS CloudFormation, Drift Detection : 사고를 감지하는 역할을 한다.
  • Terraform state files : 정상 작동 상태를 파일로 저장한다.

사고 방지 방법

1) 한번 생성했으면 수정하지 않는다.

프로비저닝 혹은 배포 시에 콘솔에 접속해 수동 설정하지 않는다. 변경은 삭제 후 생성으로 해결한다.

2) 인스턴스 내부 구성이 필요하면 AMI로 만들어 놓는다.

Develop -> Configure -> Deploy여야 한다.

3) 코드형 인프라(IaC)를 사용한다.

IaC 종류 그리고 Terraform

절차형 IaC

프로그래밍 언어로 직접 순차적으로 인프라를 생성하여 코드를 작성하는 방법이다. 선언형에 비해 더 강력한 일을 할 수 있지만, 실제 적용 결과를 가늠하기 어렵고 코드가 직관적이지 않다.

-> AWS CDK, Pulumi

선언형 IaC

선언형 언어인 JSON, YAML 을 사용한다. 실제 인프라가 적용된 결과와 적용할 내용이 직관적으로 매핑된다.

-> CloudFormation(AWS), Azure Blueprint(Azure), Cloud Deployment Manager(GCP), Terraform(모두 호환)

 

반응형
Comments