add terraform

This commit is contained in:
Will Freeman
2025-06-19 16:14:37 -06:00
parent 8b93d184e1
commit 71b4e81090
4 changed files with 519 additions and 0 deletions

2
.gitignore vendored
View File

@@ -4,6 +4,8 @@
/node_modules/
/.tx/tmp/
npm-debug.log
target/
.terraform*
transifex.auth
interim

67
terraform/main.tf Normal file
View File

@@ -0,0 +1,67 @@
provider "aws" {
region = "us-east-1"
}
resource "aws_s3_bucket" "static_website" {
bucket = "id-tagging-schema.deflock.me"
tags = {
Name = "id-tagging-schema.deflock.me"
Environment = "Production"
}
}
resource "aws_s3_bucket_website_configuration" "static_website_website_configuration" {
bucket = aws_s3_bucket.static_website.id
index_document {
suffix = "index.html"
}
}
resource "aws_s3_bucket_public_access_block" "static_website_public_access_block" {
bucket = aws_s3_bucket.static_website.id
block_public_acls = false
block_public_policy = false
ignore_public_acls = false
restrict_public_buckets = false
}
resource "null_resource" "sync_dist_to_s3" {
triggers = {
always_run = timestamp()
}
provisioner "local-exec" {
command = "aws s3 sync ../dist s3://${aws_s3_bucket.static_website.bucket}/dist"
}
}
resource "aws_s3_bucket_policy" "static_website_policy" {
bucket = aws_s3_bucket.static_website.id
policy = jsonencode({
Version = "2012-10-17",
Statement = [
{
Effect = "Allow",
Principal = "*",
Action = "s3:GetObject",
Resource = "${aws_s3_bucket.static_website.arn}/*"
}
]
})
}
resource "aws_s3_bucket_cors_configuration" "static_website_cors" {
bucket = aws_s3_bucket.static_website.id
cors_rule {
allowed_headers = ["*"]
allowed_methods = ["GET"]
allowed_origins = ["*"]
expose_headers = ["ETag"]
max_age_seconds = 3000
}
}

215
terraform/terraform.tfstate Normal file
View File

