[Terraform] 테라폼으로 AWS Elasticache(redis) Cluster 모드로 생성하기
IT/Terraform

[Terraform] 테라폼으로 AWS Elasticache(redis) Cluster 모드로 생성하기

반응형

Intro

오늘은 테라폼으로 AWS Elasticache(redis) Cluster mode로 생성 하는 방법을 알려드리도록 하겠습니다. Elasticache 생성하기 전에 알아야할 몇가지 지식과 생성하면서 겪었던 것들을 공유하면서 최종적으로 테라폼 소스 코드를 공유드리도록 하겠습니다.

Elasticache(redis) cluster mode란?

우선 redis cluster가 어떻게 생겨먹었는지 알아야하는데요. 아래 그림을 보면 쉽게 이해가 될 겁니다.

  • 단일 노드 Redis(클러스터 모드 비활성화됨) 클러스터 : 샤드 없음
  • 다중 노드 Redis(클러스터 모드 비활성화됨) 클러스터 : 샤드가 1개 있음
  • Rdeis(클러스터 모드 활성화됨) 클러스터 : 샤드에서 데이터가 분할된 최대 500개의 샤드를 포함할 수 있음

그러니까 클러스터 모드를 사용해야 샤딩을 여러개 사용할 수 있는 것이죠. 참고로 샤딩은 데이터를 분산시켜서 저장하는 방식을 말합니다.

참고 : https://docs.aws.amazon.com/ko_kr/AmazonElastiCache/latest/red-ug/Clusters.html

클러스터 모드를 사용해야하기 때문에 테라폼 문서를 찾아보니 aws_elasticache_replication_group 을 보라고 나와있습니다.

해당 링크에 Redis Cludter Mode Enabled 예시가 잘 나와있습니다. 해당 예시를 그대로 가져와서 생성이 잘 되는지 테스트를 해보도록 하겠습니다.

resource "aws_elasticache_replication_group" "baz" {
  replication_group_id       = "tf-redis-cluster"
  description                = "example description"
  node_type                  = "cache.t2.small"
  port                       = 6379
  parameter_group_name       = "default.redis3.2.cluster.on"
  automatic_failover_enabled = true

  num_node_groups         = 2
  replicas_per_node_group = 1
}

https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/elasticache_replication_group#redis-cluster-mode-enabled

분명 생성이 안됐었는데..?

22년 03월 30일 위 예제로 redis를 생성하였을때 아래와 같은 메시지로 생성이 안돼어서 방법을 찾다 찾다가 도저히 이해가안되서 hashicorp에 문의 해보니 “유료 고객이 아니라서 지원을 받을 수 없다” 라고 하더니..

Error: error creating ElastiCache Replication Group 
InvalidParameterCombination: Use a parameter group with cluster-enabled parameter to create more than one node group.

혹시 몰라서 4월12일 오늘 테스트 해보니 해당 에러는 사라지고 redis 버전에 대한 에러가 나옵니다. 이 에러는 또 뭐지? 테라폼에서 이제 3.x 버전을 지원하지 않는것인가? 그건 모르겠습니다만 parameter_group_name 파라미터를 "default.redis6.x.cluster.on” 으로 다시 생성했더니 생성이 잘됩니다.

Error: error creating ElastiCache Replication Group (tf-redis-cluster): 
InvalidParameterCombination: Expected a parameter group of family redis6.x but found one of family redis3.2

(아무래도 그 사이 hashicorp 내부적으로 버그 픽스를 하지 않았나 싶네요.)

참고로 테라폼에서 redis 버전 지원은?

redis 버전은 .. 로 구성되어있습니다. 테라폼으로 redis를 생성할때 engine_version 파라미터를 사용하는데, 6 버전 이상은 major 버전만 명시 할 수 있습니다. 즉, 6.x 으로만 설정이 가능하며 그 이하 버전은 전체 버전을 명시 할 수 있다고 합니다.

반응형