An open API service indexing awesome lists of open source software.

https://github.com/terraform-aws-modules/terraform-aws-memory-db

Terraform module to create AWS MemoryDB resources πŸ‡ΊπŸ‡¦
https://github.com/terraform-aws-modules/terraform-aws-memory-db

aws aws-memory-db memory-database terraform terraform-module

Last synced: 12 months ago
JSON representation

Terraform module to create AWS MemoryDB resources πŸ‡ΊπŸ‡¦

Awesome Lists containing this project

README

          

# AWS MemoryDB Terraform module

Terraform module which creates AWS MemoryDB resources.

## Usage

See [`examples`](https://github.com/terraform-aws-modules/terraform-aws-memory-db/tree/master/examples) directory for working examples to reference:

```hcl
module "memory_db" {
source = "terraform-aws-modules/memory-db/aws"

# Cluster
name = "example"
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 = ["sg-12345678"]
maintenance_window = "sun:23:00-mon:01:30"
sns_topic_arn = "arn:aws:sns:us-east-1:012345678910:example-topic"
snapshot_retention_limit = 7
snapshot_window = "05:00-09:00"

# Users
users = {
admin = {
user_name = "admin-user"
access_string = "on ~* &* +@all"
passwords = ["YouShouldPickAStrongSecurePassword987!"]
tags = { User = "admin" }
}
readonly = {
user_name = "readonly-user"
access_string = "on ~* &* -@all +@read"
passwords = ["YouShouldPickAStrongSecurePassword123!"]
tags = { User = "readonly" }
}
}

# ACL
acl_name = "example-acl"
acl_tags = { Acl = "custom" }

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

# Subnet group
subnet_group_name = "example-subnet-group"
subnet_group_description = "Example MemoryDB subnet group"
subnet_ids = ["subnet-1fe3d837", "subnet-129d66ab", "subnet-1211eef5"]
subnet_group_tags = {
SubnetGroup = "custom"
}

tags = {
Terraform = "true"
Environment = "dev"
}
}
```

## Conditional Creation

The following values are provided to toggle on/off creation of the associated resources as desired:

```hcl
module "memory_db" {
source = "terraform-aws-modules/memory-db/aws"

# Disable creation of cluster and all resources
create = false

# Disable creation of users
create_users = false

# Disable creation of ACL - an ACL will need to be provided
create_acl = false
acl_name = "existing_acl"

# Disable creation of parameter group - a parameter group will need to be provided
create_parameter_group = false
parameter_group_name = "existing_parameter_group"

# Disable creation of subnet group - a subnet group will need to be provided
create_subnet_group = false
subnet_group_name = "existing_subnet_group"

# ... omitted
}
```

## Examples

Examples codified under the [`examples`](https://github.com/terraform-aws-modules/terraform-aws-memory-db/tree/master/examples) are intended to give users references for how to use the module(s) as well as testing/validating changes to the source code of the module. If contributing to the project, please be sure to make any appropriate updates to the relevant examples to allow maintainers to test your changes and to keep the examples up to date for users. Thank you!

- [Complete](https://github.com/terraform-aws-modules/terraform-aws-memory-db/tree/master/examples/complete)
- [Valkey](https://github.com/terraform-aws-modules/terraform-aws-memory-db/tree/master/examples/valkey)

## Requirements

| Name | Version |
|------|---------|
| [terraform](#requirement\_terraform) | >= 1.0 |
| [aws](#requirement\_aws) | >= 5.82 |

## Providers

| Name | Version |
|------|---------|
| [aws](#provider\_aws) | >= 5.82 |

## Modules

No modules.

## Resources

| Name | Type |
|------|------|
| [aws_memorydb_acl.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/memorydb_acl) | resource |
| [aws_memorydb_cluster.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/memorydb_cluster) | resource |
| [aws_memorydb_parameter_group.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/memorydb_parameter_group) | resource |
| [aws_memorydb_subnet_group.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/memorydb_subnet_group) | resource |
| [aws_memorydb_user.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/memorydb_user) | resource |

## Inputs

| Name | Description | Type | Default | Required |
|------|-------------|------|---------|:--------:|
| [acl\_name](#input\_acl\_name) | Name of ACL to be created if `create_acl` is `true`, otherwise its the name of an existing ACL to use if `create_acl` is `false` | `string` | `null` | no |
| [acl\_tags](#input\_acl\_tags) | Additional tags for the ACL created | `map(string)` | `{}` | no |
| [acl\_use\_name\_prefix](#input\_acl\_use\_name\_prefix) | Determines whether `acl_name` is used as a prefix | `bool` | `false` | no |
| [acl\_user\_names](#input\_acl\_user\_names) | List of externally created user names to associate with the ACL | `list(string)` | `[]` | no |
| [auto\_minor\_version\_upgrade](#input\_auto\_minor\_version\_upgrade) | When set to `true`, the cluster will automatically receive minor engine version upgrades after launch. Defaults to `true` | `bool` | `null` | no |
| [create](#input\_create) | Determines whether resources will be created - affects all resources | `bool` | `true` | no |
| [create\_acl](#input\_create\_acl) | Determines whether to create ACL specified | `bool` | `true` | no |
| [create\_parameter\_group](#input\_create\_parameter\_group) | Determines whether to create parameter group specified | `bool` | `true` | no |
| [create\_subnet\_group](#input\_create\_subnet\_group) | Determines whether to create subnet group specified | `bool` | `true` | no |
| [create\_users](#input\_create\_users) | Determines whether to create users specified | `bool` | `true` | no |
| [data\_tiering](#input\_data\_tiering) | Must be set to `true` when using a data tiering node type | `bool` | `null` | no |
| [description](#input\_description) | Description for the cluster. Defaults to `Managed by Terraform` | `string` | `null` | no |
| [engine](#input\_engine) | The engine that will run on your nodes. Supported values are redis and valkey | `string` | `null` | no |
| [engine\_version](#input\_engine\_version) | Version number of the engine to be used for the cluster. Downgrades are not supported | `string` | `null` | no |
| [final\_snapshot\_name](#input\_final\_snapshot\_name) | Name of the final cluster snapshot to be created when this resource is deleted. If omitted, no final snapshot will be made | `string` | `null` | no |
| [kms\_key\_arn](#input\_kms\_key\_arn) | ARN of the KMS key used to encrypt the cluster at rest | `string` | `null` | no |
| [maintenance\_window](#input\_maintenance\_window) | Specifies the weekly time range during which maintenance on the cluster is performed. It is specified as a range in the format `ddd:hh24:mi-ddd:hh24:mi` | `string` | `null` | no |
| [multi\_region\_cluster\_name](#input\_multi\_region\_cluster\_name) | The multi region cluster identifier if part of a multi region cluster | `string` | `null` | no |
| [name](#input\_name) | Cluster name - also default name used on all resources if more specific resource names are not provided | `string` | `""` | no |
| [node\_type](#input\_node\_type) | The compute and memory capacity of the nodes in the cluster. See AWS documentation on [supported node types](https://docs.aws.amazon.com/memorydb/latest/devguide/nodes.supportedtypes.html) as well as [vertical scaling](https://docs.aws.amazon.com/memorydb/latest/devguide/cluster-vertical-scaling.html) | `string` | `null` | no |
| [num\_replicas\_per\_shard](#input\_num\_replicas\_per\_shard) | The number of replicas to apply to each shard, up to a maximum of 5. Defaults to `1` (i.e. 2 nodes per shard) | `number` | `null` | no |
| [num\_shards](#input\_num\_shards) | The number of shards in the cluster. Defaults to `1` | `number` | `null` | no |
| [parameter\_group\_description](#input\_parameter\_group\_description) | Description for the parameter group. Defaults to `Managed by Terraform` | `string` | `null` | no |
| [parameter\_group\_family](#input\_parameter\_group\_family) | The engine version that the parameter group can be used with | `string` | `null` | no |
| [parameter\_group\_name](#input\_parameter\_group\_name) | Name of parameter group to be created if `create_parameter_group` is `true`, otherwise its the name of an existing parameter group to use if `create_parameter_group` is `false` | `string` | `null` | no |
| [parameter\_group\_parameters](#input\_parameter\_group\_parameters) | A list of parameter maps to apply | `list(map(string))` | `[]` | no |
| [parameter\_group\_tags](#input\_parameter\_group\_tags) | Additional tags for the parameter group created | `map(string)` | `{}` | no |
| [parameter\_group\_use\_name\_prefix](#input\_parameter\_group\_use\_name\_prefix) | Determines whether `parameter_group_name` is used as a prefix | `bool` | `false` | no |
| [port](#input\_port) | The port number on which each of the nodes accepts connections. Defaults to `6379` | `number` | `null` | no |
| [security\_group\_ids](#input\_security\_group\_ids) | Set of VPC Security Group ID-s to associate with this cluster | `list(string)` | `null` | no |
| [snapshot\_arns](#input\_snapshot\_arns) | List of ARN-s that uniquely identify RDB snapshot files stored in S3. The snapshot files will be used to populate the new cluster | `list(string)` | `null` | no |
| [snapshot\_name](#input\_snapshot\_name) | The name of a snapshot from which to restore data into the new cluster | `string` | `null` | no |
| [snapshot\_retention\_limit](#input\_snapshot\_retention\_limit) | The number of days for which MemoryDB retains automatic snapshots before deleting them. When set to `0`, automatic backups are disabled. Defaults to `0` | `number` | `null` | no |
| [snapshot\_window](#input\_snapshot\_window) | The daily time range (in UTC) during which MemoryDB begins taking a daily snapshot of your shard. Example: `05:00-09:00` | `string` | `null` | no |
| [sns\_topic\_arn](#input\_sns\_topic\_arn) | ARN of the SNS topic to which cluster notifications are sent | `string` | `null` | no |
| [subnet\_group\_description](#input\_subnet\_group\_description) | Description for the subnet group. Defaults to `Managed by Terraform` | `string` | `null` | no |
| [subnet\_group\_name](#input\_subnet\_group\_name) | Name of subnet group to be created if `create_subnet_group` is `true`, otherwise its the name of an existing subnet group to use if `create_subnet_group` is `false` | `string` | `null` | no |
| [subnet\_group\_tags](#input\_subnet\_group\_tags) | Additional tags for the subnet group created | `map(string)` | `{}` | no |
| [subnet\_group\_use\_name\_prefix](#input\_subnet\_group\_use\_name\_prefix) | Determines whether `subnet_group_name` is used as a prefix | `bool` | `false` | no |
| [subnet\_ids](#input\_subnet\_ids) | Set of VPC Subnet ID-s for the subnet group. At least one subnet must be provided | `list(string)` | `[]` | no |
| [tags](#input\_tags) | A map of tags to use on all resources | `map(string)` | `{}` | no |
| [tls\_enabled](#input\_tls\_enabled) | A flag to enable in-transit encryption on the cluster. When set to `false`, the `acl_name` must be `open-access`. Defaults to `true` | `bool` | `null` | no |
| [use\_name\_prefix](#input\_use\_name\_prefix) | Determines whether `name` is used as a prefix for the cluster | `bool` | `false` | no |
| [users](#input\_users) | A map of user definitions (maps) to be created | `any` | `{}` | no |

## Outputs

| Name | Description |
|------|-------------|
| [acl\_arn](#output\_acl\_arn) | The ARN of the ACL |
| [acl\_id](#output\_acl\_id) | Name of the ACL |
| [acl\_minimum\_engine\_version](#output\_acl\_minimum\_engine\_version) | The minimum engine version supported by the ACL |
| [cluster\_arn](#output\_cluster\_arn) | The ARN of the cluster |
| [cluster\_endpoint\_address](#output\_cluster\_endpoint\_address) | DNS hostname of the cluster configuration endpoint |
| [cluster\_endpoint\_port](#output\_cluster\_endpoint\_port) | Port number that the cluster configuration endpoint is listening on |
| [cluster\_engine\_patch\_version](#output\_cluster\_engine\_patch\_version) | Patch version number of the Redis engine used by the cluster |
| [cluster\_id](#output\_cluster\_id) | Cluster name |
| [cluster\_shards](#output\_cluster\_shards) | Set of shards in this cluster |
| [parameter\_group\_arn](#output\_parameter\_group\_arn) | The ARN of the parameter group |
| [parameter\_group\_id](#output\_parameter\_group\_id) | Name of the parameter group |
| [subnet\_group\_arn](#output\_subnet\_group\_arn) | ARN of the subnet group |
| [subnet\_group\_id](#output\_subnet\_group\_id) | Name of the subnet group |
| [subnet\_group\_vpc\_id](#output\_subnet\_group\_vpc\_id) | The VPC in which the subnet group exists |
| [users](#output\_users) | Map of attributes for the users created |

## License

Apache-2.0 Licensed. See [LICENSE](https://github.com/terraform-aws-modules/terraform-aws-memory-db/blob/master/LICENSE).