1) Introduce global datastore grading to Elasticache(Redis)
Chúng ta có thể sử dụng Global Datastore cho Redis Feature.
Để dễ hiều về Global Datastore bạn sẽ cần nhớ câu: Write Local Read Global
==> Bạn write redis primary và bạn có thể đọc data đó ở bất kỳ redis secondary trên các region khác.
Dưới dây là PDF mình sưu tầm được.
Session-1-ElastiCache-DeepDive_v2_rev2) Action Redis and Global Datastore via UI console of AWS
Bạn có thể sem video.
2.1) Requirement.
Đây là 1 số yêu cầu nho nhỏ khi apply global datastores for Redis.
To use Global Datastores, use Redis engine version 5.0.6 or higher and R5, R6g, R6gd, M5 or M6g node types.
https://docs.amazonaws.cn/en_us/AmazonElastiCache/latest/red-ug/Redis-Global-Datastores-Getting-Started.html
https://github.com/hashicorp/terraform-provider-aws/issues/18075
3) Provisioning Elasticache (Redis) and Global Datastore by Terraform.
3.1) Create both Redis Primary and Global Datastore.
Đầu tiên bạn sẽ tạo redis với vai trò là primary, sau đó create Global Datastore tiếp là add redis primary vào GD.
# Terraform Remote State Datasource - Remote Backend AWS S3 data "terraform_remote_state" "vpc" { backend = "s3" config = { bucket = "terraform-on-aws-eks-nim" key = "dev/vpc-redis-2/terraform.tfstate" region = var.aws_region } } module "elasticache" { source = "mrnim94/elasticache/aws" version = "1.1.12" aws_region = var.aws_region business_divsion = "nimtechnology" environment = "dev" num_nodes = "2" elasticache_subnet_group_name = data.terraform_remote_state.vpc.outputs.elasticache_subnet_group_name engine_version = "5.0.6" family = "redis5.0" instance_type = "cache.t2.micro" #instance_type = "cache.m5.large" vpc_id = data.terraform_remote_state.vpc.outputs.vpc_id global_datastore = false } output "global_replication_group_id" { description = "The suffix name of a Global Datastore" value = module.elasticache.global_replication_group_id }
Có 1 phần bạn cần chú ý là:
trong module sẽ tạo 1 parameter group là cache-params và gắn vào redis primary
Tiếp đến module sẽ tạo parameter group mới “global-datastore-redis-nimtechnology-dev-primaryxeum” bằng cách copy cache-params
Sau đó module sẽ gắn “global-datastore-redis-nimtechnology-dev-primaryxeum” vào redis-primary và global-datastore
3.1.1) Create Global Datastore for the existing Redis.
Error: creating ElastiCache Global Replication Group (xxx-xxx-xxx): InvalidParameterValue: Global replication group is not supported for the node type.
Nếu bạn gặp lỗi này thì cần change type của redis.
variable "aws_region" { description = "Region in which AWS Resources to be created" type = string default = "us-east-2" } provider "aws" { region = "us-east-1" alias = "redis-primary" } #create global datastore. resource "aws_elasticache_global_replication_group" "global_datastore" { provider = aws.redis-primary global_replication_group_id_suffix = "global-datastore-nim" primary_replication_group_id = "redis-nimtechnology-dev" }
3.2) Create Redis secondary based on Global Datastore.
Ở các bước trên chúng ta đã có redis primary và global datastore.
Giờ chúng ta tạo redis secondary
variable "aws_region" { description = "Region in which AWS Resources to be created" type = string default = "us-east-2" } # Terraform Remote State Datasource - Remote Backend AWS S3 data "terraform_remote_state" "vpc" { backend = "s3" config = { bucket = "terraform-on-aws-eks-nim" key = "dev/vpc-redis-3/terraform.tfstate" region = "us-east-1" } } module "elasticache-secondary-on-global-store" { source = "mrnim94/elasticache-secondary-on-global-store/aws" version = "0.0.9" aws_region = var.aws_region business_divsion = "nimtechnology" elasticache_subnet_group_name = data.terraform_remote_state.vpc.outputs.elasticache_subnet_group_name environment = "dev" family = "redis5.0" global_replication_group_id = "ldgnf-redis-nimtechnology-dev" num_nodes = "2" vpc_id = data.terraform_remote_state.vpc.outputs.vpc_id }
Recheck – SET data to primary and GET data from secondary
Using a module to define and set up easily
Vâng nim đã biệt module ở linh dưới bạn có thể tham khảo:
https://registry.terraform.io/modules/mrnim94/elasticache-secondary-on-global-datastore/aws/latest