Terraform 기초: 리소스 생명 주기 및 데이터 소스 관리하기

2024. 11. 22. 19:47·탐구 생활/Terraform

1. 리소스 생명 주기 (Lifecycle Rules)

Terraform은 리소스를 업데이트할 때 기존 리소스를 삭제(destroy)하고 새로운 리소스를 생성(create)하는 immutable 인프라 접근 방식을 따릅니다. 그러나 모든 경우에 이러한 동작이 적합하지 않을 수 있습니다. 이를 제어하려면 lifecycle rules를 활용할 수 있습니다.

1.1 create_before_destroy

기존 리소스를 삭제하기 전에 새로운 리소스를 먼저 생성한다. 어떤 리소스는 다운 타임을 최소화하기 위해 이러한 조치가 필요할 것이다.

resource "aws_instance" "example" {
  ami           = "ami-123456"
  instance_type = "t2.micro"

  lifecycle {
    create_before_destroy = true
  }
}

1.2 prevent_destroy

리소스가 삭제되지 않도록 보호한다, 이때 보호되는것은 변경에 의한 삭제이지 main.tf 등 문서에서 리소스가 사라졌을때 삭제되는 것까지지 방지하는것은 아니다.

resource "aws_s3_bucket" "example" {
  bucket = "example-bucket"

  lifecycle {
    prevent_destroy = true
  }
}

1.3. ignore_changes

특정 속성 변경을 무시한다. 예를 들어, 태그 변경을 Terraform에서 무시하도록 설정할 수 있다.

resource "aws_instance" "web" {
  ami           = "ami-123456"
  instance_type = "t2.micro"

  lifecycle {
    ignore_changes = [
      tags
    ]
  }
}

 

주로 외부 시스템이나 사용자에 의해 변경될 수 있는 속성을 terraform 이 덮어쓰지 않도록 할 때 유용하다.

- 위의 예시처럼 EC2 인스턴스의 태그나

- S3 의 ACL 처럼 시스템이나 사용자에 의해 변경될 수 있는 것들

- 테스트 환경에서 의도적으로 속성을 변경하려고 할때

 

ignore_changes 가 유용하지만 Terraform 이 바라보는 상태와 실제 인프라의 상태가 달라지게 되므로 나중에 둘을 동기화할때 추가작업이 필요해진다. 따라서 신중히 사용해야한다.


2. Meta Arguments: Count

Terraform에서 동일한 리소스를 여러 개 생성하려면 count 메타 인수를 사용한다.

2.1 기본 사용법

다음은 로컬 파일을 3개 생성하는 예제이다.

resource "local_file" "example" {
  count    = 3
  filename = "/root/file-${count.index}.txt"
  content  = "This is file ${count.index}"
}

 

이렇게 하면 /root/file-0.txt, /root/file-1.txt, /root/file-2.txt가 생성된다.

2.2 Count와 리스트

동적 파일 이름을 사용하려면 리스트 변수를 활용할 수 있다.

variable "filenames" {
  default = ["file-a.txt", "file-b.txt", "file-c.txt"]
}

resource "local_file" "example" {
  count    = length(var.filenames)
  filename = "/root/${var.filenames[count.index]}"
  content  = "This is ${var.filenames[count.index]}"
}

리스트 길이가 변경되면 자동으로 리소스 개수가 조정된다.


3. Data Sources

Terraform은 외부에서 생성된 리소스를 읽고 활용하기 위해 Data Sources를 사용한다. 이때 외부라 하면 현재 terraform 파일에서 관리되지 않는 것을 총칭한다. 외부 클라우드에서 제공되는 데이터 소스일 수도 있으며, 내가 작업중인 컴퓨터의 다른 파일일 수도 있겠다.

3.1 기본 사용법

다음은 로컬 파일의 내용을 읽는 예시이다. example.txt 의 내용을 읽어서 new_example.txt 에 넣는다.

data "local_file" "example" {
  filename = "/root/example.txt"
}

resource "local_file" "new_file" {
  filename = "/root/new_example.txt"
  content  = data.local_file.example.content
}

3.2 Data Sources vs Managed Resources

Managed Resources Data Sources
Terraform에서 리소스를 생성, 업데이트, 삭제 외부 리소스에서 데이터만 읽기
resource 키워드를 사용 data 키워드를 사용
Terraform이 리소스의 상태를 관리 Terraform 외부의 리소스를 참조

 


위의 내용을 활용하여 Terraform을 더욱 효율적으로 관리해보자! 🎯

'탐구 생활 > Terraform' 카테고리의 다른 글

Terraform AWS: VPC 만들기  (0) 2024.11.24
Terraform 기초: commands  (0) 2024.11.21
Terraform 기초: State  (0) 2024.11.21
Terraform 기초: depends_on, output  (0) 2024.11.19
Terraform 기초: HCL 기본기  (0) 2024.11.17
'탐구 생활/Terraform' 카테고리의 다른 글
  • Terraform AWS: VPC 만들기
  • Terraform 기초: commands
  • Terraform 기초: State
  • Terraform 기초: depends_on, output
개발프로브
개발프로브
가볍게, 오랫동안 기록하고 싶은 블로그입니다.
  • 개발프로브
    ProbeHub
    개발프로브
  • 전체
    오늘
    어제
    • 분류 전체보기 (56)
      • 탐구 생활 (47)
        • 개발 탐구 (8)
        • FastAPI CORS (3)
        • FastAPI Log (4)
        • gRPC&Python (4)
        • SpringBoot 파헤치기 (2)
        • Python Monorepo (3)
        • Python 과 zstd (2)
        • Python (4)
        • FastAPI (4)
        • Terraform (8)
        • MSA (0)
        • GraphQL (2)
        • 데이터베이스 (2)
        • 네트워크 (0)
      • 기초 지식 (9)
        • Terraform (2)
        • MSA (5)
        • K8s (2)
  • 블로그 메뉴

    • 링크

      • github
      • stackoverflow
    • 공지사항

    • 인기 글

    • 태그

      python 성능 개선
      springboot
      ORM 문제
      python graviton
      python arn64
      티스토리챌린지
      zstd
      granian
      fastapi logging
      python amd64
      gzip
      ORM 성능 최적화
      python 불변 객체
      FastAPI
      PostgreSQL
      sqlalchemy
      java
      grpc
      오블완
      brotli
      백엔드 성능
      rest vs grpc
      Python
      RDBMS 성능 최적화
      Terraform
      MSA
      ORM 성능
      fastapi cors
      spring 트랜잭션
      django 성능 개선
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.0
    개발프로브
    Terraform 기초: 리소스 생명 주기 및 데이터 소스 관리하기
    상단으로

    티스토리툴바