Fairy ' s

[DevOps] Infrastructure as Code / Terraform 본문

Study/DevOps

[DevOps] Infrastructure as Code / Terraform

berafairy 2023. 7. 16. 17:45

 

 Infrastructure as Code, 즉 코드로써의 인프라는 인프라를 이루는 서버, 미들웨어 그리고 서비스 등, 인프라 구성요소들을 코드를 통해 구축하는 것이다. IaC는 코드로써의 장점, 즉 작성용이성, 재사용성, 유지보수 등의 장점을 가진다.


Terraform by Hashicorp

 테라폼은 인프라를 만들고, 변경하고, 기록하는 IaC를 위해 만들어진 도구로써, 문법이 쉬워 비교적 다루기 쉽고 사용자가 매우 많아 참고할 수 있는 예제가 많다. AWS, Azure, GCP 같은 퍼블릭 클라우드 뿐 아니라 다양한 서비스들을 지원한다.

구성 요소  
provider 테라폼으로 생성할 인프라의 종류
resource 테라폼으로 실제 생성할 인프라 자원
state 테라폼을 통해 생성한 자원의 상태
output 테라폼으로 만든 자원을 변수 형태로 state 파일에 저장하는 것
module 공통적으로 활용할 수 있는 코드를 문자 그대로 모듈 형태로 정의하는 것. 재사용에 강점이 있다.
remote 다른 경로의 state를 참조하는 것. output 변수를 불러올 때 주로 사용

provider : 다양한 Arguments를 가지며, AWS resource를 다루기 위한 파일들을 다운로드 하는 역할을 한다.

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

resource

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

 VPC를 생성하는 예시이다. 리소스를 생성할 때 이 외에도 다양한 Argument와 다른 구성요소가 존재한다. 

"aws_vpc" 부분은 어떠한 리소스를 만들지에 대한 명시이고, "example" 부분은 실제 vpc에 지정할 이름이다.


state : 테라폼으로 작성된 코드를 실행하게 되면 생성되는 파일이다. 

# terraform.tfstate 라는 파일명을 가진다.
{
    "version": 4,
    "terraform_version": "0.12.24",
    "serial": 3,
    "lineage": "..."
    "outputs": {},
    "resource": [
        {...},
        {...}
    ]
}

현재 인프라의 상태를 의미하는 것은 아니며, state는 원격 저장소인 'backend' 에도 저장될 수 있다.


output : 리소스의 인자들을 참조해서 특정 형태의 변수를 만들고, output을 이용해 state 파일로 저장한다. 리모트를 사용해 재사용할 수 있다.

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

output "vpc_id" {
    value = aws_vpc.example.id
}
output "cidr_block" {
    value = aws_vpc.example.cidr_block
}

 


module : 한 번 만들어진 테라폼 코드로 같은 형태를 반복적으로 만들어낼 때 주로 사용된다.

module "vpc" {
    source = "../_modules/vpc"
    
    cidr_block = "10.0.0.0/16"
}

remote : 원격 참조 개념, remote state는 key 값에 명시한 state에서 output으로 저장된 변수를 가져온다.

data "terraform_remote_state" "vpc" {
    backend = "remote"
    
    config = {
        bucket = "terraform-s3-bucket"
        region = "ap-northeast-2"
        key    = "terraform/vpc/terraform.tfstate"
    }
}

기본 명령어 (Init → Plan → Apply)

terraform init
# 테라폼 명령어 사용을 위해 각종 설정 진행

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

terraform apply
# 테라폼 코드로 실제 인프라 생성

terraform import
# 이미 만들어진 자원을 테라폼 state 파일로 옮김

terraform state
# 테라폼 state를 다루는 명령어, 하위 명령어로 mv, push가 있다.

terraform destroy
# 생성된 자원들을 state 파일 기준으로 모두 삭제

 

'Study > DevOps' 카테고리의 다른 글

[DevOps] DevOps란?  (0) 2023.07.16
Comments