@@ -0,0 +1,215 @@
{
"version": 4,
"terraform_version": "1.9.2",
"serial": 25,
"lineage": "cf04ad7f-ea29-d2e3-80c6-14fc4ab44b37",
"outputs": {},
"resources": [
{
"mode": "managed",
"type": "aws_s3_bucket",
"name": "static_website",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"acceleration_status": "",
"acl": null,
"arn": "arn:aws:s3:::id-tagging-schema.deflock.me",
"bucket": "id-tagging-schema.deflock.me",
"bucket_domain_name": "id-tagging-schema.deflock.me.s3.amazonaws.com",
"bucket_prefix": "",
"bucket_regional_domain_name": "id-tagging-schema.deflock.me.s3.us-east-1.amazonaws.com",
"cors_rule": [
{
"allowed_headers": [
"*"
],
"allowed_methods": [
"GET"
],
"allowed_origins": [
"*"
],
"expose_headers": [
"ETag"
],
"max_age_seconds": 3000
}
],
"force_destroy": false,
"grant": [
{
"id": "f84c6ddbd25d207206bab0897ee1a1e4419f396282e256f36898c01604a56191",
"permissions": [
"FULL_CONTROL"
],
"type": "CanonicalUser",
"uri": ""
}
],
"hosted_zone_id": "Z3AQBSTGFYJSTF",
"id": "id-tagging-schema.deflock.me",
"lifecycle_rule": [],
"logging": [],
"object_lock_configuration": [],
"object_lock_enabled": false,
"policy": "{\"Statement\":[{\"Action\":\"s3:GetObject\",\"Effect\":\"Allow\",\"Principal\":\"*\",\"Resource\":\"arn:aws:s3:::id-tagging-schema.deflock.me/*\"},{\"Action\":\"s3:GetBucketCors\",\"Effect\":\"Allow\",\"Principal\":\"*\",\"Resource\":\"arn:aws:s3:::id-tagging-schema.deflock.me\"}],\"Version\":\"2012-10-17\"}",
"region": "us-east-1",
"replication_configuration": [],
"request_payer": "BucketOwner",
"server_side_encryption_configuration": [
{
"rule": [
{
"apply_server_side_encryption_by_default": [
{
"kms_master_key_id": "",
"sse_algorithm": "AES256"
}
],
"bucket_key_enabled": false
}
]
}
],
"tags": {
"Environment": "Production",
"Name": "id-tagging-schema.deflock.me"
},
"tags_all": {
"Environment": "Production",
"Name": "id-tagging-schema.deflock.me"
},
"timeouts": null,
"versioning": [
{
"enabled": false,
"mfa_delete": false
}
],
"website": [
{
"error_document": "error.html",
"index_document": "index.html",
"redirect_all_requests_to": "",
"routing_rules": ""
}
],
"website_domain": "s3-website-us-east-1.amazonaws.com",
"website_endpoint": "id-tagging-schema.deflock.me.s3-website-us-east-1.amazonaws.com"
},
"sensitive_attributes": [],
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjM2MDAwMDAwMDAwMDAsInJlYWQiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19"
}
]
},
{
"mode": "managed",
"type": "aws_s3_bucket_cors_configuration",
"name": "static_website_cors",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"bucket": "id-tagging-schema.deflock.me",
"cors_rule": [
{
"allowed_headers": [
"*"
],
"allowed_methods": [
"GET"
],
"allowed_origins": [
"*"
],
"expose_headers": [
"ETag"
],
"id": "",
"max_age_seconds": 3000
}
],
"expected_bucket_owner": "",
"id": "id-tagging-schema.deflock.me"
},
"sensitive_attributes": [],
"private": "bnVsbA==",
"dependencies": [
"aws_s3_bucket.static_website"
]
}
]
},
{
"mode": "managed",
"type": "aws_s3_bucket_policy",
"name": "static_website_policy",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"bucket": "id-tagging-schema.deflock.me",
"id": "id-tagging-schema.deflock.me",
"policy": "{\"Statement\":[{\"Action\":\"s3:GetObject\",\"Effect\":\"Allow\",\"Principal\":\"*\",\"Resource\":\"arn:aws:s3:::id-tagging-schema.deflock.me/*\"}],\"Version\":\"2012-10-17\"}"
},
"sensitive_attributes": [],
"private": "bnVsbA==",
"dependencies": [
"aws_s3_bucket.static_website"
]
}
]
},
{
"mode": "managed",
"type": "aws_s3_bucket_public_access_block",
"name": "static_website_public_access_block",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"block_public_acls": false,
"block_public_policy": false,
"bucket": "id-tagging-schema.deflock.me",
"id": "id-tagging-schema.deflock.me",
"ignore_public_acls": false,
"restrict_public_buckets": false
},
"sensitive_attributes": [],
"private": "bnVsbA==",
"dependencies": [
"aws_s3_bucket.static_website"
]
}
]
},
{
"mode": "managed",
"type": "null_resource",
"name": "sync_dist_to_s3",
"provider": "provider[\"registry.terraform.io/hashicorp/null\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"id": "1203062013005394770",
"triggers": {
"always_run": "2025-06-12T22:41:29Z"
}
},
"sensitive_attributes": [],
"dependencies": [
"aws_s3_bucket.static_website"
]
}
]
}
],
"check_results": null
}

View File

