IaC(Infrastructure as Code)란?
IaC(Infrastructure as Code) 는 DevOps 방법론 및 버전 관리와 설명 모델을 사용하여 네트워크, 가상 머신, 부하 분산 장치 및 연결 토폴로지와 같은 인프라를 정의하고 배포합니다. 동일한 소스 코드가 항상 동일한 이진 파일을 생성하는 것처럼 IaC 모델은 배포할 때마다 동일한 환경을 생성합니다.
IaC는 DevOps의 핵심 사례이자 지속적인 업데이트의 구성 요소입니다. IaC를 통해 DevOps 팀은 통합된 사례 및 도구 집합과 협력하여 애플리케이션과 지원 인프라를 신속하고 안정적으로 대규모로 제공할 수 있습니다.
IaC는 릴리스 파이프라인에서 환경 드리프트 문제를 해결하기 위해 발전했습니다. IaC가 없으면 팀은 배포 환경 설정을 개별적으로 기본 합니다. 시간이 지남에 따라 각 환경은 자동으로 재현할 수 없는 고유한 구성인 "눈송이"가 됩니다. 환경 간의 불일치로 인해 배포 문제가 발생할 수 있습니다. 인프라 관리 및 기본 테넌스에는 오류가 발생하기 쉽고 추적하기 어려운 수동 프로세스가 포함됩니다.
IaC는 수동 구성을 방지하고 JSON과 같은 형식으로 잘 문서화된 코드를 통해 원하는 환경 상태를 표시하여 일관성을 적용합니다. IaC를 사용한 인프라 배포는 반복 가능하며 구성 드리프트 또는 누락된 종속성으로 인한 런타임 문제를 방지합니다. 릴리스 파이프라인은 환경 설명 및 버전 구성 모델을 실행하여 대상 환경을 구성합니다. 변경하기 위해 팀은 대상이 아닌 원본을 편집합니다.
항상 동일한 결과를 생성하는 지정된 작업의 기능인 Idempotence는 중요한 IaC 원칙입니다. 배포 명령은 환경의 시작 상태에 관계없이 항상 대상 환경을 동일한 구성으로 설정합니다. Idempotency는 기존 대상을 자동으로 구성하거나 기존 대상을 카드 새 환경을 다시 만들어 수행합니다.
IaC는 DevOps 팀이 개발 주기 초기에 프로덕션과 유사한 환경에서 애플리케이션을 테스트하는 데 도움이 됩니다. Teams는 요청 시 여러 테스트 환경을 안정적으로 프로비전할 수 있습니다. 클라우드는 IaC 정의에 따라 환경을 동적으로 프로비전하고 중단합니다. 인프라 코드 자체의 유효성을 검사하고 테스트하여 일반적인 배포 문제를 방지할 수 있습니다.
IaC는 가능한 경우 선언적 정의 파일을 사용해야 합니다. 정의 파일은 환경에 필요한 구성 요소 및 구성을 설명하지만 반드시 해당 구성을 달성하는 방법은 아닙니다. 예를 들어 파일은 필요한 서버 버전 및 구성을 정의할 수 있지만 서버 설치 및 구성 프로세스를 지정하지는 않습니다. 이러한 추상화는 인프라 공급자가 제공하는 최적화된 기술을 유연하게 사용할 수 있게 해줍니다. 선언적 정의는 시간이 지남에 따라 발생할 수 있는 배포 스크립트와 같은 명령적 코드를 기본 관련 기술적인 문제를 줄이는 데도 도움이 됩니다.
선언적 IaC에 대한 표준 구문은 없습니다. IaC를 설명하는 구문은 일반적으로 대상 플랫폼의 요구 사항에 따라 달라집니다. 다른 플랫폼은 YAML, JSON 및 XML과 같은 파일 형식을 지원합니다.
Azure는 Azure Resource Manager 모델을 통해 IaC에 대한 기본 지원을 제공합니다. Teams는 솔루션을 배포하는 데 필요한 인프라를 지정하는 선언적 ARM 또는 Bicep 템플릿을 정의할 수 있습니다.
Terraform, Ansible, Chef 및 Pulumi와 같은 타사 플랫폼은 자동화된 인프라를 관리하는 IaC도 지원합니다.