IaC는 단어 그대로 코드로 인프라를 관리하는 것을 의미한다.
실제 IaC 도구의 사용 예시를 통해서 IaC가 뭔지 직관적으로 이해할 수 있다.
위의 예시 코드 처럼 인프라를 코드로 작성(정의)하고 적용 명령을 통해서 실제로 AWS 리소스를 생성하거나 변경하는 매커니즘으로 동작한다. 이러한 IaC 도구의 경우 적용 명령시에 내부적으로는 AWS SDK를 활용해서 리소스를 변경하게 된다.
첫번째, 선언적으로 인프라를 관리할 수 있다.
원하는 형상을 선언(정의)한 파일을 가지고 인프라를 관리할 수 있다라는 점은 아주 중요하다. 누군가가 실수로 특정 리소스를 삭제하거나 변경 했을 때 문제가 없는 형상(상태)로 언제든지 복구할 수 있기 때문이다. 또 이상적으로 프로덕션 환경의 인프라의 변경이 IaC 코드를 통해서만 이루어진다면 임의적인 인프라 변경으로 인한 장애도 예방할 수 있다고 생각한다.
두번째, 동일한 형상에 대한 프로비저닝을 자동화를 할 수 있다.
ec2 서버 3대, elb, rds 2대로 구성된 애플리케이션을 다른 리전에 똑같은 형상으로 구축을 한다고 생각했을 때 이를 웹 콘솔이나, CLI를 통해서 하려면 기존 리소스의 정보 그대로를 일일이 확인해가며 수동으로 구성해야한다. 하지만 이렇게 IaC로 ec2 서버 3대, elb, rds 2대에 대한 구성을 정의해놓으면 리전에 해당하는 값만 변경해서 바로 동일한 형상을 다른 리전에 구축할 수 있다.
세번째, 인프라 형상에 대해 버전관리를 할 수 있다.
IaC도 코드를 git과 같은 버전관리 도구로 관리하면 인프라 형상에 대해 버전관리를 할 수 있다. 또 GitOps와 연계해서 AWS 리소스 프로비저닝에 대한 자동화도 할 수 도 있다.