반응형
이번게시글에서는 count, 조건문, 반복문 사용법을 정리합니다.
s3 bucket만 사용한 예제입니다.
1. count 사용법
provider "aws" {
region = "ap-northeast-2"
}
resource "aws_s3_bucket" "this" {
count = 3
bucket = "frozen-bucket-${count.index}"
}
count라는 필드는 내부적으로 반복되는 특징이 있어서 이런식으로 사용하게되면 버킷이 3개 생성되게 됩니다.
(아래의 상황에 직면할 가능성이 조금이라도 존재한다면 count로 resource를 관리하는것은 추천하지 않습니다)
2. count를 활용하여 조건문처럼 사용하기
provider "aws" {
region = "ap-northeast-2"
}
resource "aws_s3_bucket" "this" {
count = var.needBucket? 1 : 0
bucket = "frozen-bucket"
}
variable "needBucket" {
type = bool
default = false
}
count에 삼항연산자를 사용하여 1이나 0을 줬습니다.
needBucket이 true면 버킷이 한개 만들어지고, false라면 count가 0이 되어 해당 블록은 동작하지 않게 됩니다.
3. dynamic과 foreach
resource "aws_s3_bucket" "this" {
bucket = "frozend-bucket"
lifecycle_rule {
enabled = true
id = "first_rule"
}
lifecycle_rule {
enabled = true
id = "second_rule"
}
}
해당 버킷을 관리하는 lifecycle_rule을 두개 만들어줄 예정입니다.(이름만 있는 rule 입니다)
count를 사용하면 resource 자체가 여러개가 되게 할 수는 있지만 내부 블락을 여러개 만들때 사용하기에는 적절하지 않습니다.
이럴때 dynamic을 사용합니다.
resource "aws_s3_bucket" "this" {
bucket = "frozen-bucket"
dynamic "lifecycle_rule" {
for_each = var.my_lifecycle_rule
content {
id = lifecycle_rule.value["id"]
enabled = lifecycle_rule.value["enabled"]
}
}
}
variable "my_lifecycle_rule" {
default = [
{
id : "first_rule",
enabled = true,
},
{
id : "second_rule",
enabled = true
}
]
}
루프를 돌려야하므로 외부는 list 내부에는 map으로 넣는게 일반적입니다.
4. lookup
hashmap의 자료구조를 사용할때는 key가 있는지 검증해줘야 합니다.
누군가 variable을 사용할때 enabled 필드를 빼먹었다면 python이라면 아래의 소스코드의 과정이 필요합니다.
# python
for my_lifecycle_rule in my_lifecycle_rules:
if "enabled" not in my_lifecycle_rule.keys():
my_lifecycle_rule["enabled"] = true
테라폼코드에서는 lookup을 사용합니다.
resource "aws_s3_bucket" "this" {
bucket = "rookie-terraform-bucket"
dynamic "lifecycle_rule" {
for_each = var.my_lifecycle_rule
content {
id = lifecycle_rule.value["id"]
// key를 빼먹은경우 default를 true로 지정하겠습니다.
enabled = lookup(lifecycle_rule.value, "enabled", true)
}
}
}
variable "my_lifecycle_rule" {
default = [
{
id : "first_rule",
enabled = true,
},
{
id : "second_rule",
// 누군가 enabled를 빼먹은상황
}
]
}
반응형
'terraform' 카테고리의 다른 글
[terraform] resource를 여러개 생성하는 올바른 방법(count보다는 for_each) (0) | 2022.11.03 |
---|---|
[terraform] 테라폼 backend, tfstate란 (0) | 2022.05.24 |
[terraform] 테라폼 module 사용법(테라폼 모듈 사용법) (0) | 2022.05.11 |
[terraform] 테라폼 variable 사용법(테라폼 변수 사용법) (0) | 2022.05.11 |
[terraform] 테라폼 시작하기 (terraform tutorial, 테라폼 예제) (0) | 2022.04.22 |
댓글