로컬 프로바이더 data 리소스 블록 양식
https://registry.terraform.io/providers/hashicorp/local/latest/docs/data-sources/file#required
data "local_file" "abc" {
filename = "${path.module}/abc.txt"
}
실습과정
현재 경로에 abc.txt가 없을 시 발생하는 에러
#abc.txt 생성
echo "t101 study - 2week" > abc.txt
# Terraform Code
data "<리소스 유형>" "<이름>" {
<인수> = <값>
}
# 데이터 소스 참조
data.<리소스 유형>.<이름>.<속성>
Arguement - 인수
attribute - 데이터로 가져온 소스의 데이터
data "aws_availability_zones" "available" {
state = "available"
}
resource "aws_subnet" "primary" {
availability_zone = data.aws_availability_zones.available.names[0]
# e.g. ap-northeast-2a
}
resource "aws_subnet" "secondary" {
availability_zone = data.aws_availability_zones.available.names[1]
# e.g. ap-northeast-2b
}
#test코드
data "aws_availability_zones" "available" {
state = "available"
}
resource "aws_subnet" "primary" {
availability_zone = data.aws_availability_zones.available.names[0]
# e.g. ap-northeast-2a
vpc_id= aws_vpc.primary.id #리소스 참조
cidr_block= "10.0.0.0/16"
}
resource "aws_subnet" "secondary" {
availability_zone = data.aws_availability_zones.available.names[1]
# e.g. ap-northeast-2b
vpc_id= aws_vpc.secondary.id #리소스 참조
cidr_block= "10.16.0.0/16"
}
#추가한 부분
resource "aws_vpc" "primary" {
cidr_block = "10.0.0.0/16"
}
resource "aws_vpc" "secondary" {
cidr_block = "10.16.0.0/16"
처음에 subnet data resource를 참조시키기 위한 코드를 바로 실행시켰을 때 위와 같이 에러가 발생했음
aws_subnet에서 vpc_id를 작성해줘야하는 부분이 required로 있었음
그래서 추가적으로 vpc 리소스를 추가하여 참조하는 형태로 코드를 추가 작성함
cidr block 에러도 볼 수 있었는데 host가 중첩되는 걸 수정해줬음
공식문서를 참고하여 vpc resource를 생성코드를 작성함
https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/vpc
resource "aws_vpc" "main" {
cidr_block = "10.0.0.0/16"
instance_tenancy = "default"
tags = {
Name = "main"
}
}
실습결과 리소스 생성 스샷
다른 리소스의 값을 데이터에 넣어 새로운 리소스의 값으로 생성함
resource "local_file" "abc" {
content = "123!"
filename = "${path.module}/abc.txt"
}
data "local_file" "abc" {
filename = local_file.abc.filename
}
resource "local_file" "def" {
content = data.local_file.abc.content
filename = "${path.module}/def.txt"
}
abc.txt def.txt 값을 비교해보고 console에서 그 값을 확인한 명령어
data에 들어갈 수 있는 리소스의 값들이 명세되어 있음
console에서도 확인이 가능함
echo "data.aws_availability_zones.azs" | terraform console