Skip to content

Commit 8d14612

Browse files
authored
feat: add initial module (#1)
1 parent 22c11bf commit 8d14612

File tree

8 files changed

+181
-3
lines changed

8 files changed

+181
-3
lines changed

.version

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
v0.0.1
1+
v1.0.0

README.md

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,68 @@
11
# template of terraform resource repository
22

33
<!-- START_OF_AUTO_GENERATED_SECTION -->
4+
## Requirements
5+
6+
| Name | Version |
7+
|------|---------|
8+
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | ~>1.3.0 |
9+
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | ~>4.20.0 |
10+
11+
## Providers
12+
13+
| Name | Version |
14+
|------|---------|
15+
| <a name="provider_aws"></a> [aws](#provider\_aws) | ~>4.20.0 |
16+
## Resources
17+
18+
| Name | Type |
19+
|------|------|
20+
| [aws_dynamodb_table.terraform-state-lock](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/dynamodb_table) | resource |
21+
| [aws_kms_alias.state](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/kms_alias) | resource |
22+
| [aws_kms_key.state](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/kms_key) | resource |
23+
| [aws_s3_bucket.bucket](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/s3_bucket) | resource |
24+
| [aws_s3_bucket_public_access_block.bucket-acl](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/s3_bucket_public_access_block) | resource |
25+
## Inputs
26+
27+
| Name | Description | Type | Default | Required |
28+
|------|-------------|------|---------|:--------:|
29+
| <a name="input_bucket_name"></a> [bucket\_name](#input\_bucket\_name) | S3 state bucket name | `string` | n/a | yes |
30+
| <a name="input_dynamodb_table_name"></a> [dynamodb\_table\_name](#input\_dynamodb\_table\_name) | DynamoDB state lock table name | `string` | n/a | yes |
31+
| <a name="input_tags"></a> [tags](#input\_tags) | n/a | `map(string)` | `{}` | no |
32+
| <a name="input_default_tags"></a> [default\_tags](#input\_default\_tags) | n/a | `map(string)` | <pre>{<br> "Module": "terraform-state"<br>}</pre> | no |
33+
## Outputs
34+
35+
| Name | Description |
36+
|------|-------------|
37+
| <a name="output_state_bucket_name"></a> [state\_bucket\_name](#output\_state\_bucket\_name) | n/a |
38+
| <a name="output_state_table_name"></a> [state\_table\_name](#output\_state\_table\_name) | n/a |
39+
| <a name="output_state_table_arn"></a> [state\_table\_arn](#output\_state\_table\_arn) | n/a |
40+
41+
## Examples
42+
43+
### Basic example
44+
```hcl
45+
module "string_ssm_keys" {
46+
source = "[email protected]:masterborn/terraform-kms-tfstate-backend.git?ref=v1.0.0"
47+
bucket_name = "example-state-bucket"
48+
dynamodb_table_name = "example-state-lock"
49+
50+
tags = {
51+
Env = "Org"
52+
}
53+
}
54+
```
55+
56+
Then in backend configuration:
57+
```hcl
58+
backend "s3" {
59+
region = "us-east-1"
60+
bucket = "example-state-bucket"
61+
key = "path/to/file/terraform.tfstate"
62+
dynamodb_table = "example-state-lock"
63+
encrypt = true
64+
}
65+
```
466
<!-- END_OF_AUTO_GENERATED_SECTION -->
567

668
## Enabling pre-commit hooks

examples/basic/main.tf

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
module "string_ssm_keys" {
2+
source = "[email protected]:masterborn/terraform-kms-tfstate-backend.git?ref={{ provider_version }}"
3+
bucket_name = "example-state-bucket"
4+
dynamodb_table_name = "example-state-lock"
5+
6+
tags = {
7+
Env = "Org"
8+
}
9+
}

examples/examples.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,14 @@
44
```hcl
55
{{ include "./basic/main.tf" }}
66
```
7+
8+
Then in backend configuration:
9+
```hcl
10+
backend "s3" {
11+
region = "us-east-1"
12+
bucket = "example-state-bucket"
13+
key = "path/to/file/terraform.tfstate"
14+
dynamodb_table = "example-state-lock"
15+
encrypt = true
16+
}
17+
```

main.tf

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
resource "aws_dynamodb_table" "terraform-state-lock" {
2+
name = var.dynamodb_table_name
3+
billing_mode = "PAY_PER_REQUEST"
4+
hash_key = "LockID"
5+
6+
attribute {
7+
name = "LockID"
8+
type = "S"
9+
}
10+
11+
tags = local.tags
12+
}
13+
14+
resource "aws_kms_key" "state" {
15+
description = "Key for terraform remote state backend bucket"
16+
enable_key_rotation = true
17+
tags = var.tags
18+
}
19+
20+
resource "aws_kms_alias" "state" {
21+
name = "alias/state-storage"
22+
target_key_id = aws_kms_key.state.key_id
23+
}
24+
25+
resource "aws_s3_bucket" "bucket" {
26+
bucket = var.bucket_name
27+
acl = "private"
28+
29+
30+
versioning {
31+
enabled = true
32+
}
33+
34+
lifecycle {
35+
prevent_destroy = true
36+
}
37+
38+
server_side_encryption_configuration {
39+
rule {
40+
apply_server_side_encryption_by_default {
41+
kms_master_key_id = aws_kms_key.state.arn
42+
sse_algorithm = "aws:kms"
43+
}
44+
}
45+
}
46+
47+
tags = local.tags
48+
}
49+
50+
resource "aws_s3_bucket_public_access_block" "bucket-acl" {
51+
bucket = aws_s3_bucket.bucket.id
52+
53+
block_public_acls = true
54+
block_public_policy = true
55+
ignore_public_acls = true
56+
restrict_public_buckets = true
57+
}

outputs.tf

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
output "state_bucket_name" {
2+
value = var.bucket_name
3+
}
4+
5+
output "state_table_name" {
6+
value = var.dynamodb_table_name
7+
}
8+
9+
output "state_table_arn" {
10+
value = aws_dynamodb_table.terraform-state-lock.arn
11+
}

variables.tf

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
locals {
2+
tags = merge(var.default_tags, var.tags)
3+
}
4+
5+
variable "bucket_name" {
6+
type = string
7+
description = "S3 state bucket name"
8+
}
9+
10+
variable "dynamodb_table_name" {
11+
type = string
12+
description = "DynamoDB state lock table name"
13+
}
14+
15+
variable "tags" {
16+
type = map(string)
17+
default = {}
18+
}
19+
20+
variable "default_tags" {
21+
type = map(string)
22+
default = {
23+
Module = "terraform-state"
24+
}
25+
}

versions.tf

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
terraform {
2-
required_version = ">= 0.13"
2+
required_version = "~>1.3.0"
33

44
required_providers {
5-
5+
aws = {
6+
source = "hashicorp/aws"
7+
version = "~>4.20.0"
8+
}
69
}
710
}

0 commit comments

Comments
 (0)