본문 바로가기
INFRA/Operation

Terraform & Ansible 연동 효과

by BTC_Dana 2022. 7. 26.
안녕하세요!
하씨가문의 영광입니다!

오늘은 Terraform과 Ansible를 함께 사용했을 때
어떤 효과를 가져오는 지 알아보도록 하겠습니다!
Don't have a good day, Have a great day!

목차

  1. 코드로서의 인프라의 목표
  2. Terraform과 Ansible 간단 소개
  3. Terraform과 Ansible을 함께 사용했을 때 효과
  4. Terraform과 Ansible을 함께 사용하는 방법

코드로서의 인프라의 목표
  • 먼저, Iac란 앞서 이전 블로그에도 설명을 드렸다시피 인프라를 설명하는 코드를 작성하는 것입니다.
  • 리소스를 쉽게 생성, 파괴, 수정, 크기 조정 및 이동할 수 있는 동적 인프라입니다.

 

목표를 나열하자면,

  • 변화에 더 빠르게 적응하고 온디맨드로 비즈니스 가치 제공
  • 적은 노력으로 반복 가능한 환경을 빠르게 구축
  • 재현성
  • 일회용
  • 접근성
  • 규율
  • 멱등성
  • 확장성
  • 동적 인프라로 장애에 대한 대응

 

Terraform과 Ansible 간단 소개

이전 블로그에서 도구들에 대해서 상세하게 설명을 드렸다시피,

  • Terraform은 HashiCorp 구성 언어를 사용하여 다양한 플랫폼 및 서비스에서 인프라를 제공하는 데
  • 사용할 수 있는 오픈 소스 명령줄 도구입니다.
  • Ansible은 Red Hat이 인수한 오픈 소스 S/W 프로비저닝 구성 관리 및 애플리케이션 배포, 프로비저닝 및 배포 도구입니다.
  • 또한 원격 시스템에 설치할 에이전트 없이 SSH를 사용하며 데이터 직렬화 언어 구문인 YAML을 사용합니다.

 

Terraform과 Ansible을 함께 사용했을 때 효과
  • Ansible소프트웨어 설정을 위해 훨씬 쉽게 구성할 수 있고, Terraform인프라 제공에 우수합니다.
  • 또한 Terraform은 EC2 인스턴스, Security Groups, ELB 및 VPC와 같은 인프라AWS IaC에 프로비저닝하고,
  • Ansible은 JenkinsGitLab과 같은 CM으로 EC2 인스턴스에 애플리케이션을 배포/테스트합니다.

그림과 같이 구성 요소를 살펴보자면

  1. 테라폼
    • 인프라 스캐폴딩
    • 내장된 상태 관리
    • 선언적 스타일 실행
    • 실패 시 롤백하지 않음
    • 인프라의 버전 기록 유지
    • 클라이언트 전용 아키텍처 사용
  2. 앤서블 
    • 응용 프로그램 설명
    • YAML을 사용한 절차적 언어 응용 프로그램
    • 다시 실행하고 결과가 멱등성이 아닌 한 한번 배포하면 완료
    • 에이전트가 필요 없고 SSH 통신 사용
    • 클라이언트 전용 아키텍처사용
Terraform과 Ansible을 함께 사용하는 방법

간단한 예시로 2개의 도구를 함께 사용하는 방법을 보여드리겠습니다.

Terraform 파일의 remote-exec를 사용하여 원격 시스템에서 ansible 플레이북을 실행하는 방법
  • Ansible을 사용하려면 terraform이 있는 로컬 시스템의 원격 제어 노드에서 ansible 플레이북을 실행해야 합니다. 이것은 원격 시스템에서 명령을 실행할 수 있게 해주는 terraform의 remote-exec 기능을 사용하여 생성할 수 있습니다.
provisioner "remote-exec" {
 inline = [
 "cd /root/ansible_terraform/aws_instance/",
 "ansible-playbook instance.yml"
]
}

Ansible 플레이북 작업

  • httpd, php, git 패키지 설치
  • httpd 서비스 시작
  • /var/www/html/web 폴더 만들기
  • /var/www/html/ 폴더에 스토리지 포맷 및 마운트
  • /var/www/html/web 폴더에 GitHub 저장소 복제

Ansible 구성 파일

  • Ansible.cfg 파일의 Ansible 제어 노드에 있는 ip.txt 파일의 위치 를 ​​인벤토리 주소로 제공해야 합니다.

 

Terraform Apply

provisioner "local-exec" {
command = "chrome http://${aws_instance.os1.public_ip}/web/"
}

 

 

Apply 적용 과정

Ansible 적용 과정 및 결과

 

애플리케이션 적용 화면

 

이처럼 Terraform과 Ansible을 연동하여 애플리케이션을 구축해보았는데요!
자동화 도구를 1개 사용하는 것 보다 함께 사용하는 효과는 정말 손 쉽게 할 수 있는 거 같아요!

상세하게 생성하는 내용은 추후 세션에서 보여드리겠습니다:)
감사합니다!

댓글