AWS 콘솔을 통해 원하는 자원의 elasticache를 생성했다.
하나의 샤드와 2개의 노드(primary, replica)인 redis가 필요했다.
이를 terraform으로 즉, IaC화 하는 게 처음엔 어려웠다.
왜냐하면 테라폼 공식문서에 나온대로 레디스를 생성하면 샤드가 0인 채로 생성됐기 때문이다.
그렇게 삽질을 하던 중 이미 고생을 겪은 분이 공유한 글이 있었다.
이 글을 토대로 terraform 공식문서를 다시 검색하니, 역시 설명이 돼 있었다.
위 문서들을 토대로 원하는 자원을 생성할 수 있었다.
resource "aws_security_group" "redis" {
vpc_id = aws_vpc.main.id
ingress {
from_port = 6379
to_port = 6379
protocol = "tcp"
security_groups = [aws_security_group.eb_sg.id]
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
}
resource "aws_elasticache_subnet_group" "main" {
name = "${local.prefix}-redis-subnet"
subnet_ids = [
aws_subnet.public_a.id,
aws_subnet.public_b.id
]
}
resource "aws_elasticache_replication_group" "main" {
description = local.prefix
automatic_failover_enabled = true
replication_group_id = "${local.prefix}-redis"
node_type = "cache.t4g.micro"
num_cache_clusters = 2
parameter_group_name = "default.redis7"
port = 6379
security_group_ids = [aws_security_group.redis.id]
subnet_group_name = aws_elasticache_subnet_group.main.name
tags = merge(
local.common_tags,
tomap({ "Name" = "${local.prefix}-redis" })
)
}