블록체인
블록체인

Terraform 시작하기

Terraform 설치

$ 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
Plain Text
복사
<br>

Terraform 구성요소

Provider

테라폼으로 생성할 인프라의 종류
provider "aws" { region = "ap-northeast-2" version = "~> 3.0" }
Plain Text
복사

resource

테라폼으로 실제로 생성할 인프라 자원
resource "aws_vpc" "example" { cidr_block = "10.0.0.0/16" }
Plain Text
복사

state

테라폼을 통해 생성한 자원의 상태
원격 저장소인 'backend'에도 저장 가능
{ "version" : 4, "terraform_verion" : "0.12.24", "serial" : 3, "lineage" : XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXX", "outputs" : {}, "resources" : [ {...}, {...} ] }
Plain Text
복사

output

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

module

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

remote

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

Terraform 명령어

init

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

plan

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

apply

테라폼 코드로 실제 인프라를 생성
실제 리소스 확인

import

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

state

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

destory

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

Terraform 시작해보기

1. provider.tf 파일 생성

provider "aws" { region = "ap-northeast-2" }
Plain Text
복사

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!
Plain Text
복사

2-1. aws 라이브러리 다운 확인

terrform 폴더 내 AWS 라이브러리가 다운받아진 것을 확인
$ ls -al total 8 drwxrwxr-x 3 ec2-user ec2-user 70 Oct 3 10:48 . drwx------ 7 ec2-user ec2-user 292 Oct 3 10:50 .. -rw-rw-r-- 1 ec2-user ec2-user 46 Oct 3 10:47 provider.tf drwxr-xr-x 3 ec2-user ec2-user 23 Oct 3 10:48 .terraform -rw-r--r-- 1 ec2-user ec2-user 1152 Oct 3 10:48 .terraform.lock.hcl
Plain Text
복사

3. s3.tf 파일 작성

resource "aws_s3_bucket" "test" { bucket = "test-hbeen-bucket" }
Plain Text
복사

4. terraform plan

어떻게 만들어질 것인지 확인
$ terraform plan Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols: + create Terraform will perform the following actions: # aws_s3_bucket.test will be created + resource "aws_s3_bucket" "test" { + acceleration_status = (known after apply) + acl = (known after apply) + arn = (known after apply) + bucket = "test-hbeen-bucket" + bucket_domain_name = (known after apply) + bucket_regional_domain_name = (known after apply) + force_destroy = false + hosted_zone_id = (known after apply) + id = (known after apply) + object_lock_enabled = (known after apply) + policy = (known after apply) + region = (known after apply) + request_payer = (known after apply) + tags_all = (known after apply) + website_domain = (known after apply) + website_endpoint = (known after apply)
Plain Text
복사

5. terraform apply

자원 생성
$ terraform apply Do you want to perform these actions? Terraform will perform the actions described above. Only 'yes' will be accepted to approve. Enter a value: yes aws_s3_bucket.test: Creating... aws_s3_bucket.test: Creation complete after 1s [id=test-hbeen-bucket] Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
Plain Text
복사

5-1. state 파일 생성 확인

백엔드를 지정하지 않았기 때문에 백엔드가 로컬이 됨
$ ls -l total 16 -rw-rw-r-- 1 ec2-user ec2-user 46 Oct 3 10:47 provider.tf -rw-rw-r-- 1 ec2-user ec2-user 66 Oct 3 11:22 s3.tf -rw-rw-r-- 1 ec2-user ec2-user 2191 Oct 3 11:23 terraform.tfstate -rw-rw-r-- 1 ec2-user ec2-user 155 Oct 3 11:23 terraform.tfstate.backup
Plain Text
복사

6. 생성된 자원 확인

$ aws s3 ls 2022-10-03 11:23:25 test-hbeen-bucket
Plain Text
복사

7. resource파일, state파일 삭제

$ rm -rf s3.tf terraform.tfstate terraform.tfstate.backup $ ls -al total 8 drwxrwxr-x 3 ec2-user ec2-user 70 Oct 3 12:02 . drwx------ 7 ec2-user ec2-user 292 Oct 3 12:03 .. -rw-rw-r-- 1 ec2-user ec2-user 46 Oct 3 10:47 provider.tf drwxr-xr-x 3 ec2-user ec2-user 23 Oct 3 10:48 .terraform -rw-r--r-- 1 ec2-user ec2-user 1152 Oct 3 10:48 .terraform.lock.hcl $ terraform plan No changes. Your infrastructure matches the configuration. Terraform has compared your real infrastructure against your configuration and found no differences, so no changes are needed.
Plain Text
복사

8. terraform import

8-1 s3.tf 파일 작성

resource "aws_s3_bucket" "test" { bucket = "test-hbeen-bucket" }
Plain Text
복사

8-2 terraform import

$ terraform import aws_s3_bucket.test test-hbeen-bucket
Plain Text
복사

8-3. state 파일 생성 확인

$ ls -al total 16 drwxrwxr-x 3 ec2-user ec2-user 108 Oct 3 12:13 . drwx------ 7 ec2-user ec2-user 292 Oct 3 12:13 .. -rw-rw-r-- 1 ec2-user ec2-user 46 Oct 3 10:47 provider.tf -rw-rw-r-- 1 ec2-user ec2-user 66 Oct 3 12:11 s3.tf drwxr-xr-x 3 ec2-user ec2-user 23 Oct 3 10:48 .terraform -rw-r--r-- 1 ec2-user ec2-user 1152 Oct 3 10:48 .terraform.lock.hcl -rw-rw-r-- 1 ec2-user ec2-user 2344 Oct 3 12:13 terraform.tfstate
Plain Text
복사