Skip to content

Commit f91028d

Browse files
authored
feat: Support elasticache serverless cache (#3)
1 parent 079e768 commit f91028d

File tree

23 files changed

+470
-22
lines changed

23 files changed

+470
-22
lines changed

README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -284,14 +284,14 @@ Examples codified under the [`examples`](https://github.com/terraform-aws-module
284284
| Name | Version |
285285
|------|---------|
286286
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 1.0 |
287-
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | >= 5.27 |
287+
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | >= 5.46 |
288288
| <a name="requirement_random"></a> [random](#requirement\_random) | >= 3.0 |
289289

290290
## Providers
291291

292292
| Name | Version |
293293
|------|---------|
294-
| <a name="provider_aws"></a> [aws](#provider\_aws) | >= 5.27 |
294+
| <a name="provider_aws"></a> [aws](#provider\_aws) | >= 5.46 |
295295
| <a name="provider_random"></a> [random](#provider\_random) | >= 3.0 |
296296

297297
## Modules

examples/memcached-cluster/README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,13 @@ Note that this example may create resources which will incur monetary charges on
2020
| Name | Version |
2121
|------|---------|
2222
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 1.0 |
23-
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | >= 5.27 |
23+
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | >= 5.46 |
2424

2525
## Providers
2626

2727
| Name | Version |
2828
|------|---------|
29-
| <a name="provider_aws"></a> [aws](#provider\_aws) | >= 5.27 |
29+
| <a name="provider_aws"></a> [aws](#provider\_aws) | >= 5.46 |
3030

3131
## Modules
3232

examples/memcached-cluster/versions.tf

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ terraform {
44
required_providers {
55
aws = {
66
source = "hashicorp/aws"
7-
version = ">= 5.27"
7+
version = ">= 5.46"
88
}
99
}
1010
}

examples/redis-cluster-mode/README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,13 @@ Note that this example may create resources which will incur monetary charges on
2222
| Name | Version |
2323
|------|---------|
2424
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 1.0 |
25-
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | >= 5.27 |
25+
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | >= 5.46 |
2626

2727
## Providers
2828

2929
| Name | Version |
3030
|------|---------|
31-
| <a name="provider_aws"></a> [aws](#provider\_aws) | >= 5.27 |
31+
| <a name="provider_aws"></a> [aws](#provider\_aws) | >= 5.46 |
3232

3333
## Modules
3434

examples/redis-cluster-mode/versions.tf

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ terraform {
44
required_providers {
55
aws = {
66
source = "hashicorp/aws"
7-
version = ">= 5.27"
7+
version = ">= 5.46"
88
}
99
}
1010
}

examples/redis-cluster/README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,13 @@ Note that this example may create resources which will incur monetary charges on
2020
| Name | Version |
2121
|------|---------|
2222
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 1.0 |
23-
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | >= 5.27 |
23+
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | >= 5.46 |
2424

2525
## Providers
2626

2727
| Name | Version |
2828
|------|---------|
29-
| <a name="provider_aws"></a> [aws](#provider\_aws) | >= 5.27 |
29+
| <a name="provider_aws"></a> [aws](#provider\_aws) | >= 5.46 |
3030

3131
## Modules
3232

examples/redis-cluster/versions.tf

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ terraform {
44
required_providers {
55
aws = {
66
source = "hashicorp/aws"
7-
version = ">= 5.27"
7+
version = ">= 5.46"
88
}
99
}
1010
}

examples/redis-global-replication-group/README.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,14 @@ Note that this example may create resources which will incur monetary charges on
2424
| Name | Version |
2525
|------|---------|
2626
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 1.0 |
27-
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | >= 5.27 |
27+
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | >= 5.46 |
2828

2929
## Providers
3030

3131
| Name | Version |
3232
|------|---------|
33-
| <a name="provider_aws"></a> [aws](#provider\_aws) | >= 5.27 |
34-
| <a name="provider_aws.euwest1"></a> [aws.euwest1](#provider\_aws.euwest1) | >= 5.27 |
33+
| <a name="provider_aws"></a> [aws](#provider\_aws) | >= 5.46 |
34+
| <a name="provider_aws.euwest1"></a> [aws.euwest1](#provider\_aws.euwest1) | >= 5.46 |
3535

3636
## Modules
3737

examples/redis-global-replication-group/versions.tf

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ terraform {
44
required_providers {
55
aws = {
66
source = "hashicorp/aws"
7-
version = ">= 5.27"
7+
version = ">= 5.46"
88
}
99
}
1010
}

examples/redis-replication-group/README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,13 @@ Note that this example may create resources which will incur monetary charges on
2020
| Name | Version |
2121
|------|---------|
2222
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 1.0 |
23-
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | >= 5.27 |
23+
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | >= 5.46 |
2424

2525
## Providers
2626

2727
| Name | Version |
2828
|------|---------|
29-
| <a name="provider_aws"></a> [aws](#provider\_aws) | >= 5.27 |
29+
| <a name="provider_aws"></a> [aws](#provider\_aws) | >= 5.46 |
3030

3131
## Modules
3232

examples/redis-replication-group/versions.tf

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ terraform {
44
required_providers {
55
aws = {
66
source = "hashicorp/aws"
7-
version = ">= 5.27"
7+
version = ">= 5.46"
88
}
99
}
1010
}

examples/serverless-cache/main.tf

+109
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
provider "aws" {
2+
region = local.region
3+
}
4+
5+
data "aws_availability_zones" "available" {}
6+
7+
locals {
8+
region = "eu-west-1"
9+
name = "ex-${basename(path.cwd)}"
10+
11+
vpc_cidr = "10.0.0.0/16"
12+
azs = slice(data.aws_availability_zones.available.names, 0, 3)
13+
14+
tags = {
15+
Name = local.name
16+
Example = local.name
17+
Repository = "https://github.com/terraform-aws-modules/terraform-aws-elasticache"
18+
}
19+
}
20+
21+
module "serverless" {
22+
source = "../../modules/serverless-cache"
23+
24+
engine = "redis"
25+
cache_name = local.name
26+
27+
cache_usage_limits = {
28+
data_storage = {
29+
maximum = 2
30+
}
31+
ecpu_per_second = {
32+
maximum = 1000
33+
}
34+
}
35+
36+
daily_snapshot_time = "22:00"
37+
description = "${local.name} serverless cluster"
38+
kms_key_id = aws_kms_key.this.arn
39+
major_engine_version = "7"
40+
security_group_ids = [module.sg.security_group_id]
41+
42+
snapshot_retention_limit = 7
43+
subnet_ids = module.vpc.private_subnets
44+
45+
user_group_id = module.cache_user_group.group_id
46+
}
47+
48+
module "cache_user_group" {
49+
source = "../../modules/user-group"
50+
51+
default_user = {
52+
user_id = "${local.name}-default"
53+
authentication_mode = {
54+
type = "no-password-required"
55+
}
56+
}
57+
58+
users = {
59+
redis = {
60+
user_id = local.name
61+
user_name = "redis"
62+
access_string = "on ~* -@all +@read"
63+
authentication_mode = {
64+
type = "no-password-required"
65+
}
66+
}
67+
}
68+
69+
user_group_id = "redis"
70+
}
71+
72+
################################################################################
73+
# Supporting Resources
74+
################################################################################
75+
76+
module "vpc" {
77+
source = "terraform-aws-modules/vpc/aws"
78+
version = "~> 5.0"
79+
80+
name = local.name
81+
cidr = local.vpc_cidr
82+
83+
azs = local.azs
84+
public_subnets = [for k, v in local.azs : cidrsubnet(local.vpc_cidr, 8, k)]
85+
private_subnets = [for k, v in local.azs : cidrsubnet(local.vpc_cidr, 8, k + 10)]
86+
87+
tags = local.tags
88+
}
89+
90+
resource "aws_kms_key" "this" {
91+
description = "KMS CMK for ${local.name}"
92+
enable_key_rotation = true
93+
94+
tags = local.tags
95+
}
96+
97+
module "sg" {
98+
source = "terraform-aws-modules/security-group/aws"
99+
version = "~> 5.0"
100+
101+
name = local.name
102+
description = "Security group for VPC traffic"
103+
vpc_id = module.vpc.vpc_id
104+
105+
ingress_cidr_blocks = [module.vpc.vpc_cidr_block]
106+
ingress_rules = ["redis-tcp"]
107+
108+
tags = local.tags
109+
}

examples/serverless-cache/outputs.tf

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
output "serverless_cache_arn" {
2+
description = "The amazon resource name of the serverless cache"
3+
value = module.serverless.serverless_cache_arn
4+
}
5+
6+
output "serverless_cache_create_time" {
7+
description = "Timestamp of when the serverless cache was created"
8+
value = module.serverless.serverless_cache_create_time
9+
}
10+
11+
output "serverless_cache_endpoint" {
12+
description = " Represents the information required for client programs to connect to a cache node"
13+
value = module.serverless.serverless_cache_endpoint
14+
}
15+
16+
output "serverless_cache_full_engine_version" {
17+
description = "The name and version number of the engine the serverless cache is compatible with"
18+
value = module.serverless.serverless_cache_full_engine_version
19+
}
20+
21+
output "serverless_cache_major_engine_version" {
22+
description = "The version number of the engine the serverless cache is compatible with"
23+
value = module.serverless.serverless_cache_major_engine_version
24+
}
25+
26+
output "serverless_cache_reader_endpoint" {
27+
description = "Represents the information required for client programs to connect to a cache node"
28+
value = module.serverless.serverless_cache_reader_endpoint
29+
}
30+
31+
output "serverless_cache_status" {
32+
description = "The current status of the serverless cache. The allowed values are CREATING, AVAILABLE, DELETING, CREATE-FAILED and MODIFYING"
33+
value = module.serverless.serverless_cache_status
34+
}

examples/serverless-cache/variables.tf

Whitespace-only changes.

examples/serverless-cache/versions.tf

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
terraform {
2+
required_version = ">= 1.0"
3+
4+
required_providers {
5+
aws = {
6+
source = "hashicorp/aws"
7+
version = ">= 5.46"
8+
}
9+
}
10+
}

0 commit comments

Comments
 (0)