Terraform/Terraform

terraform

비니화이팅 2022. 10. 19. 10:53

Terraform 설치

https://www.terraform.io/downloads 

 

Downloads | Terraform by HashiCorp

Terraform is an open-source infrastructure as code software tool that enables you to safely and predictably create, change, and improve infrastructure.

www.terraform.io

$ curl -O https://releases.hashicorp.com/terraform/1.2.9/terraform_1.2.9_linux_386.zip
$ unzip terraform_1.2.9_linux_386.zip
$ mv terraform /usr/local/bin
$ terraform --version

 

Terraform 구성요소

Provider

- 테라폼으로 생성할 인프라의 종류

provider "aws" {
region = "ap-northeast-2"
    version = "~> 3.0"
 }


resource

- 테라폼으로 실제로 생성할 인프라 자원

resource "aws_vpc" "example" {
cidr_block = "10.0.0.0/16"
}


state

- 테라폼을 통해 생성한 자원의 상태
- 원격 저장소인 'backend'에도 저장 가능

{
"version" : 4,
    "terraform_verion" : "0.12.24",
    "serial" : 3,
    "lineage" : XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXX",
    "outputs" : {},
    "resources" : [
     {...},
        {...}
       ]
     }



output

- 테라폼으로 만든 자원을 변수 형태로 state에 저장

 

module

- 공통적으로 활용할 수 있는 코드를 문자 그대로 모듈 형태로 정의

 

remote

- 다른 경로의 state를 참조
- output 변수를 불러올때 주로 사용

Terraform 명령어

init

- 테라폼 명령어 사용을 위한 각종 설정 수행

 

plan

- 테라폼으로 작성한 코드가 실제로 어떻게 만들어질지에 대한 예측 결과 확인

-  내부적으로 실제 리소스를 확인

 

apply

- 테라폼 코드로 실제 인프라를 생성

-  내부적으로 실제 리소스를 확인

 

import

- 이미 만들어진 자원을 테라폼 state 파일로 옮겨주는 명령어


state

- 테라폼 state를 다루는 것으로 mv, push 같은 하위 명령어 존재


destory

- 생성한 자원들을 state 파일 기준으로 모두 삭제

Terraform 시작해보기

1. provider.tf 파일 생성

 

2. terraform init

- aws provider 다운로드

$ terraform init

Initializing the backend...

Initializing provider plugins...
- Finding latest version of hashicorp/aws...
- Installing hashicorp/aws v4.33.0...
- Installed hashicorp/aws v4.33.0 (signed by HashiCorp)

Terraform has created a lock file .terraform.lock.hcl to record the provider
selections it made above. Include this file in your version control repository
so that Terraform can guarantee to make the same selections by default when
you run "terraform init" in the future.

Terraform has been successfully initialized!