본문 바로가기
  • lakescript
스터디 이야기/Terraform

[T101] 2-1. Terraform - Data Source

by lakescript 2024. 6. 17.

 

더보기

이 스터디는 CloudNet@에서 진행하는 T101 스터디를 참여하면서 공부하는 내용을 기록하는 블로그 포스팅입니다.

CloudNet@에서 제공해주는 자료들과 테라폼으로 시작하는 IaC 를 바탕으로 작성되었습니다.

 

Data Source

데이터 소스는 테라폼으로 정의되지 않은 외부 리소스 또는 저장된 정보를 테라폼 내에서 참조할 때 사용합니다.

Data Source 구성

데이터 소스 블록은 data로 시작됩니다. 

data "local_file" "abc" {
	filename = "${path.module}/abc.txt"
}
  • 데이터 소스 유형은 첫 번째 언더스코어인 '_'를 기준으로 앞은 프로바이더 이름, 뒤는 프로바이더에서 제공하는 리소스 유형을 의미합니다.
  • 데이터 소스 유형을 선언한 뒤에는 고유한 이름을 붙입니다. 리소스 이름과 마찬가지로 이름은 동일한 유형에 대해 식별자 역할을 하므로 중복될 수 없습니다.
  • 이름 뒤에는 데이터 소스 유형에 대한 구성 인수들은 {} 안에 선언합니다. 인수가 필요하지 않은 유형도 있지만, 그때에도 {}는 입력합니다.

메타 인수

depends_on

종속성을 선언하며, 선언된 구성 요소와의 생성 시점에 대해 정의합니다.

count

선언된 개수에 따라 여러 데이터 소스를 선언합니다.

for_each

map또는 set 타입의 데이터 배열의 값을 기준으로 여러 리소스를 생성합니다.

provider

동일한 프로바이더가 다수 정의되어 있는 경우 지정합니다.

lifecycle

데이터 소스의 수명 주기를 관리합니다.

 

 

데이터 소스 참조 확인

echo "terraform study" > abc.txt

데이터 소스 확인을 위해 위의 코드로 abc.txt 파일을 생성합니다.

terraform init & terraform plan & terraform apply -auto-approve

terraform state list

 

현재 terraform.tfstate에 저장된 state 목록을 확인해보겠습니다.

local_file이라는 리소스 유형과 abc라는 이름의 data 소스가 생성된 것을 확인하실 수 있습니다.

terraform console

 

terraform console을 활용해서 현재 생성된 tfstate의 참조 방식에 대해 살펴보겠습니다.

 

terraform console에 진입하신 뒤 확인할 소스와 리소스 유형, 이름을 입력하시면 설정된 값을 확인하실 수 있습니다.

여기서는 data.local_file.abc를 입력해서 설정된 terraform 속성 값을 확인합니다.

Terraform console이란?
terraform console은 Terraform CLI(Command Line Interface)에서 제공하는 대화형 셸로, Terraform 표현식을 테스트하고 결과를 즉시 확인할 수 있는 도구로서 Terraform 구성 파일에서 사용되는 변수, 함수 및 기타 표현식을 실행하고 그 결과를 확인할 수 있습니다.

데이터 소스 속성 참조

# terraform code
data "<리소스 유형>" "<이름>" {
	<인수> = <값>
}

# 데이터 소스 잠조
data.<리소스 유형>.<이름>.<속성>

 

데이터 소스로 읽은 대상을 참조하는 방식은 리소스와 구별되게 앞에 data가 붙습니다.

 

리전 내에서 사용 가능한 가용영역 목록 가져오기

data "aws_availability_zones" "seoul" {
  state = "available"
}

aws_availability_zones라는 리소스 유형에 seoul이라는 이름을 가진 data 소스를 가져오는 terraform 코드를 작성합니다.

terraform init -upgrade && terraform plan && terraform apply -auto-approve

terraform state list

 

terraform init과 plan, apply를 진행한 후 terraform state list를 확인합니다.

 

data.aws_availability_zones.seoul이라는 state가 생성된 것을 확인하실 수 있는데, show 명령어로 조금 더 자세히 확인해보겠습니다.

 

terraform state show data.aws_availability_zones.seoul

실습 - Data Source를 활용하여 VPC 생성해보기

현재 생성되어 있는 vpc 목록 확인

AWS Managed Console에 접속하여 현재 생성되어 있는 VPC를 확인합니다.

aws ec2 describe-vpcs

awscli를 통해서도 확인가능합니다.

 

 

data source를 통해 속성 가져오기

data "aws_availability_zones" "seoul" {
  state = "available"
}

 

위에서 작성해놓은 코드를 terraform apply 후 state list를 하여 data를 확인해보면 아래와 같았습니다.

여기서 필요한 값을 가져다가 VPC resource를 만들어보겠습니다.

 

resource 작성

resource "aws_vpc" "lake_vpc" {
  cidr_block = "10.0.0.0/16"

  tags = {
    Name = "lake test"
  }
}

resource "aws_subnet" "public_subnet" {
  vpc_id = aws_vpc.lake_vpc.id
  cidr_block = "10.0.0.0/24"

  availability_zone = data.aws_availability_zones.seoul.names[0]

  tags = {
    Name = aws_vpc.lake_vpc.tags.Name
  }
}

 

aws vpc를 만들기 위해 aws vpc와 subnet을 생성하는 코드를 작성합니다. 이때 availability_zone의 값은 data를 통해 가져오도록 작성되었습니다. 특히, data 소스를 resource에서 사용하기 위해서는 show state를 통해 확인한 값들을 적절하게 호출해야 합니다. 위의 코드에서는 availability_zone이 ap-northeast-2a인 값을 가져오기 위해 data.aws_availability_zones.seoul.names[0]를 불러왔습니다. (ap-northeast-2d를 가져오려면 data.aws_availability_zones.seoul.names[3]을 해야겠죠?)

여기서 aws_subnet 리소스를 작성하려면 필수로 입력해야 하는 값이 존재합니다. 공식문서 를 참고하시면 확인이 가능한데, aws_subnet일 경우 vpc_id가 필수로 입력되어야 합니다. 이처럼 terraform 코드를 작성하실 때 필수로 요구되는 값들을 먼저 확인 후 넣어주셔야 생성이 원활히 진행됩니다.

 

terraform plan & apply

terraform plan & terraform apply -auto-approve

 

terraform plan & apply를 실행하면 아래와 같이 2 added인 결과를 확인하실 수 있습니다.

 

새로 생성된 vpc 목록 확인

AWS Managed Console에 접속하여 새롭게 생성된 VPC를 확인합니다.