Skip to content

Commit b06c596

Browse files
authored
feat: add provisions for accepting KMS key ARN for global table regions (#38)
1 parent c003af7 commit b06c596

File tree

12 files changed

+66
-28
lines changed

12 files changed

+66
-28
lines changed

.pre-commit-config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,6 @@ repos:
2121
- '--args=--only=terraform_standard_module_structure'
2222
- '--args=--only=terraform_workspace_remote'
2323
- repo: git://github.com/pre-commit/pre-commit-hooks
24-
rev: v3.4.0
24+
rev: v4.0.1
2525
hooks:
2626
- id: check-merge-conflict

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,13 @@ module "dynamodb_table" {
3737
| Name | Version |
3838
|------|---------|
3939
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 0.12.6 |
40-
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | >= 2.58 |
40+
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | >= 3.37 |
4141

4242
## Providers
4343

4444
| Name | Version |
4545
|------|---------|
46-
| <a name="provider_aws"></a> [aws](#provider\_aws) | >= 2.58 |
46+
| <a name="provider_aws"></a> [aws](#provider\_aws) | 3.38.0 |
4747

4848
## Modules
4949

@@ -81,7 +81,7 @@ No modules.
8181
| <a name="input_point_in_time_recovery_enabled"></a> [point\_in\_time\_recovery\_enabled](#input\_point\_in\_time\_recovery\_enabled) | Whether to enable point-in-time recovery | `bool` | `false` | no |
8282
| <a name="input_range_key"></a> [range\_key](#input\_range\_key) | The attribute to use as the range (sort) key. Must also be defined as an attribute | `string` | `null` | no |
8383
| <a name="input_read_capacity"></a> [read\_capacity](#input\_read\_capacity) | The number of read units for this table. If the billing\_mode is PROVISIONED, this field should be greater than 0 | `number` | `null` | no |
84-
| <a name="input_replica_regions"></a> [replica\_regions](#input\_replica\_regions) | Region names for creating replicas for a global DynamoDB table. | `list(string)` | `[]` | no |
84+
| <a name="input_replica_regions"></a> [replica\_regions](#input\_replica\_regions) | Region names for creating replicas for a global DynamoDB table. | `any` | `[]` | no |
8585
| <a name="input_server_side_encryption_enabled"></a> [server\_side\_encryption\_enabled](#input\_server\_side\_encryption\_enabled) | Whether or not to enable encryption at rest using an AWS managed KMS customer master key (CMK) | `bool` | `false` | no |
8686
| <a name="input_server_side_encryption_kms_key_arn"></a> [server\_side\_encryption\_kms\_key\_arn](#input\_server\_side\_encryption\_kms\_key\_arn) | The ARN of the CMK that should be used for the AWS KMS encryption. This attribute should only be specified if the key is different from the default DynamoDB CMK, alias/aws/dynamodb. | `string` | `null` | no |
8787
| <a name="input_stream_enabled"></a> [stream\_enabled](#input\_stream\_enabled) | Indicates whether Streams are to be enabled (true) or disabled (false). | `bool` | `false` | no |

examples/autoscaling/README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,21 +20,21 @@ Note that this example may create resources which can cost money (AWS Elastic IP
2020
| Name | Version |
2121
|------|---------|
2222
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 0.12.6 |
23-
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | >= 2.58 |
23+
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | >= 3.37 |
2424
| <a name="requirement_random"></a> [random](#requirement\_random) | >= 2.0 |
2525

2626
## Providers
2727

2828
| Name | Version |
2929
|------|---------|
30-
| <a name="provider_random"></a> [random](#provider\_random) | >= 2.0 |
30+
| <a name="provider_random"></a> [random](#provider\_random) | 3.1.0 |
3131

3232
## Modules
3333

3434
| Name | Source | Version |
3535
|------|--------|---------|
36-
| <a name="module_disabled_dynamodb_table"></a> [disabled\_dynamodb\_table](#module\_disabled\_dynamodb\_table) | ../../ | |
37-
| <a name="module_dynamodb_table"></a> [dynamodb\_table](#module\_dynamodb\_table) | ../../ | |
36+
| <a name="module_disabled_dynamodb_table"></a> [disabled\_dynamodb\_table](#module\_disabled\_dynamodb\_table) | ../../ | n/a |
37+
| <a name="module_dynamodb_table"></a> [dynamodb\_table](#module\_dynamodb\_table) | ../../ | n/a |
3838

3939
## Resources
4040

examples/autoscaling/versions.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ terraform {
22
required_version = ">= 0.12.6"
33

44
required_providers {
5-
aws = ">= 2.58"
5+
aws = ">= 3.37"
66
random = ">= 2.0"
77
}
88
}

examples/basic/README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,21 +20,21 @@ Note that this example may create resources which can cost money (AWS Elastic IP
2020
| Name | Version |
2121
|------|---------|
2222
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 0.12.6 |
23-
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | >= 2.58 |
23+
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | >= 3.37 |
2424
| <a name="requirement_random"></a> [random](#requirement\_random) | >= 2.0 |
2525

2626
## Providers
2727

2828
| Name | Version |
2929
|------|---------|
30-
| <a name="provider_random"></a> [random](#provider\_random) | >= 2.0 |
30+
| <a name="provider_random"></a> [random](#provider\_random) | 3.1.0 |
3131

3232
## Modules
3333

3434
| Name | Source | Version |
3535
|------|--------|---------|
36-
| <a name="module_disabled_dynamodb_table"></a> [disabled\_dynamodb\_table](#module\_disabled\_dynamodb\_table) | ../../ | |
37-
| <a name="module_dynamodb_table"></a> [dynamodb\_table](#module\_dynamodb\_table) | ../../ | |
36+
| <a name="module_disabled_dynamodb_table"></a> [disabled\_dynamodb\_table](#module\_disabled\_dynamodb\_table) | ../../ | n/a |
37+
| <a name="module_dynamodb_table"></a> [dynamodb\_table](#module\_dynamodb\_table) | ../../ | n/a |
3838

3939
## Resources
4040

examples/basic/versions.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ terraform {
22
required_version = ">= 0.12.6"
33

44
required_providers {
5-
aws = ">= 2.58"
5+
aws = ">= 3.37"
66
random = ">= 2.0"
77
}
88
}

examples/global-tables/README.md

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,25 +20,29 @@ Note that this example may create resources which can cost money (AWS Elastic IP
2020
| Name | Version |
2121
|------|---------|
2222
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 0.12.6 |
23-
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | >= 2.58 |
23+
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | >= 3.37 |
2424
| <a name="requirement_random"></a> [random](#requirement\_random) | >= 2.0 |
2525

2626
## Providers
2727

2828
| Name | Version |
2929
|------|---------|
30-
| <a name="provider_random"></a> [random](#provider\_random) | >= 2.0 |
30+
| <a name="provider_aws"></a> [aws](#provider\_aws) | 3.38.0 |
31+
| <a name="provider_aws.euwest2"></a> [aws.euwest2](#provider\_aws.euwest2) | 3.38.0 |
32+
| <a name="provider_random"></a> [random](#provider\_random) | 3.1.0 |
3133

3234
## Modules
3335

3436
| Name | Source | Version |
3537
|------|--------|---------|
36-
| <a name="module_dynamodb_table"></a> [dynamodb\_table](#module\_dynamodb\_table) | ../../ | |
38+
| <a name="module_dynamodb_table"></a> [dynamodb\_table](#module\_dynamodb\_table) | ../../ | n/a |
3739

3840
## Resources
3941

4042
| Name | Type |
4143
|------|------|
44+
| [aws_kms_key.primary](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/kms_key) | resource |
45+
| [aws_kms_key.secondary](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/kms_key) | resource |
4246
| [random_pet.this](https://registry.terraform.io/providers/hashicorp/random/latest/docs/resources/pet) | resource |
4347

4448
## Inputs

examples/global-tables/main.tf

Lines changed: 40 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,42 @@ provider "aws" {
22
region = "eu-west-1"
33
}
44

5+
provider "aws" {
6+
alias = "euwest2"
7+
region = "eu-west-2"
8+
}
9+
10+
locals {
11+
tags = {
12+
Terraform = "true"
13+
Environment = "staging"
14+
}
15+
}
16+
17+
################################################################################
18+
# Supporting Resources
19+
################################################################################
20+
521
resource "random_pet" "this" {
622
length = 2
723
}
824

25+
resource "aws_kms_key" "primary" {
26+
description = "CMK for primary region"
27+
tags = local.tags
28+
}
29+
30+
resource "aws_kms_key" "secondary" {
31+
provider = aws.euwest2
32+
33+
description = "CMK for secondary region"
34+
tags = local.tags
35+
}
36+
37+
################################################################################
38+
# DynamoDB Global Table
39+
################################################################################
40+
941
module "dynamodb_table" {
1042
source = "../../"
1143

@@ -15,6 +47,9 @@ module "dynamodb_table" {
1547
stream_enabled = true
1648
stream_view_type = "NEW_AND_OLD_IMAGES"
1749

50+
server_side_encryption_enabled = true
51+
server_side_encryption_kms_key_arn = aws_kms_key.primary.arn
52+
1853
attributes = [
1954
{
2055
name = "id"
@@ -40,12 +75,10 @@ module "dynamodb_table" {
4075
}
4176
]
4277

43-
replica_regions = [
44-
"eu-west-2"
45-
]
78+
replica_regions = [{
79+
region_name = "eu-west-2"
80+
kms_key_arn = aws_kms_key.secondary.arn
81+
}]
4682

47-
tags = {
48-
Terraform = "true"
49-
Environment = "staging"
50-
}
83+
tags = local.tags
5184
}

examples/global-tables/versions.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ terraform {
22
required_version = ">= 0.12.6"
33

44
required_providers {
5-
aws = ">= 2.58"
5+
aws = ">= 3.37"
66
random = ">= 2.0"
77
}
88
}

main.tf

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,8 @@ resource "aws_dynamodb_table" "this" {
5757
for_each = var.replica_regions
5858

5959
content {
60-
region_name = replica.value
60+
region_name = replica.value.region_name
61+
kms_key_arn = lookup(replica.value, "kms_key_arn", null)
6162
}
6263
}
6364

0 commit comments

Comments
 (0)