IaC 비교

GreenBean·2023년 3월 2일
0
post-thumbnail

IaC 비교

Terraform vs CloudFormation vs Ansible
Ansible vs Terraform vs Puppet
CloudFormation vs Terraform

IaC 란?

  • 코드형 인프라 ( Infrastructure as Code, IaC ) 는 수동 프로세스가 아닌 코드를 통해 인프라를 관리하고 프로비저닝하는 것을 말함
  • IaC 를 사용하면 인프라 사양을 담은 구성 파일이 생성되므로 구성을 편집하고 배포하기가 더 쉬워짐
    • 매번 동일한 환경을 프로비저닝하도록 보장
    • 구성 사양을 코드화하고 문서화함으로써 구성 관리를 지원
    • 따라서 구성 변경 사항을 문서화하지 않고 임시로 변경하는 일을 막을 수 있음
  • 버전 제어IaC 의 중요한 부분
    • 다른 소프트웨어 소스 코드 파일과 마찬가지로 구성 파일도 소스 제어가 필요
    • 코드로 인프라를 배포한다는 것은 인프라를 모듈식 구성 요소로 분할하고 자동화를 통해 다양한 방식으로 결합할 수 있다는 뜻이기도 함
  • IaC 로 인프라 프로비저닝을 자동화하면 애플리케이션을 개발하거나 배포할 때마다 개발자가 직접 서버 ∙ 운영 체제 ∙ 스토리지 ∙ 기타 인프라 구성 요소를 수동으로 프로비저닝하고 관리할 필요가 없어짐
    • 인프라를 코드화하여 템플릿을 만들고 프로비저닝할 때 이 템플릿을 사용하면 됨
    • 이러한 작업은 수동으로 진행할 수도 있고 자동화 툴을 사용할 수도 있음

IaC 의 장점

  • 원래 인프라 프로비저닝은 시간과 비용이 많이 드는 수동 프로세스였음
    • 하지만 이제 데이터 센터의 물리적 하드웨어가 아니라 가상화 ∙ 컨테이너 ∙ 클라우드 컴퓨팅을 이용하여 인프라 관리를 하게 되었음
  • 클라우드 컴퓨팅이 등장하면서 인프라 구성 요소의 수가 늘어났고 날마다 더 많은 애플리케이션이 프로덕션 환경에 릴리스되고 있음
    • 이에 따라 더 잦은 빈도로 가동하고 중지하고 확장할 수 있는 인프라가 필요해짐
    • IaC 이용 사례를 확립하지 않으면 현재 인프라의 규모를 관리하기가 갈수록 어려워질 것
  • 조직은 IaC 를 이용해 IT 인프라 요구 사항을 관리함과 동시에 일관성을 높이고 오류 및 수동 구성을 줄일 수 있음

IaC 의 이점

  • 비용 절감
  • 배포 속도 향상
  • 오류 감소
  • 인프라 일관성 향상
  • 구성 변동 제거

IaC 가 DevOps 에 중요한 이유

  • IaC 는 DevOps 사례 및 지속적 통합/지속적 제공 ( CI/CD )에서 중요한 부분을 차지
    • 개발자가 하던 프로비저닝 작업을 대부분 IaC 로 처리하고 개발자는 스크립트를 실행하여 인프라를 준비할 수 있음
  • 따라서 인프라 준비를 기다리는 동안 애플리케이션 배포를 보류할 필요가 없으며, 시스템 관리자는 시간이 많이 소요되는 수동 프로세스를 관리하지 않아도 됨
  • CI/CD 는 통합 및 테스트에서 제공 및 배포에 이르는 애플리케이션 라이프사이클 전반에 걸쳐 지속적인 자동화와 지속적인 모니터링에 의존
    • 환경을 자동화하려면 환경에 일관성이 있어야 함
    • 개발 팀의 애플리케이션 배포 또는 환경 구성 방식이 운영 팀의 배포 및 구성 방식과 다른 경우 애플리케이션 배포 자동화는 효과가 없음
  • DevOps 접근 방식을 통해 개발 팀과 운영 팀의 방식을 서로 일치시키면 오류 ∙ 수동 배포 ∙ 비일관성 문제가 줄어듬
    • 두 팀이 동일한 설명에 따라 애플리케이션을 배포할 수 있으므로 IaC 는 개발과 운영을 조율하는 데 도움이 되고 따라서 DevOps 접근 방식을 지원
  • 다시 말해 프로덕션 환경을 비롯한 모든 환경에서 동일한 배포 프로세스를 사용해야 함
    • IaC 는 사용될 때마다 동일한 환경을 생성
  • 또한 IaC 는 자동으로 다시 생성할 수 없고 고유한 구성을 지닌 개별 배포 환경을 유지관리할 필요가 없으므로 프로덕션 환경의 일관성이 보장
  • DevOps 모범 사례는 IaC 내 인프라에도 적용됨
    • 소프트웨어 개발 과정에서 애플리케이션과 동일한 CI/CD 파이프라인을 인프라에도 적용함으로써 동일한 테스트 및 버전 제어를 인프라 코드에 반영할 수 있음