@@ -0,0 +1,235 @@
{
"version": 4,
"terraform_version": "1.9.2",
"serial": 20,
"lineage": "cf04ad7f-ea29-d2e3-80c6-14fc4ab44b37",
"outputs": {},
"resources": [
{
"mode": "managed",
"type": "aws_s3_bucket",
"name": "static_website",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"acceleration_status": "",
"acl": null,
"arn": "arn:aws:s3:::id-tagging-schema.deflock.me",
"bucket": "id-tagging-schema.deflock.me",
"bucket_domain_name": "id-tagging-schema.deflock.me.s3.amazonaws.com",
"bucket_prefix": "",
"bucket_regional_domain_name": "id-tagging-schema.deflock.me.s3.us-east-1.amazonaws.com",
"cors_rule": [],
"force_destroy": false,
"grant": [
{
"id": "f84c6ddbd25d207206bab0897ee1a1e4419f396282e256f36898c01604a56191",
"permissions": [
"FULL_CONTROL"
],
"type": "CanonicalUser",
"uri": ""
}
],
"hosted_zone_id": "Z3AQBSTGFYJSTF",
"id": "id-tagging-schema.deflock.me",
"lifecycle_rule": [],
"logging": [],
"object_lock_configuration": [],
"object_lock_enabled": false,
"policy": "{\"Statement\":[{\"Action\":\"s3:GetObject\",\"Effect\":\"Allow\",\"Principal\":\"*\",\"Resource\":\"arn:aws:s3:::id-tagging-schema.deflock.me/*\"}],\"Version\":\"2012-10-17\"}",
"region": "us-east-1",
"replication_configuration": [],
"request_payer": "BucketOwner",
"server_side_encryption_configuration": [
{
"rule": [
{
"apply_server_side_encryption_by_default": [
{
"kms_master_key_id": "",
"sse_algorithm": "AES256"
}
],
"bucket_key_enabled": false
}
]
}
],
"tags": {
"Environment": "Production",
"Name": "id-tagging-schema.deflock.me"
},
"tags_all": {
"Environment": "Production",
"Name": "id-tagging-schema.deflock.me"
},
"timeouts": null,
"versioning": [
{
"enabled": false,
"mfa_delete": false
}
],
"website": [
{
"error_document": "error.html",
"index_document": "index.html",
"redirect_all_requests_to": "",
"routing_rules": ""
}
],
"website_domain": "s3-website-us-east-1.amazonaws.com",
"website_endpoint": "id-tagging-schema.deflock.me.s3-website-us-east-1.amazonaws.com"
},
"sensitive_attributes": [],
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjM2MDAwMDAwMDAwMDAsInJlYWQiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19"
}
]
},
{
"mode": "managed",
"type": "aws_s3_bucket_cors_configuration",
"name": "static_website_cors",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"bucket": "id-tagging-schema.deflock.me",
"cors_rule": [
{
"allowed_headers": [
"*"
],
"allowed_methods": [
"GET"
],
"allowed_origins": [
"*"
],
"expose_headers": [
"ETag"
],
"id": "",
"max_age_seconds": 3000
}
],
"expected_bucket_owner": "",
"id": "id-tagging-schema.deflock.me"
},
"sensitive_attributes": [],
"private": "bnVsbA==",
"dependencies": [
"aws_s3_bucket.static_website"
]
}
]
},
{
"mode": "managed",
"type": "aws_s3_bucket_policy",
"name": "static_website_policy",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"bucket": "id-tagging-schema.deflock.me",
"id": "id-tagging-schema.deflock.me",
"policy": "{\"Statement\":[{\"Action\":\"s3:GetObject\",\"Effect\":\"Allow\",\"Principal\":\"*\",\"Resource\":\"arn:aws:s3:::id-tagging-schema.deflock.me/*\"},{\"Action\":\"s3:GetBucketCors\",\"Effect\":\"Allow\",\"Principal\":\"*\",\"Resource\":\"arn:aws:s3:::id-tagging-schema.deflock.me\"}],\"Version\":\"2012-10-17\"}"
},
"sensitive_attributes": [],
"private": "bnVsbA==",
"dependencies": [
"aws_s3_bucket.static_website"
]
}
]
},
{
"mode": "managed",
"type": "aws_s3_bucket_public_access_block",
"name": "static_website_public_access_block",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"block_public_acls": false,
"block_public_policy": false,
"bucket": "id-tagging-schema.deflock.me",
"id": "id-tagging-schema.deflock.me",
"ignore_public_acls": false,
"restrict_public_buckets": false
},
"sensitive_attributes": [],
"private": "bnVsbA==",
"dependencies": [
"aws_s3_bucket.static_website"
]
}
]
},
{
"mode": "managed",
"type": "aws_s3_bucket_website_configuration",
"name": "static_website_config",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"bucket": "id-tagging-schema.deflock.me",
"error_document": [
{
"key": "error.html"
}
],
"expected_bucket_owner": "",
"id": "id-tagging-schema.deflock.me",
"index_document": [
{
"suffix": "index.html"
}
],
"redirect_all_requests_to": [],
"routing_rule": [],
"routing_rules": "",
"website_domain": "s3-website-us-east-1.amazonaws.com",
"website_endpoint": "id-tagging-schema.deflock.me.s3-website-us-east-1.amazonaws.com"
},
"sensitive_attributes": [],
"private": "bnVsbA==",
"dependencies": [
"aws_s3_bucket.static_website"
]
}
]
},
{
"mode": "managed",
"type": "null_resource",
"name": "sync_dist_to_s3",
"provider": "provider[\"registry.terraform.io/hashicorp/null\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"id": "4758897972960695945",
"triggers": {
"always_run": "2025-06-12T22:30:50Z"
}
},
"sensitive_attributes": [],
"dependencies": [
"aws_s3_bucket.static_website"
]
}
]
}
],
"check_results": null
}