1
+ data "aws_region" "current" {}
2
+
3
+ resource random_string "rand" {
4
+ length = 24
5
+ upper = false
6
+ special = false
7
+ }
8
+
9
+ locals {
10
+ namespace = substr (join (" -" , [var . namespace , random_string . rand . result ]), 0 , 24 )
11
+ }
12
+
13
+ resource "aws_resourcegroups_group" "resourcegroups_group" {
14
+ name = " ${ local . namespace } -group"
15
+
16
+ resource_query {
17
+ query = <<- JSON
18
+ {
19
+ "ResourceTypeFilters": [
20
+ "AWS::AllSupported"
21
+ ],
22
+ "TagFilters": [
23
+ {
24
+ "Key": "ResourceGroup",
25
+ "Values": ["${ local . namespace } "]
26
+ }
27
+ ]
28
+ }
29
+ JSON
30
+
31
+ }
32
+ }
33
+
34
+ resource "aws_kem_key" "kms_key" {
35
+ tags = {
36
+ ResourceGroup = local.namespace
37
+ }
38
+ }
39
+
40
+ resource "aws_s3_bucket" "s3_bucket" {
41
+ bucket = " ${ local . namespace } -state-bucket"
42
+ force_destroy = var. force_destroy_state
43
+ versioning {
44
+ enabled = true
45
+ }
46
+
47
+ server_side_encryption_configuration {
48
+ rule {
49
+ apply_server_side_encryption_by_default {
50
+ sse_algorithm = " aws:kms"
51
+ kms_master_key_id = aws_kem_key. kms_key . arn
52
+ }
53
+ }
54
+ }
55
+ tags = {
56
+ ResourceGroup = local.namespace
57
+ }
58
+ }
59
+
60
+ resource "aws_s3_bucket_public_access_block" "s3_bucket" {
61
+ bucket = aws_s3_bucket. s3_bucket . id
62
+
63
+ block_public_acls = true
64
+ block_public_policy = true
65
+ ignore_public_acls = true
66
+ restrict_public_buckets = true
67
+ }
68
+
69
+ resource "aws_dynamodb_table" "dynamodb_table" {
70
+ name = " ${ local . namespace } -state-lock"
71
+ hash_key = " LockID"
72
+ billing_mode = " PAY_PER_REQUEST"
73
+ attribute {
74
+ name = " LockID"
75
+ type = " S"
76
+ }
77
+ tags = {
78
+ ResourceGroup = local.namespace
79
+ }
80
+ }
0 commit comments