"테라폼으로 시작하는 IaC"책을 기준으로 1주차 정리 내용입니다.
- "코드로서의 인프라"로 해석되며, 사용자 인터페이스(UI) 또는 CLI를 이용한 수동 조작이 아닌 "Code"로 대상을 관리한다.
- 컴퓨터에서 읽을 수 있는 정의 파일을 사용해 인프라나 서비스를 관리하고 프로비저닝하는 프로세스이다.
HashiCorp에서 공개한 IaC 도구이다. Vagrant를 시작으로 2014년 Terraform이 처음 출시됐고, 2021년 1.0버전이 릴리즈되었습니다.
terraform 자체로는 프로비저닝하는 것이 불가능하기에 대상 인프라와 서비스를 terraform으로 작업하기 위해서는 "Target API, Provider"가 사이에서 Interface 역할을 해야합니다.
출처 - https://www.terraform.io/intro
위의 그림은 terraform Core와 Provider의 호출 관계를 나타내는데, 각 인프라와 서비스는 고유의 API를 가지고 있어 Provider는 각 API 명세를 terraform Code로 호출해 동작한다.
테라폼의 기본 개념들입니다.
1. Provisioning
어떤 프로세스나 서비스를 실행하기 위한 준비 단계를 프로비저닝이라고 합니다. 프로비저닝에는 크게 네트워크나 컴퓨팅 자원을 준비하는 작업과 준비된 컴퓨팅 자원에 사이트 패키지나 애플리케이션 의존성을 준비하는 단계로 나뉘어집니다. 명확한 경계는 불분명하지만 테라폼은 전자를 주로 다루는 도구입니다.2. Provider
테라폼과 외부 서비스를 연결해주는 기능을 하는 모듈입니다. 예를 들어 테라폼으로 AWS 서비스의 컴퓨팅 자원을 생성하기 위해서는 aws 프로바이더를 먼저 셋업해야합니다. 프로바이더로는 AWS, GCP, Azure와 같은 범용 클라우드 서비스를 비롯해 Github, Datadog, DNSimple과 같은 특정 기능을 제공하는 서비스, MySQL, RabbitMQ, Docker와 같은 로컬 서비스 등을 지원합니다.3. Resource
리소스란 특정 프로바이더가 제공해주는 조작 가능한 대상의 최소 단위입니다. 예를 들어 AWS 프로바이더는 aws_instance 리소스 타입을 제공하고, 이 리소스 타입을 사용해 Amazon EC2의 가상 머신 리소스를 선언하고 조작하는 것이 가능합니다. EC2 인스턴스, 시큐리티 그룹, 키 페어 모두 aws 프로바이더가 제공해주는 리소스 타입입니다.HCL(Hashicorp Configuration Language)
HCL은 테라폼에서 사용하는 설정 언어입니다. 테라폼에서 모든 설정과 리소스 선언은 HCL을 사용해 이루어집니다. 테라폼에서 HCL 파일의 확장자는 .tf를 사용합니다.4. Plan
테라폼 프로젝트 디렉터리 아래의 모든 .tf 파일의 내용을 실제로 적용 가능한지 확인하는 작업을 계획이라고 합니다. 테라폼은 이를 terraform plan 명령어로 제공하며, 이 명령어를 실행하면 어떤 리소스가 생성되고, 수정되고, 삭제될지 계획을 보여줍니다.5. Apply
테라폼 프로젝트 디렉터리 아래의 모든 .tf 파일의 내용대로 리소스를 생성, 수정, 삭제하는 일을 적용이라고 합니다. 테라폼은 이를 terraform apply 명령어로 제공합니다. 이 명령어를 실행하기 전에 변경 예정 사항은 plan 명령어를 사용해 확인할 수 있습니다. 적용하기 전에도 플랜의 결과를 보여줍니다.
출처 - https://www.44bits.io/ko/post/terraform_introduction_infrastrucute_as_code
세 가지 형태로 On-Premise, Hosted SaaS, Private Install이 있습니다.
- On-premise : 사용자의 컴퓨팅 환경에서 오픈소스 바이너리 툴인 Terraform 구성으로 가장 많이 쓰인다.
- Hosted SaaS : Terraform Cloud로 SaaS로 제공되며 하시코프가 서버를 관리하는 형태이다.
- Private Install : Terraform Enterprise로 서버를 설치하여 기업만의 정책에 맞춰 외부와 격리된 네트워크에서 운영한다.
다양한 도구가 있지만, 잘 알려진 도구이다.