diff --git a/.gitignore b/.gitignore index 4ed4d07e..2f82beef 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,8 @@ /node_modules/ /.tx/tmp/ npm-debug.log +target/ +.terraform* transifex.auth interim diff --git a/terraform/main.tf b/terraform/main.tf new file mode 100644 index 00000000..534a5006 --- /dev/null +++ b/terraform/main.tf @@ -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 + } +} diff --git a/terraform/terraform.tfstate b/terraform/terraform.tfstate new file mode 100644 index 00000000..68bd1f6f --- /dev/null +++ b/terraform/terraform.tfstate @@ -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 +} diff --git a/terraform/terraform.tfstate.backup b/terraform/terraform.tfstate.backup new file mode 100644 index 00000000..65db5019 --- /dev/null +++ b/terraform/terraform.tfstate.backup @@ -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 +}