{"id":50539719,"url":"https://github.com/paybilldev/terraform-aws-bootstrap","last_synced_at":"2026-06-03T19:30:41.186Z","repository":{"id":356446742,"uuid":"1124855978","full_name":"paybilldev/terraform-aws-bootstrap","owner":"paybilldev","description":"Terraform relies on persistent state data to monitor the resources under its management. This enables collaborative access to the state data, allowing multiple individuals to collaborate on the management of a set of infrastructure resources. It creates and configures S3 bucket backend along with a DynamoDB lock table to store Terraform state files","archived":false,"fork":false,"pushed_at":"2026-01-10T21:03:46.000Z","size":42,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-08T06:11:32.868Z","etag":null,"topics":["aws","boostrap","dyanmodb","s3","terraform"],"latest_commit_sha":null,"homepage":"https://paybill.dev/docs/platform/terraform/aws/bootstrap","language":"HCL","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/paybilldev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"buy_me_a_coffee":"ebartile"}},"created_at":"2025-12-29T18:24:46.000Z","updated_at":"2026-01-10T21:03:50.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/paybilldev/terraform-aws-bootstrap","commit_stats":null,"previous_names":["paybilldev/terraform-aws-bootstrap"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/paybilldev/terraform-aws-bootstrap","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paybilldev%2Fterraform-aws-bootstrap","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paybilldev%2Fterraform-aws-bootstrap/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paybilldev%2Fterraform-aws-bootstrap/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paybilldev%2Fterraform-aws-bootstrap/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/paybilldev","download_url":"https://codeload.github.com/paybilldev/terraform-aws-bootstrap/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paybilldev%2Fterraform-aws-bootstrap/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33876893,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-03T02:00:06.370Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aws","boostrap","dyanmodb","s3","terraform"],"created_at":"2026-06-03T19:30:40.534Z","updated_at":"2026-06-03T19:30:41.181Z","avatar_url":"https://github.com/paybilldev.png","language":"HCL","funding_links":["https://buymeacoffee.com/ebartile"],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://paybill.dev\" target=\"_blank\"\u003e\n    \u003cpicture\u003e\n      \u003cimg src=\"./static/aws-bootstrap.png\" alt=\"Banner\" /\u003e\n    \u003c/picture\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n# AWS Bootstrap Terraform Module\n\nTerraform relies on persistent state data to monitor the resources under its management. This enables collaborative access to the state data, allowing multiple individuals to collaborate on the management of a set of infrastructure resources. This module creates and configures a S3 bucket backend along with a DynamoDB lock table to store Terraform state files. As a best practice use this module to create the backend for Terraform\n\n\u003c!-- BEGIN_TF_DOCS --\u003e\n## Requirements\n\n| Name | Version |\n|------|---------|\n| \u003ca name=\"requirement_terraform\"\u003e\u003c/a\u003e [terraform](#requirement\\_terraform) | \u003e= 1.3.0 |\n| \u003ca name=\"requirement_aws\"\u003e\u003c/a\u003e [aws](#requirement\\_aws) | \u003e= 5.0.0 |\n\n## Providers\n\n| Name | Version |\n|------|---------|\n| \u003ca name=\"provider_aws\"\u003e\u003c/a\u003e [aws](#provider\\_aws) | \u003e= 5.0.0 |\n\n## Modules\n\nNo modules.\n\n## Resources\n\n| Name | Type |\n|------|------|\n| [aws_dynamodb_table.terraform_state_lock](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/dynamodb_table) | resource |\n| [aws_s3_bucket.private](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/s3_bucket) | resource |\n| [aws_s3_bucket_acl.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/s3_bucket_acl) | resource |\n| [aws_s3_bucket_analytics_configuration.private_analytics_config](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/s3_bucket_analytics_configuration) | resource |\n| [aws_s3_bucket_cors_configuration.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/s3_bucket_cors_configuration) | resource |\n| [aws_s3_bucket_inventory.inventory](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/s3_bucket_inventory) | resource |\n| [aws_s3_bucket_lifecycle_configuration.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/s3_bucket_lifecycle_configuration) | resource |\n| [aws_s3_bucket_logging.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/s3_bucket_logging) | resource |\n| [aws_s3_bucket_ownership_controls.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/s3_bucket_ownership_controls) | resource |\n| [aws_s3_bucket_policy.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/s3_bucket_policy) | resource |\n| [aws_s3_bucket_public_access_block.public_access_block](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/s3_bucket_public_access_block) | resource |\n| [aws_s3_bucket_server_side_encryption_configuration.example](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/s3_bucket_server_side_encryption_configuration) | resource |\n| [aws_s3_bucket_versioning.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/s3_bucket_versioning) | resource |\n| [aws_caller_identity.current](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/caller_identity) | data source |\n| [aws_iam_policy_document.policy](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/iam_policy_document) | data source |\n| [aws_partition.current](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/partition) | data source |\n\n## Inputs\n\n| Name | Description | Type | Default | Required |\n|------|-------------|------|---------|:--------:|\n| \u003ca name=\"input_abort_incomplete_multipart_upload_days\"\u003e\u003c/a\u003e [abort\\_incomplete\\_multipart\\_upload\\_days](#input\\_abort\\_incomplete\\_multipart\\_upload\\_days) | Specifies the number of days after initiating a multipart upload when the multipart upload must be completed. | `number` | `14` | no |\n| \u003ca name=\"input_bucket_key_enabled\"\u003e\u003c/a\u003e [bucket\\_key\\_enabled](#input\\_bucket\\_key\\_enabled) | Whether or not to use Amazon S3 Bucket Keys for SSE-KMS. | `bool` | `false` | no |\n| \u003ca name=\"input_bucket_name\"\u003e\u003c/a\u003e [bucket\\_name](#input\\_bucket\\_name) | The name of the bucket. | `string` | n/a | yes |\n| \u003ca name=\"input_cors_rules\"\u003e\u003c/a\u003e [cors\\_rules](#input\\_cors\\_rules) | List of maps containing rules for Cross-Origin Resource Sharing. | `list(any)` | `[]` | no |\n| \u003ca name=\"input_dynamo_kms_master_key_id\"\u003e\u003c/a\u003e [dynamo\\_kms\\_master\\_key\\_id](#input\\_dynamo\\_kms\\_master\\_key\\_id) | The Default ID of an AWS-managed customer master key (CMK) for Amazon Dynamo | `string` | `null` | no |\n| \u003ca name=\"input_dynamodb_hash_key\"\u003e\u003c/a\u003e [dynamodb\\_hash\\_key](#input\\_dynamodb\\_hash\\_key) | The attribute to use as the hash (partition) key. | `string` | `\"LockID\"` | no |\n| \u003ca name=\"input_dynamodb_name\"\u003e\u003c/a\u003e [dynamodb\\_name](#input\\_dynamodb\\_name) | The name of the table, this needs to be unique within a region. | `string` | n/a | yes |\n| \u003ca name=\"input_enable_analytics\"\u003e\u003c/a\u003e [enable\\_analytics](#input\\_enable\\_analytics) | Enables storage class analytics on the bucket. | `bool` | `true` | no |\n| \u003ca name=\"input_enable_bucket_force_destroy\"\u003e\u003c/a\u003e [enable\\_bucket\\_force\\_destroy](#input\\_enable\\_bucket\\_force\\_destroy) | A boolean that indicates all objects (including any locked objects) should be deleted from the bucket so that the bucket can be destroyed without error. | `bool` | `false` | no |\n| \u003ca name=\"input_enable_bucket_inventory\"\u003e\u003c/a\u003e [enable\\_bucket\\_inventory](#input\\_enable\\_bucket\\_inventory) | If set to true, Bucket Inventory will be enabled. | `bool` | `false` | no |\n| \u003ca name=\"input_enable_bucket_logging\"\u003e\u003c/a\u003e [enable\\_bucket\\_logging](#input\\_enable\\_bucket\\_logging) | Enable bucket activity logging. | `bool` | `false` | no |\n| \u003ca name=\"input_enable_dynamodb_point_in_time_recovery\"\u003e\u003c/a\u003e [enable\\_dynamodb\\_point\\_in\\_time\\_recovery](#input\\_enable\\_dynamodb\\_point\\_in\\_time\\_recovery) | Whether to enable point-in-time recovery - note that it can take up to 10 minutes to enable for new tables. | `bool` | `true` | no |\n| \u003ca name=\"input_enable_s3_public_access_block\"\u003e\u003c/a\u003e [enable\\_s3\\_public\\_access\\_block](#input\\_enable\\_s3\\_public\\_access\\_block) | Bool for toggling whether the s3 public access block resource should be enabled. | `bool` | `true` | no |\n| \u003ca name=\"input_enable_versioning\"\u003e\u003c/a\u003e [enable\\_versioning](#input\\_enable\\_versioning) | Enable versioning. Once you version-enable a bucket, it can never return to an unversioned state. | `bool` | `true` | no |\n| \u003ca name=\"input_expiration\"\u003e\u003c/a\u003e [expiration](#input\\_expiration) | Specifies a period in the object's expire. | `list(any)` | \u003cpre\u003e[\u003cbr/\u003e  {\u003cbr/\u003e    \"expired_object_delete_marker\": true\u003cbr/\u003e  }\u003cbr/\u003e]\u003c/pre\u003e | no |\n| \u003ca name=\"input_inventory_bucket_format\"\u003e\u003c/a\u003e [inventory\\_bucket\\_format](#input\\_inventory\\_bucket\\_format) | The format for the inventory file. Default is ORC. Options are ORC or CSV. | `string` | `\"ORC\"` | no |\n| \u003ca name=\"input_kms_master_key_id\"\u003e\u003c/a\u003e [kms\\_master\\_key\\_id](#input\\_kms\\_master\\_key\\_id) | The AWS KMS master key ID used for the SSE-KMS encryption. | `string` | `\"\"` | no |\n| \u003ca name=\"input_logging_bucket_name\"\u003e\u003c/a\u003e [logging\\_bucket\\_name](#input\\_logging\\_bucket\\_name) | The S3 bucket to send S3 access logs. | `string` | `\"\"` | no |\n| \u003ca name=\"input_logging_bucket_target_prefix\"\u003e\u003c/a\u003e [logging\\_bucket\\_target\\_prefix](#input\\_logging\\_bucket\\_target\\_prefix) | To specify a key prefix for log objects. | `string` | `\"\"` | no |\n| \u003ca name=\"input_mfa_delete\"\u003e\u003c/a\u003e [mfa\\_delete](#input\\_mfa\\_delete) | mfa\\_delete is disabled | `bool` | `false` | no |\n| \u003ca name=\"input_noncurrent_version_expiration\"\u003e\u003c/a\u003e [noncurrent\\_version\\_expiration](#input\\_noncurrent\\_version\\_expiration) | Number of days until non-current version of object expires | `number` | `365` | no |\n| \u003ca name=\"input_noncurrent_version_transitions\"\u003e\u003c/a\u003e [noncurrent\\_version\\_transitions](#input\\_noncurrent\\_version\\_transitions) | Non-current version transition blocks | `list(any)` | \u003cpre\u003e[\u003cbr/\u003e  {\u003cbr/\u003e    \"days\": 30,\u003cbr/\u003e    \"storage_class\": \"STANDARD_IA\"\u003cbr/\u003e  }\u003cbr/\u003e]\u003c/pre\u003e | no |\n| \u003ca name=\"input_schedule_frequency\"\u003e\u003c/a\u003e [schedule\\_frequency](#input\\_schedule\\_frequency) | The S3 bucket inventory frequency. Defaults to Weekly. Options are 'Weekly' or 'Daily'. | `string` | `\"Weekly\"` | no |\n| \u003ca name=\"input_sse_algorithm\"\u003e\u003c/a\u003e [sse\\_algorithm](#input\\_sse\\_algorithm) | The server-side encryption algorithm to use. Valid values are AES256 and aws:kms | `string` | `\"AES256\"` | no |\n| \u003ca name=\"input_tags\"\u003e\u003c/a\u003e [tags](#input\\_tags) | A mapping of tags to assign to the bucket. | `map(string)` | \u003cpre\u003e{\u003cbr/\u003e  \"Module\": \"bootstrap\",\u003cbr/\u003e  \"TerraformManaged\": \"true\"\u003cbr/\u003e}\u003c/pre\u003e | no |\n| \u003ca name=\"input_transitions\"\u003e\u003c/a\u003e [transitions](#input\\_transitions) | Current version transition blocks | `list(any)` | `[]` | no |\n\n## Outputs\n\n| Name | Description |\n|------|-------------|\n| \u003ca name=\"output_bucket_arn\"\u003e\u003c/a\u003e [bucket\\_arn](#output\\_bucket\\_arn) | Bucket's ARN |\n| \u003ca name=\"output_bucket_id\"\u003e\u003c/a\u003e [bucket\\_id](#output\\_bucket\\_id) | Bucket's ID |\n| \u003ca name=\"output_bucket_name\"\u003e\u003c/a\u003e [bucket\\_name](#output\\_bucket\\_name) | Bucket's Name |\n| \u003ca name=\"output_dynamodb_arn\"\u003e\u003c/a\u003e [dynamodb\\_arn](#output\\_dynamodb\\_arn) | DynamoDB's ARN |\n| \u003ca name=\"output_dynamodb_id\"\u003e\u003c/a\u003e [dynamodb\\_id](#output\\_dynamodb\\_id) | DynamoDB's ID |\n| \u003ca name=\"output_dynamodb_name\"\u003e\u003c/a\u003e [dynamodb\\_name](#output\\_dynamodb\\_name) | DynamoDB's Name |\n\u003c!-- END_TF_DOCS --\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpaybilldev%2Fterraform-aws-bootstrap","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpaybilldev%2Fterraform-aws-bootstrap","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpaybilldev%2Fterraform-aws-bootstrap/lists"}