안녕하세요
이번 시간에는 코드형 인프라가 무엇인지 알아보고
코드형 인프라 프로비저닝 도구 중 하나인 Terraform을 설치해보고 환경을 구성해보겠습니다.
본문의 내용은 Terraform Up & Running의 내용을 축약하였습니다.
코드형 인프라(IaC)란?
IaC는 Infrastructure as Code의 약자로 코드를 작성 및 실행하여 인프라를 생성, 배포, 수정, 정리하는 것을 말합니다. 서버를 물리적으로 설치하는 하드웨어 측면에서 운영 측면을 소프트웨어적으로 생각하는 중요한 사고 전환을 보여줍니다.
코드형 인프라(IaC) 장점
수동으로 코드를 변환하지 않고 소프트웨어를 효율적으로 배포할 수 있습니다. 2016년 데브옵스 보고서에 따르면 코드형 인프라와 같은 데브옵스를 도입한 조직은 배포 횟수 200배, 오류 24배 빠르게 개선, 배포 시간 2555배를 줄였다는 내용이 있습니다. 현재는 2022년으로 더 상용화되고 기술력이 발전했기 때문에 코드형 인프라(IaC)를 사용해야 할 이유는 충분해 보입니다.
1. 자급식 배포전체 프로세스를 자동화할 수 있고 개발자는 필요할 때마다 자체적으로 배포가 가능
2. 속도와 안정성배포 프로세스 자동화 시 사람이 진행하는 것보다 훨씬 빠른 시간 안에 배포가 가능하고 일관성 있는 코드로 수동으로 배포할 때 보다 오류가 적게 발생
3. 문서화소스 파일로 인프라 상태를 나타낼 수 있기 때문에 코드형 인프라는 문서 역할을 하여 모든 사람이 인프라 구조를 이해하고 업무 가능
4. 버전 관리인프라 변경 내용이 모두 기록되며 소스 파일 저장으로 버전을 쉽게 관리할 수 있고 변경 내역으로 문제가 발생한 지점을 쉽게 찾을 수 있음
5. 유효성 검증코드가 변경될 때마다 검증을 수행하고 일련의 자동화된 테스트를 실행할 수 있으며 오류 발생 위험을 줄일 수 있음
6. 재사용성인프라를 재사용 가능한 모듈로 패키징하고 매번 처음부터 배포하는 대신 검증된 모듈로 일관되게 배포 가능
구성 관리 도구 VS 프로비저닝 도구
둘을 명확하게 구분하는 것은 애매할 수 있습니다. 둘 다 어느 정도의 구성 관리, 프로비저닝 기능이 있기 때문에 중요한 것은 사용하려는 목적에 맞는 도구를 선택하는 것입니다.
IaC 종류 | 설명 | 도구 |
Provisioning Tool (프로비저닝 도구) |
서버 자체를 생성, 데이터베이스, 캐시, 로드 밸런서, 큐, 모니터링, 서브넷 구성, 방화벽 설정, 라우팅 규칙 설정, SSL 인증서 등 인프라에 관한 모든 부분 생성 가능 | 테라폼(Terraform) 클라우드포메이션(CloudFormation) 오픈스택히트(OpenStackHeat) |
SCM Tool (구성 관리 도구) |
대상 서버에 소프트웨어를 설치하고 관리하도록 설계 | 셰프(Chef) 퍼핏(Puppet) 앤서블(Ansible) 솔트스택(SaltStack) |
*프로비저닝(Provisioning) : IT 인프라를 설정하는 프로세스
절차적 언어 vs 선언적 언어
사용자 입장에서 최종 상태를 지정하는 방법인 선언적 언어로 구성하는 것이 간단하고 편리함
종류 | 설명 | 도구 |
절차적 언어 | 최종 상태를 달성하는 방법을 단계별로 지정 | 셰프(Chef) 앤서블(Ansible) |
선언적 언어 | 원하는 최종 상태를 지정 | 테라폼(Terraform) 클라우드포메이션(CloudFormation) 오픈스택히트(OpenStackHeat) 퍼핏(Puppet) 오픈스택히트(OpenStackHeat) |
1. 절차적 코드는 인프라의 마지막 상태 정보를 기록하고 있지 않습니다. -> 무엇이 배포되었는지 알 수 없다.
2. 절차적 코드는 재사용 가능성을 제한합니다. -> 현재 상태를 수동으로 고려해야 하기 때문에 재사용성이 본질적으로 제한
구성 관리와 프로비저닝
앞서 코드형 인프라 도구를 비교했지만 실제로 인프라를 구축하기 위해서는 여러 도구를 함께 사용해야 할 수도 있습니다.테라폼과 앤서블을 함께 사용할 수 있습니다. 테라폼을 사용하여 VPC, 서브넷, 라우팅 테이블 같은 네트워크 토폴로지와 MySQL, Redis 같은 데이터 베이스 그리고 로드 밸런서, 서버 등을 포함한 모든 기본 인프라를 배포한 후 앤서블을 이용하여 앱을 배포하는 방법이 있습니다.
테라폼(Terraform)이란?
테라폼은 HashiCorp 사가 Go 언어로 개발한 오픈 소스 도구이다. 운영 체제마다 바이너리 파일이 존재하는데 Go 코드는 하나의 바이너리 파일로 컴파일되며 Terraform 이라는 명령어로 실행할 수 있습니다. Terraform 바이너리가 AWS, Azure, GCP 등의 클라우드 공급자를 대신해 API를 호출하여 리소스를 생성합니다. 즉 테라폼은 클라우드 공급자가 제공하는 API 서버를 활용할 뿐만 아니라 AWS에 이미 보유한 API 키 같은 인증 메커니즘도 같이 사용합니다. 뿐만 아니라 오픈스택 및 VMware와 같은 프라이빗 클라우드 및 가상화 플랫폼에도 인프라를 프로비저닝 할 수 있습니다. 테라폼은 배우기 쉬운 도구이고 선언적 언어를 사용하여 인프라 구성을 간단하게 수행할 수 있습니다.
테라폼은 API를 어떻게 호출할까? -> 생성하려는 인프라 정보가 담겨 있는 텍스트로 이루어진 테라폼 구성 파일을 생성하여 API를 호출
//예시
resource "aws_instance" "instance" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
}
테라폼 구성 파일(.tf)에 서버, 데이터베이스, 로드 밸런서, 네트워크 토폴로지 등 전체 인프라를 정의하고 해당 파일의 버전을 관리할 수 있습니다. terraform apply 같은 특정 명령어를 사용하여 인프라를 배포할 수 있습니다.
이번 시간에는 코드형 인프라, 코드형 인프라의 장점, 프로비저닝 도구와 구성 관리 도구, 절차적 언어와 선언적 언어, 테라폼에 대해 간단히 알아보았습니다.
감사합니다.
'IaC > Terraform' 카테고리의 다른 글
[Terraform] 코드 재사용성과 관리 용이성을 위한 테라폼 모듈화 (0) | 2023.07.14 |
---|---|
[Terraform] Windows/Linux에서 테라폼 설치하기 실습 (0) | 2023.04.07 |
클라우드, 개발, 자격증, 취업 정보 등 IT 정보 공간
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!