[기본 구성 요소] Resource

2024. 11. 26. 01:39Terraform/[인프런] 아키텍처와 함께하는 Terraform

1. Resource

- 실제생성되거나 관리되는 인프라 구성 요소를 정의하는 블록이다.
- Resource에는 EC2 인스턴스, 데이터베이스, 네트워크, DNS 레코드 등이 될 수 있다.
- 이러한 리소스를 코드선언하여 인프라를 관리하고 추적 가능하도록 만든다.

 

 

2. Resource 주요 특징

- 선언적 구성 : 원하는 최종 상태를 정의하면 Terraform이 리소스를 생성, 업데이트, 삭제한다.
- ID 기반 관리 : 특정 ID를 기반으로 관리되며, 변경 사항은 Terraform의 상태 파일(State file)을 통해 추적된다.
- 모듈화 및 재사용 가능 : 리소스를 모듈로 정의하면 쉽게 재사용할 수 있다.
- Dependency 관리 : Terraform은 리소스 간의 의존성을 자동으로 계산하여 올바른 순서로 리소스를 생성 및 수정한다.
- 다양한 설정 옵션 : 사용자 정의 태그, 속성, 정책 등을 활용하여 리소스를 세부적으로 설정할 수 있다.

 

 

3. Resource 예제

- AWS에서 EC2 인스턴스를 생성하는 예제 ① 
* 예제
provider "aws" {
  region = "ap-northeast-2"               # 서울 리전
}

resource "aws_instance" "example" {       # Terraform이 관리할 수 있는 리소스 정의
  ami           = "ami-0c1a7f89451184c8b" # AMI ID (서울 리전에서 유효)
  instance_type = "t2.micro"              # EC2 인스턴스 유형

  tags = {                                # 리소스 구분하기 위한 태그 설정
    Name = "ExampleInstance"
  }
}
- VPC와 서브넷 생성을 통한 리소스 의존성 관리 예제 
* 예제
resource "aws_vpc" "example_vpc" {               
  cidr_block = "10.0.0.0/16"

  tags = {
    Name = "ExampleVPC"
  }
}

resource "aws_subnet" "example_subnet" {          # subnet 리소스는 VPC를 기반으로 서브넷 생성
  vpc_id            = aws_vpc.example_vpc.id      # Terraform은 의존성 계산하여 VPC 생성 후 서브넷 생성(VPC 의존성)
  cidr_block        = "10.0.1.0/24"
  availability_zone = "ap-northeast-2a"

  tags = {
    Name = "ExampleSubnet"
  }
}
- Terraform의 resource 블록은 resource "resource type" "resource name" 로 구성된다.
- "resource type"은 어떤 Provider를 사용하는가에 따라 type이 달라지기 때문에 공식 문서를 참고해야한다.