Commit c56f082f authored by Anton Babenko's avatar Anton Babenko

Minor formatting, cleanups, readme

parent dc9864d5
{{ if .Versions -}}
<a name="unreleased"></a>
## [Unreleased]
{{ if .Unreleased.CommitGroups -}}
{{ range .Unreleased.CommitGroups -}}
### {{ .Title }}
{{ range .Commits -}}
- {{ if .Scope }}**{{ .Scope }}:** {{ end }}{{ .Subject }}
{{ end }}
{{ end -}}
{{ else }}
{{ range .Unreleased.Commits -}}
- {{ if .Scope }}**{{ .Scope }}:** {{ end }}{{ .Subject }}
{{ end }}
{{ end -}}
{{ end -}}
{{ range .Versions }}
<a name="{{ .Tag.Name }}"></a>
## {{ if .Tag.Previous }}[{{ .Tag.Name }}]{{ else }}{{ .Tag.Name }}{{ end }} - {{ datetime "2006-01-02" .Tag.Date }}
{{ if .CommitGroups -}}
{{ range .CommitGroups -}}
### {{ .Title }}
{{ range .Commits -}}
- {{ if .Scope }}**{{ .Scope }}:** {{ end }}{{ .Subject }}
{{ end }}
{{ end -}}
{{ else }}
{{ range .Commits -}}
- {{ if .Scope }}**{{ .Scope }}:** {{ end }}{{ .Subject }}
{{ end }}
{{ end -}}
{{- if .NoteGroups -}}
{{ range .NoteGroups -}}
### {{ .Title }}
{{ range .Notes }}
{{ .Body }}
{{ end }}
{{ end -}}
{{ end -}}
{{ end -}}
{{- if .Versions }}
[Unreleased]: {{ .Info.RepositoryURL }}/compare/{{ $latest := index .Versions 0 }}{{ $latest.Tag.Name }}...HEAD
{{ range .Versions -}}
{{ if .Tag.Previous -}}
[{{ .Tag.Name }}]: {{ $.Info.RepositoryURL }}/compare/{{ .Tag.Previous.Name }}...{{ .Tag.Name }}
{{ end -}}
{{ end -}}
{{ end -}}
\ No newline at end of file
style: github
template: CHANGELOG.tpl.md
info:
title: CHANGELOG
repository_url: https://github.com/terraform-aws-modules/terraform-aws-s3-bucket
options:
header:
pattern: "^(.*)$"
pattern_maps:
- Subject
# EditorConfig is awesome: http://EditorConfig.org
# Uses editorconfig to maintain consistent coding styles
# top-most EditorConfig file
root = true
# Unix-style newlines with a newline ending every file
[*]
charset = utf-8
end_of_line = lf
indent_size = 2
indent_style = space
insert_final_newline = true
max_line_length = 80
trim_trailing_whitespace = true
[*.{tf,tfvars}]
indent_size = 2
indent_style = space
[*.md]
max_line_length = 0
trim_trailing_whitespace = false
[Makefile]
tab_width = 2
indent_style = tab
[COMMIT_EDITMSG]
max_line_length = 0
\ No newline at end of file
.terraform
# Created by https://www.gitignore.io/api/terraform terraform.tfstate
# Edit at https://www.gitignore.io/?templates=terraform *.tfstate*
terraform.tfvars
### Terraform ###
# Local .terraform directories
**/.terraform/*
# .tfstate files
*.tfstate
*.tfstate.*
# Crash log files
crash.log
# Ignore any .tfvars files that are generated automatically for each Terraform run. Most
# .tfvars files are managed as part of configuration and so should be included in
# version control.
#
# example.tfvars
# Ignore override files as they are usually used to override resources locally and so
# are not checked in
override.tf
override.tf.json
*_override.tf
*_override.tf.json
# Include override files you do wish to add to version control using negated pattern
#
# !example_override.tf
# End of https://www.gitignore.io/api/terraform
repos:
- repo: git://github.com/antonbabenko/pre-commit-terraform
rev: v1.17.0
hooks:
- id: terraform_fmt
- id: terraform_docs
- repo: git://github.com/pre-commit/pre-commit-hooks
rev: v2.2.3
hooks:
- id: check-merge-conflict
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
.PHONY: changelog release
changelog:
git-chglog -o CHANGELOG.md --next-tag `semtag final -s minor -o`
release:
semtag final -s minor
This diff is collapsed.
...@@ -4,7 +4,7 @@ variable "region" { ...@@ -4,7 +4,7 @@ variable "region" {
# Configure the AWS Provider # Configure the AWS Provider
provider "aws" { provider "aws" {
region = var.region region = var.region
} }
// Calling module: // Calling module:
...@@ -14,20 +14,20 @@ module "aws_s3_bucket" { ...@@ -14,20 +14,20 @@ module "aws_s3_bucket" {
bucket = "s3-tf-example-cors" bucket = "s3-tf-example-cors"
acl = "private" acl = "private"
cors_rule_inputs =[ cors_rule_inputs = [
{ {
allowed_headers = ["*"] allowed_headers = ["*"]
allowed_methods = ["PUT","POST"] allowed_methods = ["PUT", "POST"]
allowed_origins = ["https://s3-website-test.hashicorp.com","https://s3-website-test.hashicorp.io"] allowed_origins = ["https://s3-website-test.hashicorp.com", "https://s3-website-test.hashicorp.io"]
expose_headers = ["ETag"] expose_headers = ["ETag"]
max_age_seconds = 3000 max_age_seconds = 3000
}, },
{ {
allowed_headers = ["*"] allowed_headers = ["*"]
allowed_methods = ["GET"] allowed_methods = ["GET"]
allowed_origins = ["https://s3-website-test.hashicorp.io"] allowed_origins = ["https://s3-website-test.hashicorp.io"]
expose_headers = ["ETag"] expose_headers = ["ETag"]
max_age_seconds = 3000 max_age_seconds = 3000
}, },
] ]
......
...@@ -4,7 +4,7 @@ variable "region" { ...@@ -4,7 +4,7 @@ variable "region" {
# Configure the AWS Provider # Configure the AWS Provider
provider "aws" { provider "aws" {
region = var.region region = var.region
} }
// Calling module: // Calling module:
...@@ -15,9 +15,9 @@ module "aws_s3_bucket" { ...@@ -15,9 +15,9 @@ module "aws_s3_bucket" {
acl = "private" acl = "private"
lifecycle_rule_inputs = [{ lifecycle_rule_inputs = [{
id = "log" id = "log"
enabled = true enabled = true
prefix = "log/" prefix = "log/"
abort_incomplete_multipart_upload_days = null abort_incomplete_multipart_upload_days = null
tags = { tags = {
"rule" = "log" "rule" = "log"
...@@ -25,43 +25,43 @@ module "aws_s3_bucket" { ...@@ -25,43 +25,43 @@ module "aws_s3_bucket" {
} }
expiration_inputs = [{ expiration_inputs = [{
days = 90 days = 90
date = null date = null
expired_object_delete_marker = null expired_object_delete_marker = null
}, },
] ]
transition_inputs = [] transition_inputs = []
noncurrent_version_transition_inputs = [] noncurrent_version_transition_inputs = []
noncurrent_version_expiration_inputs = [] noncurrent_version_expiration_inputs = []
}, },
{ {
id = "log1" id = "log1"
enabled = true enabled = true
prefix = "log1/" prefix = "log1/"
abort_incomplete_multipart_upload_days = null abort_incomplete_multipart_upload_days = null
tags = { tags = {
"rule" = "log1" "rule" = "log1"
"autoclean" = "true" "autoclean" = "true"
} }
expiration_inputs = [] expiration_inputs = []
transition_inputs = [] transition_inputs = []
noncurrent_version_transition_inputs = [ noncurrent_version_transition_inputs = [
{ {
days = 30 days = 30
storage_class = "STANDARD_IA" storage_class = "STANDARD_IA"
}, },
{ {
days = 60 days = 60
storage_class = "ONEZONE_IA" storage_class = "ONEZONE_IA"
}, },
{ {
days = 90 days = 90
storage_class = "GLACIER" storage_class = "GLACIER"
}, },
] ]
noncurrent_version_expiration_inputs = [] noncurrent_version_expiration_inputs = []
}, },
] ]
} }
\ No newline at end of file
...@@ -4,13 +4,13 @@ variable "region" { ...@@ -4,13 +4,13 @@ variable "region" {
# Configure the AWS Provider # Configure the AWS Provider
provider "aws" { provider "aws" {
region = var.region region = var.region
} }
// Calling module: // Calling module:
module "log_bucket" { module "log_bucket" {
source = "../.." source = "../.."
bucket = "s3-tf-example-logger" bucket = "s3-tf-example-logger"
acl = "log-delivery-write" acl = "log-delivery-write"
...@@ -23,10 +23,10 @@ module "aws_s3_bucket" { ...@@ -23,10 +23,10 @@ module "aws_s3_bucket" {
acl = "private" acl = "private"
logging_inputs = [ logging_inputs = [
{ {
target_bucket = "s3-tf-example-logger" target_bucket = "s3-tf-example-logger"
target_prefix = "log/" target_prefix = "log/"
}, },
] ]
} }
...@@ -4,45 +4,45 @@ variable "region" { ...@@ -4,45 +4,45 @@ variable "region" {
# Configure the AWS Provider # Configure the AWS Provider
provider "aws" { provider "aws" {
region = var.region region = var.region
} }
module "bucket" { module "bucket" {
source = "../.." source = "../.."
bucket = "s3-tf-example-replication" bucket = "s3-tf-example-replication"
acl = "private" acl = "private"
versioning_inputs = [ versioning_inputs = [
{ {
enabled = true enabled = true
mfa_delete = null mfa_delete = null
}, },
] ]
replication_configuration_inputs = [ replication_configuration_inputs = [
{ {
role = "<ROLE_ARN>" // Place the IAM Role to access the destination bucket role = "<ROLE_ARN>" // Place the IAM Role to access the destination bucket
rules_inputs = [ rules_inputs = [
{
id = "foobar"
prefix = "foo"
status = "Enabled"
priority = null
source_selection_criteria_inputs = null
filter_inputs = null
destination_inputs = [
{ {
bucket = "<DESTINATION_BUCKET>" // Place the destination bicket ARN id = "foobar"
storage_class = "STANDARD" prefix = "foo"
replica_kms_key_id = null status = "Enabled"
account_id = null priority = null
access_control_translation_inputs = null source_selection_criteria_inputs = null
filter_inputs = null
destination_inputs = [
{
bucket = "<DESTINATION_BUCKET>" // Place the destination bicket ARN
storage_class = "STANDARD"
replica_kms_key_id = null
account_id = null
access_control_translation_inputs = null
},
]
}, },
] ]
}, },
]
},
] ]
} }
...@@ -4,7 +4,7 @@ variable "region" { ...@@ -4,7 +4,7 @@ variable "region" {
# Configure the AWS Provider # Configure the AWS Provider
provider "aws" { provider "aws" {
region = var.region region = var.region
} }
// Calling module: // Calling module:
...@@ -14,12 +14,12 @@ module "aws_s3_bucket" { ...@@ -14,12 +14,12 @@ module "aws_s3_bucket" {
bucket = "s3-tf-example-versioning" bucket = "s3-tf-example-versioning"
acl = "private" acl = "private"
versioning_inputs = [ versioning_inputs = [
{ {
enabled = true enabled = true
mfa_delete = null mfa_delete = null
}, },
] ]
} }
\ No newline at end of file
...@@ -4,7 +4,7 @@ variable "region" { ...@@ -4,7 +4,7 @@ variable "region" {
# Configure the AWS Provider # Configure the AWS Provider
provider "aws" { provider "aws" {
region = var.region region = var.region
} }
// Calling module: // Calling module:
...@@ -14,12 +14,12 @@ module "aws_s3_bucket" { ...@@ -14,12 +14,12 @@ module "aws_s3_bucket" {
bucket = "s3-tf-example-website" bucket = "s3-tf-example-website"
acl = "private" acl = "private"
website_inputs = [ website_inputs = [
{ {
index_document = "index.html" index_document = "index.html"
error_document = "error.html" error_document = "error.html"
redirect_all_requests_to = null redirect_all_requests_to = null
routing_rules = <<EOF routing_rules = <<EOF
[{ [{
"Condition": { "Condition": {
"KeyPrefixEquals": "docs/" "KeyPrefixEquals": "docs/"
...@@ -29,8 +29,8 @@ website_inputs = [ ...@@ -29,8 +29,8 @@ website_inputs = [
} }
}] }]
EOF EOF
} }
] ]
} }
\ No newline at end of file
This diff is collapsed.
output "id" { output "id" {
description = "The name of the bucket." description = "The name of the bucket."
value = "${element(concat(aws_s3_bucket.this.*.id, list("")), 0)}" value = element(concat(aws_s3_bucket.this.*.id, list("")), 0)
} }
output "arn" { output "arn" {
description = "The ARN of the bucket. Will be of format arn:aws:s3:::bucketname." description = "The ARN of the bucket. Will be of format arn:aws:s3:::bucketname."
value = "${element(concat(aws_s3_bucket.this.*.arn, list("")), 0)}" value = element(concat(aws_s3_bucket.this.*.arn, list("")), 0)
} }
output "bucket_domain_name" { output "bucket_domain_name" {
description = "The bucket domain name. Will be of format bucketname.s3.amazonaws.com." description = "The bucket domain name. Will be of format bucketname.s3.amazonaws.com."
value = "${element(concat(aws_s3_bucket.this.*.bucket_domain_name, list("")), 0)}" value = element(concat(aws_s3_bucket.this.*.bucket_domain_name, list("")), 0)
} }
output "bucket_regional_domain_name" { output "bucket_regional_domain_name" {
description = "The bucket region-specific domain name. The bucket domain name including the region name, please refer here for format. Note: The AWS CloudFront allows specifying S3 region-specific endpoint when creating S3 origin, it will prevent redirect issues from CloudFront to S3 Origin URL." description = "The bucket region-specific domain name. The bucket domain name including the region name, please refer here for format. Note: The AWS CloudFront allows specifying S3 region-specific endpoint when creating S3 origin, it will prevent redirect issues from CloudFront to S3 Origin URL."
value = "${element(concat(aws_s3_bucket.this.*.bucket_regional_domain_name, list("")), 0)}" value = element(concat(aws_s3_bucket.this.*.bucket_regional_domain_name, list("")), 0)
} }
output "hosted_zone_id" { output "hosted_zone_id" {
description = "The Route 53 Hosted Zone ID for this bucket's region." description = "The Route 53 Hosted Zone ID for this bucket's region."
value = "${element(concat(aws_s3_bucket.this.*.hosted_zone_id, list("")), 0)}" value = element(concat(aws_s3_bucket.this.*.hosted_zone_id, list("")), 0)
} }
output "region" { output "region" {
description = "The AWS region this bucket resides in." description = "The AWS region this bucket resides in."
value = "${element(concat(aws_s3_bucket.this.*.region, list("")), 0)}" value = element(concat(aws_s3_bucket.this.*.region, list("")), 0)
} }
output "website_endpoint" { output "website_endpoint" {
description = "The website endpoint, if the bucket is configured with a website. If not, this will be an empty string." description = "The website endpoint, if the bucket is configured with a website. If not, this will be an empty string."
value = "${element(concat(aws_s3_bucket.this.*.website_endpoint, list("")), 0)}" value = element(concat(aws_s3_bucket.this.*.website_endpoint, list("")), 0)
} }
output "website_domain" { output "website_domain" {
description = "The domain of the website endpoint, if the bucket is configured with a website. If not, this will be an empty string. This is used to create Route 53 alias records. " description = "The domain of the website endpoint, if the bucket is configured with a website. If not, this will be an empty string. This is used to create Route 53 alias records. "
value = "${element(concat(aws_s3_bucket.this.*.website_domain, list("")), 0)}" value = element(concat(aws_s3_bucket.this.*.website_domain, list("")), 0)
} }
\ No newline at end of file
variable "bucket" { variable "bucket" {
description = "(Optional, Forces new resource) The name of the bucket. If omitted, Terraform will assign a random, unique name." description = "(Optional, Forces new resource) The name of the bucket. If omitted, Terraform will assign a random, unique name."
default = null default = null
} }
variable "bucket_prefix" { variable "bucket_prefix" {
description = "(Optional, Forces new resource) Creates a unique bucket name beginning with the specified prefix. Conflicts with bucket." description = "(Optional, Forces new resource) Creates a unique bucket name beginning with the specified prefix. Conflicts with bucket."
default = null default = null
} }
variable "acl" { variable "acl" {
description = "(Optional) The canned ACL to apply. Defaults to 'private'." description = "(Optional) The canned ACL to apply. Defaults to 'private'."
default = "private" default = "private"
} }
variable "policy" { variable "policy" {
description = "(Optional) A valid bucket policy JSON document. Note that if the policy document is not specific enough (but still valid), Terraform may view the policy as constantly changing in a terraform plan. In this case, please make sure you use the verbose/specific version of the policy. For more information about building AWS IAM policy documents with Terraform, see the AWS IAM Policy Document Guide." description = "(Optional) A valid bucket policy JSON document. Note that if the policy document is not specific enough (but still valid), Terraform may view the policy as constantly changing in a terraform plan. In this case, please make sure you use the verbose/specific version of the policy. For more information about building AWS IAM policy documents with Terraform, see the AWS IAM Policy Document Guide."
default = null default = null
} }
variable "tags" { variable "tags" {
description = "(Optional) A mapping of tags to assign to the bucket." description = "(Optional) A mapping of tags to assign to the bucket."
default = {} default = {}
} }
variable "force_destroy" { variable "force_destroy" {
description = "(Optional, Default:false ) A boolean that indicates all objects should be deleted from the bucket so that the bucket can be destroyed without error. These objects are not recoverable." description = "(Optional, Default:false ) A boolean that indicates all objects should be deleted from the bucket so that the bucket can be destroyed without error. These objects are not recoverable."
default = false default = false
} }
variable "acceleration_status" { variable "acceleration_status" {
description = "(Optional) Sets the accelerate configuration of an existing bucket. Can be Enabled or Suspended." description = "(Optional) Sets the accelerate configuration of an existing bucket. Can be Enabled or Suspended."
default = null default = null
} }
variable "region" { variable "region" {
description = "(Optional) If specified, the AWS region this bucket should reside in. Otherwise, the region used by the callee." description = "(Optional) If specified, the AWS region this bucket should reside in. Otherwise, the region used by the callee."
default = null default = null
} }
variable "request_payer" { variable "request_payer" {
description = "(Optional) Specifies who should bear the cost of Amazon S3 data transfer. Can be either BucketOwner or Requester. By default, the owner of the S3 bucket would incur the costs of any data transfer. See Requester Pays Buckets developer guide for more information." description = "(Optional) Specifies who should bear the cost of Amazon S3 data transfer. Can be either BucketOwner or Requester. By default, the owner of the S3 bucket would incur the costs of any data transfer. See Requester Pays Buckets developer guide for more information."
default = null default = null
} }
variable "website_inputs" { variable "website_inputs" {
type = list(object({ type = list(object({
index_document = string index_document = string
error_document = string error_document = string
redirect_all_requests_to = string redirect_all_requests_to = string
routing_rules = string routing_rules = string
})) }))
default = null default = null
} }
variable "cors_rule_inputs" { variable "cors_rule_inputs" {
type = list(object({ type = list(object({
allowed_headers = list(string) allowed_headers = list(string)
allowed_methods = list(string) allowed_methods = list(string)
allowed_origins = list(string) allowed_origins = list(string)
expose_headers = list(string) expose_headers = list(string)
max_age_seconds = number max_age_seconds = number
})) }))
default = null default = null
} }
variable "versioning_inputs" { variable "versioning_inputs" {
type = list(object({ type = list(object({
enabled = string enabled = string
mfa_delete = string mfa_delete = string
})) }))
default = null default = null
} }
variable "logging_inputs" { variable "logging_inputs" {
type = list(object({ type = list(object({
target_bucket = string target_bucket = string
target_prefix = string target_prefix = string
})) }))
default = null default = null
} }
// Lifecycle rules variables: // Lifecycle rules variables:
variable "lifecycle_rule_inputs" { variable "lifecycle_rule_inputs" {
type = list(object({ type = list(object({
id = string id = string
prefix = string prefix = string
tags = map(string) tags = map(string)
enabled = string enabled = string
abort_incomplete_multipart_upload_days = string abort_incomplete_multipart_upload_days = string
expiration_inputs = list(object({ expiration_inputs = list(object({
date = string date = string
days = number days = number
expired_object_delete_marker = string expired_object_delete_marker = string
}))
transition_inputs = list(object({
date = string
days = number
storage_class = string
}))
noncurrent_version_transition_inputs = list(object({
days = number
storage_class = string
}))
noncurrent_version_expiration_inputs = list(object({
days = number
}))
})) }))
default = null transition_inputs = list(object({
date = string
days = number
storage_class = string
}))
noncurrent_version_transition_inputs = list(object({
days = number
storage_class = string
}))
noncurrent_version_expiration_inputs = list(object({
days = number
}))
}))
default = null
} }
// Replication configuration variables: // Replication configuration variables:
variable "replication_configuration_inputs" { variable "replication_configuration_inputs" {
type = list(object({ type = list(object({
role = string role = string
rules_inputs = list(object({ rules_inputs = list(object({
id = string id = string
// priority = number // priority = number
prefix = string prefix = string
status = string status = string
destination_inputs = list(object({ destination_inputs = list(object({
bucket = string bucket = string
storage_class = string storage_class = string
replica_kms_key_id = string replica_kms_key_id = string
account_id = string account_id = string
access_control_translation_inputs = list(object({ access_control_translation_inputs = list(object({
owner = string owner = string
}))
}))
source_selection_criteria_inputs = list(object({
enabled = string
})) }))
}))
source_selection_criteria_inputs = list(object({
enabled = string
}))
/* filter_inputs = list(object({ /* filter_inputs = list(object({
prefix = string prefix = string
tags = map(string) tags = map(string)
})) }))
*/ */
}))
})) }))
default = null }))
default = null
} }
// Server side encryption config: // Server side encryption config:
variable "server_side_encryption_configuration_inputs" { variable "server_side_encryption_configuration_inputs" {
type = list(object({ type = list(object({
sse_algorithm = string sse_algorithm = string
kms_master_key_id = string kms_master_key_id = string
})) }))
default = null default = null
} }
//Object lock config //Object lock config
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment