테라폼 스터디그룹 T101 2주차 정리 - 1

DevOps Engineer·2023년 9월 24일
0

T101-2week

목록 보기
1/2

데이터 소스 블록

로컬 프로바이더 data 리소스 블록 양식
https://registry.terraform.io/providers/hashicorp/local/latest/docs/data-sources/file#required

data "local_file" "abc" {
  filename = "${path.module}/abc.txt"
}
  • depends_on: 종속성을 선언, 선언된 구성요소와의 생성 시점에 대한 정의
  • count: 선언된 개수에 따라 여러 리소스를 생성
  • for_each: map 또는 set 타입의 데이터 배열의 값을 기준으로 여러 리소스를 생성
  • lifecycle: 리소스의 수명주기 관리

실습과정

현재 경로에 abc.txt가 없을 시 발생하는 에러

#abc.txt 생성
echo "t101 study - 2week" > abc.txt


데이터 소스를 활용해 AWS 가용영역 인수를 정의 → 리전 내에서 사용 가능한 가용영역 목록 가져와서 사용하기

# 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"
  }
}

실습결과 리소스 생성 스샷


data 활용방법

다른 리소스의 값을 데이터에 넣어 새로운 리소스의 값으로 생성함

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에서 그 값을 확인한 명령어

terraform state show

data에 들어갈 수 있는 리소스의 값들이 명세되어 있음
console에서도 확인이 가능함

echo "data.aws_availability_zones.azs" | terraform console

profile
madame의 Techblog

0개의 댓글