이번에는 데이터소스와 변수에 대해서 알아보겠습니다.
데이터소스
데이터소스는 테라폼으로 정의되지 않은 외부 리소스 또는 저장된 정보를 테라폼 내에서 참조할 때 사용합니다.
데이터소스의 구성은 아래와 같이 구성을 할 수 있습니다.
또한, data 로 시작하고 "데이터 소스 유형"을 정의합니다.
# Terraform Code
data "<리소스 유형>" "<이름>" {
<인수> = <값>
}
참조하기 위해서는 data.<리소스 유형>.<이름>.<속성> 를 사용합니다.
예를 들면 아래와 같이 최신 AWS AMI 버전을 가져 온 후 ec2를 생성 합니다.
// AWS AMI 최신 버전 가져오는 data soruce
data "aws_ami" "ubuntu" {
most_recent = true
filter {
name = "name"
values = ["ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-*"]
}
filter {
name = "virtualization-type"
values = ["hvm"]
}
owners = ["099720109477"] # Canonical
}
// 위에 설정한 data soruce를 참조해서 ec2 생성
esource "aws_instance" "example" {
//위에 설정한 AMI로 생성
ami = data.aws_ami.ubuntu.id
//EC2 type 지정
instance_type = "t2.micro"
//Tag 이름
tags = {
Name = "blog-ec2"
}
}
변수 Variable
변수는 인프라를 구성하는 데 필요한 속성 값을 정의해 코드의 변경 없이 여러 인프라를 생성하는 데 목적이 있습니다.
테라폼에서는 이것을 입력 변수 Input Variables 로 정의하고 terrafrom plan에서 수행을 합니다.
변수 선언 방식은 아래 variable으로 시작하는 블록으로 구성이 되어 있습니다.
변수 블록 뒤의 이름 값은 동일 모듈 내 모든 변수 선언에서 고유해야 하며, 이 이름으로 다른 코드 내에서 참조가 됩니다.
# variable 블록 선언의 예
variable "<이름>" {
<인수> = <값>
}
variable "image_id" {
type = string
}
주의 사항은 테라폼의 예약 변수 이름으로는 사용이 불가능합니다.
예약 변수들은 source, version, providers, count, for_each, lifecycle, depends_on, locals 입니다.
변수 정의 시 사용 가능한 메타인수
- default : 변수 값을 전달하는 여러 가지 방법을 지정하지 않으면 기본값이 전달됨, 기본값이 없으면 대화식으로 사용자에게 변수에 대한 정보를 물어봄
- type : 변수에 허용되는 값 유형 정의, string number bool list map set object tuple 와 유형을 지정하지 않으면 any 유형으로 간주
- description : 입력 변수의 설명
- validation : 변수 선언의 제약조건을 추가해 유효성 검사 규칙을 정의
- sensitive : 민감한 변수 값임을 알리고 테라폼의 출력문에서 값 노출을 제한 (암호 등 민감 데이터의 경우)
- nullable : 변수에 값이 없어도 됨을 지정 가능
유효성 검사
입력되는 변수 타입 지징 이외, 사용자 지정 유효성 검사가 가능합니다.
- 변수 블록 내에 validation 블록에서 조건인 condition에 지정되는 규칙이 true 또는 false를 반환해야 하며, error_message는 condition 값의 결과가 false 인 경우 출력되는 메시지를 정의 합니다.
- regex 함수는 대상의 문자열에 정규식을 적용하고 일치하는 문자열을 반환하는데, 여기에 can 함수를 함께 사용하면 정규식에 일치하지 않는 경우의 오류를 검출 합니다.
- validation 블록은 중복으로 선언할 수 있습니다.
변수에서 사용가능한 데이터 타입
- string : 글자 유형
- number : 숫자 유형
- bool : true 또는 false
- any : 명시적으로 모든 유형이 허용됨을 표시
- list (<유형>): 인덱스 기반 집합
- map (<유형>): 값 = 속성 기반 집합이며 키값 기준 정렬
- set (<유형>): 값 기반 집합이며 정렬 키값 기준 정렬
- object ({<인수 이름>=<유형>, …})
- tuple ([<유형>, …])
'Terraform' 카테고리의 다른 글
[Terraform] Terrafrom 사용법 반복문 (0) | 2023.07.16 |
---|---|
[Terraform] Terrafrom 기본 사용법 Local / Output (0) | 2023.07.15 |
[Terraform] Terraform 사용법 (0) | 2023.07.09 |
[Terraform] 테라폼의 기본 개념 (0) | 2023.07.09 |
[Terraform] 테라폼 설치 및 세팅 (0) | 2023.07.05 |