Skip to content

Commit 5d5ed6a

Browse files
Commit by Dhairya Anilbhai Dudhatra
1 parent 65dacb7 commit 5d5ed6a

10 files changed

Lines changed: 305 additions & 0 deletions

File tree

stackgen_iac/terraform/.gitignore

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# Source: https://github.com/github/gitignore/blob/main/Terraform.gitignore
2+
# Local .terraform directories
3+
**/.terraform/*
4+
5+
# .tfstate files
6+
*.tfstate
7+
*.tfstate.*
8+
9+
# Crash log files
10+
crash.log
11+
crash.*.log
12+
13+
# Ignore override files as they are usually used to override resources locally and so
14+
# are not checked in
15+
override.tf
16+
override.tf.json
17+
*_override.tf
18+
*_override.tf.json
19+
20+
# Ignore transient lock info files created by terraform apply
21+
.terraform.tfstate.lock.info
22+
23+
# Include override files you do wish to add to version control using negated pattern
24+
# !example_override.tf
25+
26+
# Include tfplan files to ignore the plan output of command: terraform plan -out=tfplan
27+
# example: *tfplan*
28+
29+
# Ignore CLI configuration files
30+
.terraformrc
31+
terraform.rc
32+

stackgen_iac/terraform/.metadata

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"app_stack_name": "untitled-appStack-5aed0be7",
3+
"iac_type": "Terraform",
4+
"provider": "aws",
5+
"multi_env": false,
6+
"exporter": "terraform"
7+
}

stackgen_iac/terraform/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# README
2+
This is a readme file for IaC generated with StackGen.
3+
You can modify your appStack -> [here](http://appcd.local/appstacks/7168e7a8-5587-4bc7-a49e-9cac58671fef)

stackgen_iac/terraform/main.tf

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
module "stackgen_74c0ac7c-39ec-4dcd-bcd2-e6ab4e00ee1f" {
2+
source = "./modules/aws_s3"
3+
block_public_access = true
4+
bucket_name = "dgtshteha"
5+
bucket_policy = ""
6+
enable_versioning = true
7+
enable_website_configuration = false
8+
sse_algorithm = "aws:kms"
9+
tags = {}
10+
website_error_document = "404.html"
11+
website_index_document = "index.html"
12+
}
13+
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
resource "aws_s3_bucket" "this" {
2+
bucket = var.bucket_name
3+
tags = var.tags
4+
}
5+
6+
# create versioning for the bucket
7+
resource "aws_s3_bucket_versioning" "this" {
8+
# create this resource only if var.versioning is not empty
9+
count = var.enable_versioning ? 1 : 0
10+
11+
bucket = aws_s3_bucket.this.id
12+
13+
# enable versioning
14+
versioning_configuration {
15+
status = "Enabled"
16+
}
17+
}
18+
19+
# Create a server-side encryption configuration for the bucket
20+
resource "aws_s3_bucket_server_side_encryption_configuration" "this" {
21+
# create this resource only if var.sse_algorithm is not empty
22+
count = var.sse_algorithm != "" ? 1 : 0
23+
24+
bucket = aws_s3_bucket.this.id
25+
26+
rule {
27+
apply_server_side_encryption_by_default {
28+
kms_master_key_id = var.sse_algorithm == "aws:kms" ? aws_kms_key.custom_s3_kms_key[0].key_id : null
29+
sse_algorithm = var.sse_algorithm
30+
}
31+
}
32+
}
33+
34+
# block public access
35+
resource "aws_s3_bucket_public_access_block" "this" {
36+
37+
bucket = aws_s3_bucket.this.id
38+
39+
block_public_acls = var.block_public_access
40+
block_public_policy = var.block_public_access
41+
ignore_public_acls = var.block_public_access
42+
restrict_public_buckets = var.block_public_access
43+
}
44+
45+
46+
resource "aws_s3_bucket_website_configuration" "this" {
47+
count = var.enable_website_configuration ? 1 : 0
48+
bucket = aws_s3_bucket.this.id
49+
50+
index_document {
51+
suffix = var.website_index_document
52+
}
53+
54+
error_document {
55+
key = var.website_error_document
56+
}
57+
}
58+
59+
resource "aws_s3_bucket_policy" "website_bucket_policy" {
60+
count = var.enable_website_configuration ? 1 : 0
61+
bucket = aws_s3_bucket.this.id
62+
policy = data.aws_iam_policy_document.website_bucket_policy[0].json
63+
}
64+
65+
data "aws_iam_policy_document" "website_bucket_policy" {
66+
count = var.enable_website_configuration ? 1 : 0
67+
statement {
68+
effect = "Allow"
69+
principals {
70+
type = "AWS"
71+
identifiers = ["*"]
72+
}
73+
actions = ["s3:GetObject"]
74+
resources = ["${aws_s3_bucket.this.arn}/*"]
75+
76+
}
77+
}
78+
79+
resource "aws_s3_bucket_policy" "allow_access" {
80+
count = var.bucket_policy != "" ? 1 : 0
81+
bucket = aws_s3_bucket.this.id
82+
policy = var.bucket_policy
83+
}
84+
85+
86+
resource "aws_kms_key" "custom_s3_kms_key" {
87+
count = var.sse_algorithm == "aws:kms" ? 1 : 0
88+
description = "Custom KMS key for s3 bucket encryption"
89+
enable_key_rotation = true
90+
}
91+
92+
resource "aws_kms_alias" "a" {
93+
count = var.sse_algorithm == "aws:kms" ? 1 : 0
94+
name = "alias/s3-${replace(aws_s3_bucket.this.bucket, ".", "-")}"
95+
target_key_id = aws_kms_key.custom_s3_kms_key[0].key_id
96+
}
97+
98+
99+
100+
101+
102+
103+
104+
105+
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
{
2+
"output": {
3+
"arn": {
4+
"description": "The value of the arn output",
5+
"sensitive": false,
6+
"value": "${aws_s3_bucket.this.arn}"
7+
},
8+
"bucket_name": {
9+
"description": "The value of the bucket_name output",
10+
"sensitive": false,
11+
"value": "${aws_s3_bucket.this.id}"
12+
},
13+
"bucket_website_endpoint": {
14+
"description": "The value of the bucket_website_endpoint output",
15+
"sensitive": false,
16+
"value": "${var.enable_website_configuration ? aws_s3_bucket_website_configuration.this[0].website_endpoint : null}"
17+
},
18+
"kms_arn": {
19+
"description": "The value of the kms_arn output",
20+
"sensitive": false,
21+
"value": "${var.sse_algorithm == \"aws:kms\" ? aws_kms_key.custom_s3_kms_key[0].arn : null}"
22+
}
23+
}
24+
}
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
{
2+
"variable": {
3+
"block_public_access": [
4+
{
5+
"default": true,
6+
"description": "A state of block public access. If false, block public access is not enabled.",
7+
"type": "bool",
8+
"nullable": true
9+
}
10+
],
11+
"bucket_name": [
12+
{
13+
"description": "The name of the s3 bucket",
14+
"nullable": false,
15+
"type": "string"
16+
}
17+
],
18+
"enable_versioning": [
19+
{
20+
"default": true,
21+
"description": "Enable versioning for the bucket",
22+
"type": "bool",
23+
"nullable": true
24+
}
25+
],
26+
"sse_algorithm": [
27+
{
28+
"default": "aws:kms",
29+
"description": "The server-side encryption algorithm to use. Valid values are AES256 and aws:kms. If you specify aws:kms, a new KMS key will be provisioned and used. If empty, no encryption is performed.",
30+
"type": "string",
31+
"nullable": true
32+
}
33+
],
34+
"enable_website_configuration": [
35+
{
36+
"default": false,
37+
"description": "Enable website configuration for the bucket",
38+
"type": "bool"
39+
}
40+
],
41+
"website_index_document": [
42+
{
43+
"description": "The index document for the bucket",
44+
"type": "string",
45+
"default": "index.html"
46+
}
47+
],
48+
"website_error_document": [
49+
{
50+
"description": "The error document for the bucket",
51+
"type": "string",
52+
"default": "404.html"
53+
}
54+
],
55+
"bucket_policy": [
56+
{
57+
"description": "The IAM policy of the bucket (can be used to allow access to other roles or accounts)",
58+
"type": "string",
59+
"default": "",
60+
"nullable": true
61+
}
62+
],
63+
"tags": [
64+
{
65+
"default": {},
66+
"description": "A mapping of AWS tags to assign to the bucket.",
67+
"type": "map(string)",
68+
"nullable": true
69+
}
70+
]
71+
}
72+
}

stackgen_iac/terraform/outputs.tf

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
output "aws_s3_stackgen_74c0ac7c-39ec-4dcd-bcd2-e6ab4e00ee1f_arn" {
2+
value = module.stackgen_74c0ac7c-39ec-4dcd-bcd2-e6ab4e00ee1f.arn
3+
sensitive = false
4+
}
5+
6+
output "aws_s3_stackgen_74c0ac7c-39ec-4dcd-bcd2-e6ab4e00ee1f_bucket_name" {
7+
value = module.stackgen_74c0ac7c-39ec-4dcd-bcd2-e6ab4e00ee1f.bucket_name
8+
sensitive = false
9+
}
10+
11+
output "aws_s3_stackgen_74c0ac7c-39ec-4dcd-bcd2-e6ab4e00ee1f_bucket_website_endpoint" {
12+
value = module.stackgen_74c0ac7c-39ec-4dcd-bcd2-e6ab4e00ee1f.bucket_website_endpoint
13+
sensitive = false
14+
}
15+
16+
output "aws_s3_stackgen_74c0ac7c-39ec-4dcd-bcd2-e6ab4e00ee1f_kms_arn" {
17+
value = module.stackgen_74c0ac7c-39ec-4dcd-bcd2-e6ab4e00ee1f.kms_arn
18+
sensitive = false
19+
}
20+
21+
22+
################################################################################
23+

stackgen_iac/terraform/provider.tf

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
terraform {
2+
required_version = ">= 1.0.0, < 2.0.0"
3+
4+
required_providers {
5+
aws = {
6+
source = "hashicorp/aws"
7+
version = "~> 5.0"
8+
}
9+
10+
awscc = { // AWS Cloud Control
11+
source = "hashicorp/awscc"
12+
version = "~> 1.0"
13+
}
14+
}
15+
}
16+
17+
provider "awscc" {
18+
region = var.region
19+
}
20+
21+
provider "aws" {
22+
region = var.region
23+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
variable "region" {
2+
description = "AWS region in which the project needs to be setup (us-east-1, ca-west-1, eu-west-3, etc)"
3+
}

0 commit comments

Comments
 (0)