이제 'IaC는 Infrastructure as Code, 즉 코드로 인프라를 관리한다' 라고 정리할 수 있다.
이번 포스팅에선 IaC에서 사용되는 대표적인 솔루션, Terraform과 Ansible을 비교하는 과정을 설명한다.
두 가지 솔루션은 인프라를 코드로 관리하기 위해 사용된다는 점에서 공통점이 있지만, 그 목적이 다르다.
◎ Terraform : Orchestration, Provisioning
◎ Ansible: Configuration, Management
간단한 예시를 통해 비교해보자.
Ansible
- ec2:
count: 10
image: ami-v1
instance_type: t2.micro
Terraform
resource "aws_instance" "example" {
count = 10
ami = "ami-v1"
instance_type = "t2.micro"
}
위 코드는 각각 Ansible과 Terraform으로 EC2 인스턴스를 구성하는 코드이다.
만약 여기서 count 값을 15로 변경하면 어떻게 될까?
Ansible의 경우, procedual이며 mutable infrastructrue를 지향한다.
그러므로, 이미 생성된 10개의 인스턴스에 15개의 인스턴스가 추가로 생성되어 총 25개의 인스턴스가 구동된다.
Terraform의 경우, declarative이며 immutable infrastructure를 지향한다.
count를 15로 선언했기 때문에 Terraform은 이전 상태와 비교한 다음, 5 만큼의 변경에 대한 교체만을 수행한다.
결과적으론 총 15개의 인스턴스가 구동된다.
이렇듯 서로 지향하는 성격이 다르다보니 적절한 상황에 사용하는 것이 좋다.
예를 들어, 앞선 실습처럼 Provisioning 단계에선 Terraform을 사용하고,
Configuration, Dependendy 설정 단게에선 Ansible을 사용할 수 있다.
아래 Ansible과 Terraform의 coverage를 보면 이해하는 데 도움이 될 것이다.
+++
Terraform은 현재 굉장히 광범위하게 쓰이고 워낙 파워풀한 툴이다보니 테라폼을 통해 할 수 있는 것이 많지만,
그 범위를 한정하지 않으면 나중에 골치 아픈 일이 생긴다고 한다.
(이건 직접 운영하면서 알아보자..)
'IaC' 카테고리의 다른 글
Terraform이란? (0) | 2022.03.25 |
---|---|
Ansible 설치 및 실습 (0) | 2021.07.23 |