Skip to content

Commit

Permalink
feat: initial release of Terraform AWS MemoryDB module 🎉
Browse files Browse the repository at this point in the history
  • Loading branch information
bryantbiggs committed Jan 7, 2022
1 parent 66fcd53 commit c1a0698
Show file tree
Hide file tree
Showing 11 changed files with 949 additions and 28 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/semantic-releaser.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,4 +33,4 @@ jobs:
@semantic-release/git@10.0.0
conventional-changelog-conventionalcommits@4.6.3
env:
GITHUB_TOKEN: ${{ secrets.ACCESS_TOKEN }}
GITHUB_TOKEN: ${{ secrets.SEMANTIC_RELEASE }}
181 changes: 168 additions & 13 deletions README.md

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions examples/README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
# Terraform <TODO> examples
# Terraform AWS MemoryDB examples

- [Complete](./complete)
- [Complete](https://github.com/clowdhaus/terraform-aws-memory-db/tree/main/examples/complete)
48 changes: 40 additions & 8 deletions examples/complete/README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
# Complete <TODO> Example
# Complete AWS MemoryDB Example

Configuration in this directory creates:

- <TODO>
- AWS MemoryDB cluster
- AWS MemoryDB users
- AWS MemoryDB ACL
- AWS MemoryDB subnet group
- AWS MemoryDB parameter group

## Usage

Expand All @@ -22,27 +26,55 @@ Note that this example may create resources which will incur monetary charges on
| Name | Version |
|------|---------|
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 0.13.1 |
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | >= 3.30 |
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | >= 3.71 |
| <a name="requirement_random"></a> [random](#requirement\_random) | >= 3.0 |

## Providers

No providers.
| Name | Version |
|------|---------|
| <a name="provider_aws"></a> [aws](#provider\_aws) | >= 3.71 |
| <a name="provider_random"></a> [random](#provider\_random) | >= 3.0 |

## Modules

No modules.
| Name | Source | Version |
|------|--------|---------|
| <a name="module_memory_db"></a> [memory\_db](#module\_memory\_db) | ../.. | n/a |
| <a name="module_memory_db_disabled"></a> [memory\_db\_disabled](#module\_memory\_db\_disabled) | ../.. | n/a |
| <a name="module_security_group"></a> [security\_group](#module\_security\_group) | terraform-aws-modules/security-group/aws | ~> 4.0 |
| <a name="module_vpc"></a> [vpc](#module\_vpc) | terraform-aws-modules/vpc/aws | ~> 3.0 |

## Resources

No resources.
| Name | Type |
|------|------|
| [aws_sns_topic.example](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/sns_topic) | resource |
| [random_password.password](https://registry.terraform.io/providers/hashicorp/random/latest/docs/resources/password) | resource |

## Inputs

No inputs.

## Outputs

No outputs.
| Name | Description |
|------|-------------|
| <a name="output_acl_arn"></a> [acl\_arn](#output\_acl\_arn) | The ARN of the ACL |
| <a name="output_acl_id"></a> [acl\_id](#output\_acl\_id) | Name of the ACL |
| <a name="output_acl_minimum_engine_version"></a> [acl\_minimum\_engine\_version](#output\_acl\_minimum\_engine\_version) | The minimum engine version supported by the ACL |
| <a name="output_cluster_arn"></a> [cluster\_arn](#output\_cluster\_arn) | The ARN of the cluster |
| <a name="output_cluster_endpoint_address"></a> [cluster\_endpoint\_address](#output\_cluster\_endpoint\_address) | DNS hostname of the cluster configuration endpoint |
| <a name="output_cluster_endpoint_port"></a> [cluster\_endpoint\_port](#output\_cluster\_endpoint\_port) | Port number that the cluster configuration endpoint is listening on |
| <a name="output_cluster_engine_patch_version"></a> [cluster\_engine\_patch\_version](#output\_cluster\_engine\_patch\_version) | Patch version number of the Redis engine used by the cluster |
| <a name="output_cluster_id"></a> [cluster\_id](#output\_cluster\_id) | Cluster name |
| <a name="output_cluster_shards"></a> [cluster\_shards](#output\_cluster\_shards) | Set of shards in this cluster |
| <a name="output_parameter_group_arn"></a> [parameter\_group\_arn](#output\_parameter\_group\_arn) | The ARN of the parameter group |
| <a name="output_parameter_group_id"></a> [parameter\_group\_id](#output\_parameter\_group\_id) | Name of the parameter group |
| <a name="output_subnet_group_arn"></a> [subnet\_group\_arn](#output\_subnet\_group\_arn) | ARN of the subnet group |
| <a name="output_subnet_group_id"></a> [subnet\_group\_id](#output\_subnet\_group\_id) | Name of the subnet group |
| <a name="output_subnet_group_vpc_id"></a> [subnet\_group\_vpc\_id](#output\_subnet\_group\_vpc\_id) | The VPC in which the subnet group exists |
| <a name="output_users"></a> [users](#output\_users) | Map of attributes for the users created |
<!-- END OF PRE-COMMIT-TERRAFORM DOCS HOOK -->

Apache-2.0 Licensed. See [LICENSE](../../LICENSE).
Apache-2.0 Licensed. See [LICENSE](https://github.com/clowdhaus/terraform-aws-memory-db/blob/main/LICENSE).
147 changes: 146 additions & 1 deletion examples/complete/main.tf
Original file line number Diff line number Diff line change
@@ -1 +1,146 @@
locals {}
provider "aws" {
region = local.region
}

locals {
region = "us-east-1"
name = "memorydb-ex-${replace(basename(path.cwd), "_", "-")}"

tags = {
Example = local.name
Environment = "dev"
}
}

################################################################################
# Supporting Resources
################################################################################

module "vpc" {
source = "terraform-aws-modules/vpc/aws"
version = "~> 3.0"

name = local.name
cidr = "10.99.0.0/18"

azs = ["${local.region}a", "${local.region}b", "${local.region}d"] # Caution: check which zones are available
private_subnets = ["10.99.0.0/24", "10.99.1.0/24", "10.99.2.0/24"]
database_subnets = ["10.99.3.0/24", "10.99.4.0/24", "10.99.5.0/24"]

create_database_subnet_group = true
enable_nat_gateway = false

manage_default_security_group = true
default_security_group_ingress = []
default_security_group_egress = []

tags = local.tags
}

module "security_group" {
source = "terraform-aws-modules/security-group/aws"
version = "~> 4.0"

name = local.name
description = "Security group for ${local.name}"
vpc_id = module.vpc.vpc_id

ingress_cidr_blocks = module.vpc.private_subnets_cidr_blocks
ingress_rules = ["redis-tcp"]

egress_cidr_blocks = [module.vpc.vpc_cidr_block]
egress_rules = ["all-all"]

tags = local.tags
}

resource "aws_sns_topic" "example" {
name = local.name
kms_master_key_id = "alias/aws/sns"

tags = local.tags
}

resource "random_password" "password" {
for_each = toset(["admin", "readonly"])

length = 16
special = true
override_special = "_%@"
}

################################################################################
# MemoryDB Module
################################################################################

module "memory_db_disabled" {
source = "../.."

name = "${local.name}-disabled"
create = false
}

module "memory_db" {
source = "../.."

# Cluster
name = local.name
description = "Example MemoryDB cluster"

engine_version = "6.2"
auto_minor_version_upgrade = true
node_type = "db.t4g.small"
num_shards = 2
num_replicas_per_shard = 2

tls_enabled = true
security_group_ids = [module.security_group.security_group_id]
maintenance_window = "sun:23:00-mon:01:30"
sns_topic_arn = aws_sns_topic.example.arn
snapshot_retention_limit = 7
snapshot_window = "05:00-09:00"

# Users
users = {
admin = {
user_name = "admin-user"
access_string = "on ~* &* +@all"
passwords = [random_password.password["admin"].result]
tags = { user = "admin" }
}
readonly = {
user_name = "readonly-user"
access_string = "on ~* &* -@all +@read"
passwords = [random_password.password["readonly"].result]
tags = { user = "readonly" }
}
}

# ACL
acl_name = "${local.name}-acl"
acl_tags = { acl = "custom" }

# Parameter group
parameter_group_name = "${local.name}-param-group"
parameter_group_description = "Example MemoryDB parameter group"
parameter_group_family = "memorydb_redis6"
parameter_group_parameters = [
{
name = "activedefrag"
value = "yes"
}
]
parameter_group_tags = {
parameter_group = "custom"
}

# Subnet group
subnet_group_name = "${local.name}-subnet-group"
subnet_group_description = "Example MemoryDB subnet group"
subnet_ids = module.vpc.database_subnets
subnet_group_tags = {
subnet_group = "custom"
}

tags = local.tags
}
95 changes: 95 additions & 0 deletions examples/complete/outputs.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
################################################################################
# Cluster
################################################################################

output "cluster_id" {
description = "Cluster name"
value = module.memory_db.cluster_id
}

output "cluster_arn" {
description = "The ARN of the cluster"
value = module.memory_db.cluster_arn
}

output "cluster_endpoint_address" {
description = "DNS hostname of the cluster configuration endpoint"
value = module.memory_db.cluster_endpoint_address
}

output "cluster_endpoint_port" {
description = "Port number that the cluster configuration endpoint is listening on"
value = module.memory_db.cluster_endpoint_port
}

output "cluster_engine_patch_version" {
description = "Patch version number of the Redis engine used by the cluster"
value = module.memory_db.cluster_engine_patch_version
}

output "cluster_shards" {
description = "Set of shards in this cluster"
value = module.memory_db.cluster_shards
}

################################################################################
# User(s)
################################################################################

output "users" {
description = "Map of attributes for the users created"
value = module.memory_db.users
sensitive = true
}

################################################################################
# ACL
################################################################################

output "acl_id" {
description = "Name of the ACL"
value = module.memory_db.acl_id
}

output "acl_arn" {
description = "The ARN of the ACL"
value = module.memory_db.acl_arn
}

output "acl_minimum_engine_version" {
description = "The minimum engine version supported by the ACL"
value = module.memory_db.acl_minimum_engine_version
}

################################################################################
# Parameter Group
################################################################################

output "parameter_group_id" {
description = "Name of the parameter group"
value = module.memory_db.parameter_group_id
}

output "parameter_group_arn" {
description = "The ARN of the parameter group"
value = module.memory_db.parameter_group_arn
}

################################################################################
# Subnet Group
################################################################################

output "subnet_group_id" {
description = "Name of the subnet group"
value = module.memory_db.subnet_group_id
}

output "subnet_group_arn" {
description = "ARN of the subnet group"
value = module.memory_db.subnet_group_arn
}

output "subnet_group_vpc_id" {
description = "The VPC in which the subnet group exists"
value = module.memory_db.subnet_group_vpc_id
}
7 changes: 6 additions & 1 deletion examples/complete/versions.tf
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,12 @@ terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = ">= 3.30"
version = ">= 3.71"
}
random = {
source = "hashicorp/random"
version = ">= 3.0"
}

}
}
Loading

0 comments on commit c1a0698

Please sign in to comment.