Skip to content

Commit 96fd6d2

Browse files
Merge pull request #11 from appcd-dev/stackgen_7f84951d-3ae5-4553-af14-58cbf7c69d17
Automated PR
2 parents cc3e9f9 + 2892638 commit 96fd6d2

11 files changed

Lines changed: 315 additions & 0 deletions

File tree

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+
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-864b8e43",
3+
"iac_type": "Terraform",
4+
"provider": "aws",
5+
"multi_env": false,
6+
"exporter": "terraform"
7+
}
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://demo.cloud.stackgen.com/appstacks/5dd2123e-33e3-4e84-b539-5e7c8d89ff22)
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
terraform {
2+
backend "s3" {
3+
bucket = "drift-detect-tfstate"
4+
key = "testdemo.tfstate"
5+
region = "us-east-2"
6+
encrypt = "true"
7+
}
8+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"module": {
3+
"stackgen_404dfbb6-ae35-42b3-9601-8b0d3be4b8a9": {
4+
"block_public_access": true,
5+
"bucket_name": "bucket-78992304",
6+
"bucket_policy": "",
7+
"enable_versioning": true,
8+
"enable_website_configuration": false,
9+
"source": "./modules/aws_s3",
10+
"sse_algorithm": "aws:kms",
11+
"tags": {},
12+
"website_error_document": "404.html",
13+
"website_index_document": "index.html"
14+
}
15+
}
16+
}
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
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+
data "aws_caller_identity" "current" {}
99+
100+
101+
102+
103+
104+
105+
106+
107+
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+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
output "aws_s3_stackgen_404dfbb6-ae35-42b3-9601-8b0d3be4b8a9_arn" {
2+
value = module.stackgen_404dfbb6-ae35-42b3-9601-8b0d3be4b8a9.arn
3+
sensitive = false
4+
}
5+
6+
output "aws_s3_stackgen_404dfbb6-ae35-42b3-9601-8b0d3be4b8a9_bucket_name" {
7+
value = module.stackgen_404dfbb6-ae35-42b3-9601-8b0d3be4b8a9.bucket_name
8+
sensitive = false
9+
}
10+
11+
output "aws_s3_stackgen_404dfbb6-ae35-42b3-9601-8b0d3be4b8a9_bucket_website_endpoint" {
12+
value = module.stackgen_404dfbb6-ae35-42b3-9601-8b0d3be4b8a9.bucket_website_endpoint
13+
sensitive = false
14+
}
15+
16+
output "aws_s3_stackgen_404dfbb6-ae35-42b3-9601-8b0d3be4b8a9_kms_arn" {
17+
value = module.stackgen_404dfbb6-ae35-42b3-9601-8b0d3be4b8a9.kms_arn
18+
sensitive = false
19+
}
20+
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+
}

0 commit comments

Comments
 (0)