### Terragrunt Example: Managing Multiple S3 Buckets Source: https://github.com/terraform-aws-modules/terraform-aws-s3-bucket/blob/master/wrappers/table-bucket/README.md An example Terragrunt configuration for managing multiple S3 buckets in a specific region. It shows how to define default bucket settings and individual bucket configurations. ```hcl terraform { source = "tfr:///terraform-aws-modules/s3-bucket/aws//wrappers/table-bucket" # Alternative source: # source = "git::git@github.com:terraform-aws-modules/terraform-aws-s3-bucket.git//wrappers/table-bucket?ref=master" } inputs = { defaults = { force_destroy = true attach_elb_log_delivery_policy = true attach_lb_log_delivery_policy = true attach_deny_insecure_transport_policy = true attach_require_latest_tls_policy = true } items = { bucket1 = { bucket = "my-random-bucket-1" } bucket2 = { bucket = "my-random-bucket-2" tags = { Secure = "probably" } } } } ``` -------------------------------- ### Terragrunt Example: Managing Multiple S3 Buckets Source: https://github.com/terraform-aws-modules/terraform-aws-s3-bucket/blob/master/wrappers/notification/README.md An example Terragrunt configuration file (`terragrunt.hcl`) for managing multiple S3 buckets in a specific region. It sets default bucket policies and defines configurations for two distinct buckets. ```hcl terraform { source = "tfr:///terraform-aws-modules/s3-bucket/aws//wrappers/notification" # Alternative source: # source = "git::git@github.com:terraform-aws-modules/terraform-aws-s3-bucket.git//wrappers/notification?ref=master" } inputs = { defaults = { force_destroy = true attach_elb_log_delivery_policy = true attach_lb_log_delivery_policy = true attach_deny_insecure_transport_policy = true attach_require_latest_tls_policy = true } items = { bucket1 = { bucket = "my-random-bucket-1" } bucket2 = { bucket = "my-random-bucket-2" tags = { Secure = "probably" } } } } ``` -------------------------------- ### Terragrunt Example: Managing Multiple S3 Buckets in One Layer Source: https://github.com/terraform-aws-modules/terraform-aws-s3-bucket/blob/master/wrappers/README.md An example Terragrunt configuration for managing multiple S3 buckets within a single layer, specifying bucket names and custom tags for each. ```hcl terraform { source = "tfr:///terraform-aws-modules/s3-bucket/aws//wrappers" # Alternative source: # source = "git::git@github.com:terraform-aws-modules/terraform-aws-s3-bucket.git//wrappers?ref=master" } inputs = { defaults = { force_destroy = true attach_elb_log_delivery_policy = true attach_lb_log_delivery_policy = true attach_deny_insecure_transport_policy = true attach_require_latest_tls_policy = true } items = { bucket1 = { bucket = "my-random-bucket-1" } bucket2 = { bucket = "my-random-bucket-2" tags = { Secure = "probably" } } } } ``` -------------------------------- ### Terragrunt Example: Managing Multiple S3 Buckets Source: https://github.com/terraform-aws-modules/terraform-aws-s3-bucket/blob/master/wrappers/object/README.md This Terragrunt configuration manages multiple S3 buckets in a specific region. It sets common defaults like `force_destroy` and logging policies, then defines individual bucket configurations with unique names and tags. ```hcl terraform { source = "tfr:///terraform-aws-modules/s3-bucket/aws//wrappers/object" # Alternative source: # source = "git::git@github.com:terraform-aws-modules/terraform-aws-s3-bucket.git//wrappers/object?ref=master" } inputs = { defaults = { force_destroy = true attach_elb_log_delivery_policy = true attach_lb_log_delivery_policy = true attach_deny_insecure_transport_policy = true attach_require_latest_tls_policy = true } items = { bucket1 = { bucket = "my-random-bucket-1" } bucket2 = { bucket = "my-random-bucket-2" tags = { Secure = "probably" } } } } ``` -------------------------------- ### Terraform Configuration Before v2.x Upgrade Source: https://github.com/terraform-aws-modules/terraform-aws-s3-bucket/blob/master/docs/UPGRADE-3.0.md Example Terraform configuration using the S3 bucket module with version constraint '~> 2.0' and AWS provider '~> 3.69.0'. ```hcl module "s3_bucket" { source = "terraform-aws-modules/s3-bucket/aws" version = "~> 2.0" bucket = "my-awesome-bucket" acl = "log-delivery-write" } terraform { required_providers { aws = "~> 3.69.0" # or anything lower than 3.75.0 } } ``` -------------------------------- ### Terragrunt Usage for Multiple S3 Buckets Source: https://github.com/terraform-aws-modules/terraform-aws-s3-bucket/blob/master/wrappers/README.md Configure Terragrunt to manage multiple S3 buckets using the wrapper module. This example shows how to define default settings and specific configurations for individual buckets. ```hcl terraform { source = "tfr:///terraform-aws-modules/s3-bucket/aws//wrappers" # Alternative source: # source = "git::git@github.com:terraform-aws-modules/terraform-aws-s3-bucket.git//wrappers?ref=master" } inputs = { defaults = { # Default values create = true tags = { Terraform = "true" Environment = "dev" } } items = { my-item = { # omitted... can be any argument supported by the module } my-second-item = { # omitted... can be any argument supported by the module } # omitted... } } ``` -------------------------------- ### Terraform Configuration After v3.x Upgrade Source: https://github.com/terraform-aws-modules/terraform-aws-s3-bucket/blob/master/docs/UPGRADE-3.0.md Example Terraform configuration updated for v3.x, using module version '~> 3.0' and AWS provider '>= 4.5'. Note the updated provider requirement. ```hcl module "s3_bucket" { source = "terraform-aws-modules/s3-bucket/aws" version = "~> 3.0" bucket = "my-awesome-bucket" acl = "log-delivery-write" } terraform { required_providers { aws = ">= 4.5" # or anything higher than 4.5.0 } } ``` -------------------------------- ### Terragrunt Layer for Multiple S3 Buckets in eu-west-1 Source: https://github.com/terraform-aws-modules/terraform-aws-s3-bucket/blob/master/wrappers/account-public-access/README.md Example Terragrunt configuration to manage multiple S3 buckets within a specific region, applying common default settings like force_destroy and various attachment policies. ```hcl terraform { source = "tfr:///terraform-aws-modules/s3-bucket/aws//wrappers/account-public-access" # Alternative source: # source = "git::git@github.com:terraform-aws-modules/terraform-aws-s3-bucket.git//wrappers/account-public-access?ref=master" } inputs = { defaults = { force_destroy = true attach_elb_log_delivery_policy = true attach_lb_log_delivery_policy = true attach_deny_insecure_transport_policy = true attach_require_latest_tls_policy = true } items = { bucket1 = { bucket = "my-random-bucket-1" } bucket2 = { bucket = "my-random-bucket-2" tags = { Secure = "probably" } } } } ``` -------------------------------- ### Terraform Initialization and Application Source: https://github.com/terraform-aws-modules/terraform-aws-s3-bucket/blob/master/examples/account-public-access/README.md Run these commands to initialize Terraform, plan the changes, and apply the configuration. Note that this may incur costs. ```bash $ terraform init $ terraform plan $ terraform apply ``` -------------------------------- ### Terraform Initialization and Application Source: https://github.com/terraform-aws-modules/terraform-aws-s3-bucket/blob/master/examples/notification/README.md Standard Terraform commands to initialize, plan, and apply the configuration. Remember to run `terraform destroy` to clean up resources. ```bash terraform init terraform plan terraform apply ``` -------------------------------- ### Initialize, Plan, and Apply Terraform Configuration Source: https://github.com/terraform-aws-modules/terraform-aws-s3-bucket/blob/master/examples/vectors/README.md Standard Terraform commands to initialize the project, review changes, and apply the infrastructure. ```bash terraform init terraform plan terraform apply ``` -------------------------------- ### Basic Vector Bucket Configuration Source: https://github.com/terraform-aws-modules/terraform-aws-s3-bucket/blob/master/modules/vectors/README.md Use this snippet to create a basic S3 Vectors vector bucket with name and KMS encryption. Ensure the KMS key ARN is correctly specified. ```hcl module "vector_bucket" { source = "../../modules/vectors" vector_bucket_name = "my-vector-bucket" encryption_configuration = { sse_type = "aws:kms" kms_key_arn = aws_kms_key.this.arn } tags = { Environment = "dev" } } ``` -------------------------------- ### Import Existing S3 Resources for v3.x Migration Source: https://github.com/terraform-aws-modules/terraform-aws-s3-bucket/blob/master/docs/UPGRADE-3.0.md Use these commands to import existing S3 resources into Terraform state when migrating from v2.x to v3.x of the module. Ensure you replace placeholders like , , and with your specific values. ```bash terraform import "module.s3_bucket.aws_s3_bucket_acl.this[0]" , ``` ```bash terraform import "module.s3_bucket.aws_s3_bucket_logging.this[0]" ``` ```bash terraform import "module.s3_bucket.aws_s3_bucket_website_configuration.this[0]" , ``` ```bash terraform import "module.s3_bucket.aws_s3_bucket_versioning.this[0]" , ``` ```bash terraform import "module.s3_bucket.aws_s3_bucket_server_side_encryption_configuration.this[0]" , ``` ```bash terraform import "module.s3_bucket.aws_s3_bucket_request_payment_configuration.this[0]" , ``` ```bash terraform import "module.s3_bucket.aws_s3_bucket_accelerate_configuration.this[0]" , ``` ```bash terraform import "module.s3_bucket.aws_s3_bucket_policy.this[0]" ``` ```bash terraform import "module.s3_bucket.aws_s3_bucket_ownership_controls.this[0]" ``` ```bash terraform import "module.s3_bucket.aws_s3_bucket_cors_configuration.this[0]" , ``` ```bash terraform import "module.s3_bucket.aws_s3_bucket_object_lock_configuration.this[0]" , ``` ```bash terraform import "module.s3_bucket.aws_s3_bucket_public_access_block.this[0]" ``` ```bash terraform import "module.s3_bucket.aws_s3_bucket_lifecycle_configuration.this[0]" , ``` ```bash terraform import "module.s3_bucket.aws_s3_bucket_replication_configuration.this[0]" ``` -------------------------------- ### Vector Bucket with Index Configuration Source: https://github.com/terraform-aws-modules/terraform-aws-s3-bucket/blob/master/modules/vectors/README.md Set up an S3 Vectors vector bucket with one or more vector indexes. This includes defining index name, dimension, distance metric, and encryption settings. ```hcl module "vector_bucket" { source = "../../modules/vectors" vector_bucket_name = "my-vector-bucket" indexes = { my_index = { index_name = "my-index" dimension = 1536 distance_metric = "cosine" encryption_configuration = { sse_type = "aws:kms" kms_key_arn = aws_kms_key.this.arn } metadata_configuration = { non_filterable_metadata_keys = ["description", "notes"] } tags = { Environment = "dev" } } } tags = { Environment = "dev" } } ``` -------------------------------- ### Terraform Configuration for Multiple S3 Buckets Source: https://github.com/terraform-aws-modules/terraform-aws-s3-bucket/blob/master/wrappers/object/README.md This Terraform configuration demonstrates how to use the object wrapper module to manage multiple S3 buckets within a single `module` block. Define common defaults and specific configurations for each bucket in the `items` map. ```hcl module "wrapper" { source = "terraform-aws-modules/s3-bucket/aws//wrappers/object" defaults = { # Default values create = true tags = { Terraform = "true" Environment = "dev" } } items = { my-item = { # omitted... can be any argument supported by the module } my-second-item = { # omitted... can be any argument supported by the module } # omitted... } } ``` -------------------------------- ### Private S3 Bucket with Versioning Source: https://github.com/terraform-aws-modules/terraform-aws-s3-bucket/blob/master/README.md Creates a private S3 bucket with versioning enabled. Ensures object ownership is controlled. ```hcl module "s3_bucket" { source = "terraform-aws-modules/s3-bucket/aws" bucket = "my-s3-bucket" acl = "private" control_object_ownership = true object_ownership = "ObjectWriter" versioning = { enabled = true } } ``` -------------------------------- ### Import S3 Bucket ACL After Upgrade Source: https://github.com/terraform-aws-modules/terraform-aws-s3-bucket/blob/master/docs/UPGRADE-3.0.md Command to import an S3 bucket ACL after upgrading the module and configuration. Ensure the resource address and bucket name/ACL value are correct. ```bash terraform import "module.s3_bucket.aws_s3_bucket_acl.this[0]" my-awesome-bucket,log-delivery-write ``` -------------------------------- ### S3 Bucket for WAF Access Logs Source: https://github.com/terraform-aws-modules/terraform-aws-s3-bucket/blob/master/README.md Configures an S3 bucket to receive WAF access logs. Allows deletion of non-empty buckets. ```hcl module "s3_bucket_for_waf_logs" { source = "terraform-aws-modules/s3-bucket/aws" bucket = "my-s3-bucket-for-waf-logs" # Allow deletion of non-empty bucket force_destroy = true control_object_ownership = true object_ownership = "ObjectWriter" attach_waf_log_delivery_policy = true # Required for WAF logs } ``` -------------------------------- ### Terraform Configuration for Table Bucket Wrapper Source: https://github.com/terraform-aws-modules/terraform-aws-s3-bucket/blob/master/wrappers/table-bucket/README.md This Terraform configuration demonstrates how to use the table bucket wrapper module to manage multiple S3 buckets within a single module block. ```hcl module "wrapper" { source = "terraform-aws-modules/s3-bucket/aws//wrappers/table-bucket" defaults = { # Default values create = true tags = { Terraform = "true" Environment = "dev" } } items = { my-item = { # omitted... can be any argument supported by the module } my-second-item = { # omitted... can be any argument supported by the module } # omitted... } } ``` -------------------------------- ### Terragrunt Input with jsonencode for 'any' Type Source: https://github.com/terraform-aws-modules/terraform-aws-s3-bucket/blob/master/README.md Shows how to use `jsonencode()` for variables of type `any` when using Terragrunt, addressing a known Terragrunt bug. ```hcl inputs = { bucket = "foobar" # `bucket` has type `string`, no need to jsonencode() cors_rule = jsonencode([...]) # `cors_rule` has type `any`, so `jsonencode()` is required } ``` -------------------------------- ### S3 Bucket for ELB Access Logs Source: https://github.com/terraform-aws-modules/terraform-aws-s3-bucket/blob/master/README.md Configures an S3 bucket to receive ELB access logs. Allows deletion of non-empty buckets. ```hcl module "s3_bucket_for_logs" { source = "terraform-aws-modules/s3-bucket/aws" bucket = "my-s3-bucket-for-logs" acl = "log-delivery-write" # Allow deletion of non-empty bucket force_destroy = true control_object_ownership = true object_ownership = "ObjectWriter" attach_elb_log_delivery_policy = true } ``` -------------------------------- ### S3 Bucket for ALB/NLB Access Logs Source: https://github.com/terraform-aws-modules/terraform-aws-s3-bucket/blob/master/README.md Configures an S3 bucket to receive ALB/NLB access logs. Allows deletion of non-empty buckets. ```hcl module "s3_bucket_for_logs" { source = "terraform-aws-modules/s3-bucket/aws" bucket = "my-s3-bucket-for-logs" # Allow deletion of non-empty bucket force_destroy = true control_object_ownership = true object_ownership = "ObjectWriter" attach_elb_log_delivery_policy = true # Required for ALB logs attach_lb_log_delivery_policy = true # Required for ALB/NLB logs } ``` -------------------------------- ### Terragrunt Configuration for Table Bucket Wrapper Source: https://github.com/terraform-aws-modules/terraform-aws-s3-bucket/blob/master/wrappers/table-bucket/README.md Use this Terragrunt configuration to manage multiple S3 buckets. It leverages the wrapper module to avoid duplicating configuration files. ```hcl terraform { source = "tfr:///terraform-aws-modules/s3-bucket/aws//wrappers/table-bucket" # Alternative source: # source = "git::git@github.com:terraform-aws-modules/terraform-aws-s3-bucket.git//wrappers/table-bucket?ref=master" } inputs = { defaults = { # Default values create = true tags = { Terraform = "true" Environment = "dev" } } items = { my-item = { # omitted... can be any argument supported by the module } my-second-item = { # omitted... can be any argument supported by the module } # omitted... } } ``` -------------------------------- ### Conditionally Create S3 Bucket Source: https://github.com/terraform-aws-modules/terraform-aws-s3-bucket/blob/master/README.md Demonstrates how to conditionally prevent the creation of an S3 bucket by setting `create_bucket` to false. ```hcl # This S3 bucket will not be created module "s3_bucket" { source = "terraform-aws-modules/s3-bucket/aws" create_bucket = false # ... omitted } ``` -------------------------------- ### Terraform Configuration for S3 Bucket Notification Wrapper Source: https://github.com/terraform-aws-modules/terraform-aws-s3-bucket/blob/master/wrappers/notification/README.md This Terraform configuration demonstrates how to use the S3 bucket notification wrapper module. It defines the module source and provides inputs for default settings and specific bucket configurations. ```hcl module "wrapper" { source = "terraform-aws-modules/s3-bucket/aws//wrappers/notification" defaults = { # Default values create = true tags = { Terraform = "true" Environment = "dev" } } items = { my-item = { # omitted... can be any argument supported by the module } my-second-item = { # omitted... can be any argument supported by the module } # omitted... } } ``` -------------------------------- ### Terraform Usage for Multiple S3 Buckets Source: https://github.com/terraform-aws-modules/terraform-aws-s3-bucket/blob/master/wrappers/README.md Use the wrapper module within a Terraform configuration to manage multiple S3 buckets. This demonstrates setting default values and item-specific configurations. ```hcl module "wrapper" { source = "terraform-aws-modules/s3-bucket/aws//wrappers" defaults = { # Default values create = true tags = { Terraform = "true" Environment = "dev" } } items = { my-item = { # omitted... can be any argument supported by the module } my-second-item = { # omitted... can be any argument supported by the module } # omitted... } } ``` -------------------------------- ### Vector Bucket with Policy Source: https://github.com/terraform-aws-modules/terraform-aws-s3-bucket/blob/master/modules/vectors/README.md Configure an S3 Vectors vector bucket with a custom bucket policy for specific access control. The policy is provided as a JSON string. ```hcl module "vector_bucket" { source = "../../modules/vectors" vector_bucket_name = "my-vector-bucket" create_policy = true policy = jsonencode({ Version = "2012-10-17" Statement = [{ Sid = "writeStatement" Effect = "Allow" Principal = { AWS = "123456789012" } Action = ["s3vectors:PutVectors"] Resource = "*" }] }) tags = { Environment = "dev" } } ``` -------------------------------- ### Terragrunt Configuration for Multiple S3 Buckets Source: https://github.com/terraform-aws-modules/terraform-aws-s3-bucket/blob/master/wrappers/object/README.md Use this configuration in Terragrunt to manage several S3 buckets with shared default settings and individual configurations. Ensure the `source` attribute points to the wrapper module. ```hcl terraform { source = "tfr:///terraform-aws-modules/s3-bucket/aws//wrappers/object" # Alternative source: # source = "git::git@github.com:terraform-aws-modules/terraform-aws-s3-bucket.git//wrappers/object?ref=master" } inputs = { defaults = { # Default values create = true tags = { Terraform = "true" Environment = "dev" } } items = { my-item = { # omitted... can be any argument supported by the module } my-second-item = { # omitted... can be any argument supported by the module } # omitted... } } ``` -------------------------------- ### Terragrunt Configuration for S3 Bucket Wrapper Source: https://github.com/terraform-aws-modules/terraform-aws-s3-bucket/blob/master/wrappers/account-public-access/README.md Use this configuration in Terragrunt to manage multiple S3 buckets with default settings and specific item configurations. ```hcl terraform { source = "tfr:///terraform-aws-modules/s3-bucket/aws//wrappers/account-public-access" # Alternative source: # source = "git::git@github.com:terraform-aws-modules/terraform-aws-s3-bucket.git//wrappers/account-public-access?ref=master" } inputs = { defaults = { # Default values create = true tags = { Terraform = "true" Environment = "dev" } } items = { my-item = { # omitted... can be any argument supported by the module } my-second-item = { # omitted... can be any argument supported by the module } # omitted... } } ``` -------------------------------- ### Terraform Configuration for S3 Bucket Wrapper Source: https://github.com/terraform-aws-modules/terraform-aws-s3-bucket/blob/master/wrappers/account-public-access/README.md Use this Terraform configuration to manage multiple S3 buckets with default settings and specific item configurations. ```hcl module "wrapper" { source = "terraform-aws-modules/s3-bucket/aws//wrappers/account-public-access" defaults = { # Default values create = true tags = { Terraform = "true" Environment = "dev" } } items = { my-item = { # omitted... can be any argument supported by the module } my-second-item = { # omitted... can be any argument supported by the module } # omitted... } } ``` -------------------------------- ### Terragrunt Configuration for S3 Bucket Notification Wrapper Source: https://github.com/terraform-aws-modules/terraform-aws-s3-bucket/blob/master/wrappers/notification/README.md Use this configuration with Terragrunt to manage multiple S3 bucket resources. It specifies the module source and defines default input values along with individual bucket configurations. ```hcl terraform { source = "tfr:///terraform-aws-modules/s3-bucket/aws//wrappers/notification" # Alternative source: # source = "git::git@github.com:terraform-aws-modules/terraform-aws-s3-bucket.git//wrappers/notification?ref=master" } inputs = { defaults = { # Default values create = true tags = { Terraform = "true" Environment = "dev" } } items = { my-item = { # omitted... can be any argument supported by the module } my-second-item = { # omitted... can be any argument supported by the module } # omitted... } } ``` -------------------------------- ### Destroy Terraform Infrastructure Source: https://github.com/terraform-aws-modules/terraform-aws-s3-bucket/blob/master/examples/vectors/README.md Command to remove all resources created by the Terraform configuration. ```bash terraform destroy ```