Terraform

목록으로 돌아가기

1. Terraform Fundamentals

- 인프라를 안전하고 효율적으로 구축, 변경 및 버전 관리하기 위한 도구

- 컴퓨팅 인스턴스, 스토리지 및 네트워킹과 같은 하위 수준 구성 요소와 DNS 항목 및 SaaS 기능과 같은 상위 수준 구성 요소가 모두 포함하여 관리할 수 있음

2. Infrastructure as Code with Terraform

-HashiCorp에서 제공하는 코드로서의 인프라(infrastructure as code)

- HCL(HashiCorp Configuration Language)이라는 구성 언어로 환경을 관리

Build Infrastructure

1) main.tf 생성 : touch main.tf



초기화 : terraform init

Resources 생성 : terraform apply

3)Resources 추가


위 리소스에는 몇 가지 추가 arguments가 포함되어 있다

docs에서 옵션 확인 가능



Infrastructure 삭제 : terraform destroy

3. Interact with Terraform Modules

- Terraform 모듈은 단일 디렉토리에 있는 Terraform 구성 파일 세트

$ tree minimal-module/


- LICENSE : 모듈이 배포될 라이센스가 포함되어 있다.

모듈을 공유할 때 LICENSE 파일을 사용하는 사람들이 모듈을 사용할 수 있게 된 조건을 알 수 있다.

Terraform 자체는 이 파일을 사용하지 않는다.

- README.md : 모듈 사용 방법을 설명하는 마크다운 형식의 문서가 포함되어 있다.

Terraform은 이 파일을 사용하지 않지만 Terraform Registry 및 GitHub와 같은 서비스는 이 파일의 내용을 모듈의 Terraform Registry 또는 GitHub 페이지 방문자에게 표시한다.

- main.tf : 모듈에 대한 기본 구성 세트가 포함되어 있다.

다른 구성 파일을 만들고 프로젝트에 적합한 방식으로 구성할 수도 있다.

- variables.tf : 모듈에 대한 변수 정의를 포함한다. 다른 사람이 귀하의 모듈을 사용하는 경우 변수는 모듈 블록의 인수로 구성된다.

모든 Terraform 값을 정의해야 하므로 기본값이 없는 변수는 필수 인수가 된다.

기본값이 있는 변수를 모듈 인수로 제공하여 기본값을 재정의할 수도 있다.

- outputs.tf : 모듈에 대한 출력 정의를 포함한다.

모듈 출력은 모듈을 사용하는 구성에서 사용할 수 있으므로 모듈에서 정의한 인프라 부분에 대한 정보를 구성의 다른 부분으로 전달하는 데 자주 사용된다.

4. Managing Terraform State

- Terraform은 관리형 인프라 및 구성에 대한 상태를 저장해야 한다.

- 이 상태는 Terraform에서 실제 리소스를 구성에 매핑하고, 메타데이터를 추적하며, 대규모 인프라의 성능을 개선하는데 사용된다.

terraform apply 시 발생한 에러

Error: Failed to load plugin schemas

hashicorp issue 참고

Error 종류 : permission denined

바이너리 권한이 실행 가능한 것으로 설정되어 있지 않을 수 있다.

파일 시스템이 noexec 옵션으로 마운트되지 않았는지 확인한다. 아래 명령은 "noexec" 플래그가 있는 마운트 지점이 있는지 표시한다.

mount | grep noexec

chmod +x chmod +x terraform/providers/registry.terraform.io/hashicorp/google/4.11.0/linux_amd64/terraform-provider-google_v4.11.0_x5


[Reference]

Automating Infrastructure on Google Cloud with Terraform

Terraform Buy Me A Coffee