IaC 툴

  • IaC 구현을 위한 서버 자동화 및 구성 관리 툴
    • Chef
    • Puppet
    • Ansible
    • Saltstack
    • Terraform
    • AWS CloudFormation

IaC 접근 방식

  • 절차적 언어
    • 작업을 할 때 순서가 있음
    • ChefAnsible
  • 선언적 언어
    • 특별한 순서가 없음
    • PuppetSaltstackTerraformAWS CloudFormation

📡 Ansible

  • 다양한 클래스와 구성 방법을 활용할 수 있음
    • Wrapper 모듈 로 다른 공급자에 연결하여 구성 가능
    • 가볍고 배포 기능이 빠른 것이 장점
  • 구성 관리 도구
    • 시스템을 재설정하지 않고 시스템을 교체하는 대신 문제를 복구하려고 함
    • 그렇기 때문에 Terraform 이 더 상위호환으로 간주됨
  • 절차적 ∙ 선언적으로 모두 할 수 있음
  • AWS 와 Ansible 은 서로 잘 연동됨
    • S3 ∙ Route53 ∙ Lambda 등 100개에 가까운 모듈을 연결할 수 있음

📡 Terraform

  • 2014년에 출시했고 클라우드에 상관 없이 여러 클라우드 서비스들을 지원하기 때문에 다중 클라우드 ∙ 다중 환경을 관리할 수 있음
    • Hashicorp 언어 를 사용하며 사용자 친화적
  • 오케스트레이션 도구
    • 그렇기 때문에 원하는 상태에 있도록 계속 유지하려고 함
      • 어떤 부분이 제대로 작동하지 않을 경우 자동으로 계산해서 리로드
    • 일정한 상태가 필요한 환경에 적합
  • 선언적 언어
    • 사용자가 설명한 최종 상태에 도달하려고 노력

📡 AWS CloudFormation

  • AWS 의 대표적인 IaC 기반의 구성 조정 도구
    • 스택 을 생성할 때 마다 AWS CloudFormation 에서 템플릿 에 설명된 리소스를 프로비저닝과 구성을 담당
  • AWS 리소스를 수동으로 생성하거나 구성할 필요가 없고 어떤 것이 무엇에 의존하는지 파악할 필요가 없음
  • JSON ∙ YAML 이용하여 작성

Tip! AWS CloudFormation 구성요소

  • AWS CloudFormation 을 사용하는 경우에는 템플릿스택 으로 작업
    • 템플릿 을 생성하여 AWS 리소스와 해당 속성에 대해 설명
    • 스택 을 생성할 때마다 AWS CloudFormation 에서 템플릿에 설명된 리소스를 프로비저닝
  • 템플릿 ( Template )
    • 스택 리소스 프로비저닝 및 구성을 위해 필요한 파일
    • JSON 또는 YAML 형식의 텍스트 파일
      • .json.yaml.template 또는 .txt 등 모든 확장명으로 파일을 저장 가능
    • AWS CloudFormation Designer 를 사용하여 GUI 기반으로 친숙하게 템플릿 작성 가능
    • AWS CloudFormation 에서는 템플릿을 AWS 리소스 구축을 위한 블루프린트로 사용
  • 스택 ( Stack )
    • 하나의 단위로 관리할 수 있는 AWS 리소스 모음
    • 스택의 생성 ∙ 업데이트 ∙ 삭제를 통해 리소스 모음의 생성 ∙ 업데이트 ∙ 삭제
    • 스택의 모든 리소스는 템플릿을 통해 정의
    • 스택을 삭제하면 관련 리소스가 모두 삭제

Tip! 프로비저닝 이란?

  • 프로비저닝은 IT 인프라를 설정하는 프로세스
    • 사용자와 시스템에서 사용할 수 있도록 데이터와 리소스에 대한 액세스를 관리하는 데 필요한 단계를 지칭하기도 함
  • 사용자의 요구에 맞게 시스템 자원을 할당 ∙ 배치 ∙ 배포해 두었다가 필요 시 시스템을 즉시 사용할 수 있는 상태로 미리 준비 해 두는 것을 말함
profile
🌱 Backend-Dev | hwaya2828@gmail.com

0개의 댓글