2022년 1월 25일 화요일

Infrastructure as Code – Part 1. IaC 소개

IaC (Infrastructure as Code) 란 IT Infrastructure Resource 에 대해 각각의 요소를 수동으로 관리하는 대신 Script Code 등을 이용해 최초 Resource Provisioning 을 비롯해 다양한 상황에 따른 Resource Upgrade 및 사용 완료 후의 Termination 까지 자동화 기반으로 구성하는 방식이다. 1

Resource를 운영하고 관리하는 관점에서 생각해보면, 작은 규모의 시스템의 경우 예전처럼 시스템 구성도를 준비하고 필요에 맞게 하드웨어와 운영체제 등을 개별적으로 수동 설치하여 운영하는 것도 가능하겠지만, 수백 수천 개의 Resource를 요구하는 대형 시스템 또는 서비스 사용자 수에 따라 지속적으로 확장되어 관리 대상이 되는 Resource가 기하급수적으로 늘어나는 경우 이에 대한 구성이 힘들 뿐만 아니라 개별 관리가 어려워질 수 밖에 없다.

더불어 이러한 대형시스템이 특정 단일 플랫폼에 구성되어 있지 않고 다양한 플랫폼에서 구성되어 서비스를 제공하고 있다면 그 복잡도는 더 증가하게 된다. Resource를 구축 및 관리하는 입장에선 사용하고 있는 각각의 플랫폼에 대한 Control Plane이 모두 다르기 때문에 이에 대한 사용법에 대해 모두 숙지가 필요하고, 특정 상황이 발생했을 때 통합 관제를 비롯한 일괄 대응이 아닌 각 플랫폼에 대해 개별 조치를 취하게 됨으로써 대응 시간 또한 지연될 수 있다.

API 를 기반으로 각종 Resourse를 운영 및 관리하는 클라우드 환경에서는 IaC를 통해 개발자가 프로그래밍 방식으로 Resource와 상호 작용하며 이는 인프라에 대한 유연성, 즉, 규모 변화에 대한 빠른 대응이 가능하고, 작성된 Code는 재사용이 가능해 테스트 환경 등 전체 환경 재구성 등에 용이하며, 각 Resource 간 고려되어야 할 의존성이 존재 (예: A Resource를 사용하려면 B Resource 가 먼저 구성되어야 하는 경우 등) 하더라도 이를 사용자가 아닌 IaC 서비스가 직접 처리해줌으로써 인적 실수에 따른 리스크를 감소하는 장점을 취할 수 있다.

이러한 IaC 방식의 대표적인 서비스가 Hashicorp 의 Terraform 2 그리고 Opensource 기반의 Ansible 3 이다. Terraform 과 Ansible은 다양한 Cloud Service Provider Module을 제공함으로 멀티 클라우드 플랫폼에 대한 통합 구성 및 관리 체계를 지원한다. 익숙한 JSON 형태의 Script 형태를 기본 전제로 하고 있어 처음 접하더라도 진입 장벽은 높지 않다.

Terraform 을 예로 들면 아래 그림과 같은 흐름에 따라 Resource 관리가 이루어진다. Terraform 작업을 수행할 Resource Manage 용 Compute Resource 에서 ‘.tf’ 파일을 작성하고 Terraform이 제공하는 각 클라우드 서비스 제공업체별 provider module에서 작성한 .tf 파일을 기반으로 해당 클라우드 서비스 API를 호출하여 Resource 를 Provisioning 하거나 또는 변경 작업을 수행한다.

다음 편에서는 IaC 서비스 중 하나인 Terraform 으로 Cloud Service를 사용하고 관리하는 방법과 사용하면서 접하게 되는 장점과 단점에 대해 살펴보고자 한다.

  1. https://en.wikipedia.org/wiki/Infrastructure_as_code
  2. https://www.terraform.io/
  3. https://www.ansible.com/

    Related Posts

    클라우드 환경에서의 데이터베이스 가용성
    Cloud 환경에서의 효율적인 보안 및 인증 관리
    Service Mesh 에서의 Control Plane, Consul

    Leave a Reply