diff --git a/deployment/infrastructure/main.tf b/deployment/infrastructure/main.tf index 2386d00..8a6e583 100644 --- a/deployment/infrastructure/main.tf +++ b/deployment/infrastructure/main.tf @@ -1,3 +1,14 @@ +variable "db_username" { + type = string + sensitive = true +} +variable "db_password" { + type = string + sensitive = true +} + + + provider "aws" { region = "us-east-2" } @@ -11,13 +22,15 @@ resource "aws_vpc" "finus" { } resource "aws_subnet" "prod" { - vpc_id = aws_vpc.finus.id - cidr_block = "10.0.0.0/17" + vpc_id = aws_vpc.finus.id + cidr_block = "10.0.0.0/17" + availability_zone = "us-east-2c" } -resource "aws_subnet" "dev" { - vpc_id = aws_vpc.finus.id - cidr_block = "10.0.128.0/17" +resource "aws_subnet" "secondary" { + vpc_id = aws_vpc.finus.id + cidr_block = "10.0.128.0/17" + availability_zone = "us-east-2a" } resource "aws_internet_gateway" "default" { @@ -100,7 +113,11 @@ module "prod" { webserver_security_group_ids = [aws_security_group.webserver.id] backend_security_group_ids = [aws_security_group.services.id] subnet_id = aws_subnet.prod.id + secondary_subnet_id = aws_subnet.secondary.id vpc_id = aws_vpc.finus.id gateway_id = aws_internet_gateway.default.id route_table_id = aws_route_table.route_table.id + + db_username = var.db_username + db_password = var.db_password } diff --git a/deployment/infrastructure/modules/finus/main.tf b/deployment/infrastructure/modules/finus/main.tf index 6ad2b7d..52bd19d 100644 --- a/deployment/infrastructure/modules/finus/main.tf +++ b/deployment/infrastructure/modules/finus/main.tf @@ -16,6 +16,9 @@ variable "backend_security_group_ids" { variable "subnet_id" { type = string } +variable "secondary_subnet_id" { + type = string +} variable "vpc_id" { type = string } @@ -25,6 +28,14 @@ variable "gateway_id" { variable "route_table_id" { type = string } +variable "db_username" { + type = string + sensitive = true +} +variable "db_password" { + type = string + sensitive = true +} data "aws_ami" "amazon_linux" { @@ -81,3 +92,36 @@ resource "aws_eip" "webserver" { Name = join("", ["finus-", var.environment_name, "-webserver"]) } } + +resource "aws_security_group" "db" { + name = "backend access" + vpc_id = var.vpc_id + + ingress { + cidr_blocks = [join("/", [aws_instance.backend.private_ip, "32"])] + from_port = 3306 + to_port = 3306 + protocol = "tcp" + } +} + +resource "aws_db_subnet_group" "default" { + name = "finus-${var.environment_name}-db-subnet-group" + subnet_ids = [var.subnet_id, var.secondary_subnet_id] + + tags = { + Name = "finus-${var.environment_name}-db-subnet-group" + } +} +resource "aws_db_instance" "default" { + allocated_storage = 5 + db_name = "finus" + engine = "mysql" + engine_version = "8.0" + instance_class = "db.t3.micro" + username = var.db_username + password = var.db_password + + vpc_security_group_ids = [aws_security_group.db.id] + db_subnet_group_name = aws_db_subnet_group.default.name +} diff --git a/deployment/infrastructure/terraform.tfstate b/deployment/infrastructure/terraform.tfstate index ed13165..0c07cba 100644 --- a/deployment/infrastructure/terraform.tfstate +++ b/deployment/infrastructure/terraform.tfstate @@ -1,7 +1,7 @@ { "version": 4, "terraform_version": "1.14.7", - "serial": 128, + "serial": 134, "lineage": "ae3e9505-c9b9-9084-580e-4ba9a7f0ba2f", "outputs": {}, "resources": [ @@ -285,23 +285,23 @@ { "mode": "managed", "type": "aws_subnet", - "name": "dev", + "name": "prod", "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", "instances": [ { "schema_version": 1, "attributes": { - "arn": "arn:aws:ec2:us-east-2:177559564758:subnet/subnet-09d5718b3434ec2be", + "arn": "arn:aws:ec2:us-east-2:177559564758:subnet/subnet-05e5676ab26e11acc", "assign_ipv6_address_on_creation": false, "availability_zone": "us-east-2c", "availability_zone_id": "use2-az3", - "cidr_block": "10.0.128.0/17", + "cidr_block": "10.0.0.0/17", "customer_owned_ipv4_pool": "", "enable_dns64": false, "enable_lni_at_device_index": 0, "enable_resource_name_dns_a_record_on_launch": false, "enable_resource_name_dns_aaaa_record_on_launch": false, - "id": "subnet-09d5718b3434ec2be", + "id": "subnet-05e5676ab26e11acc", "ipv4_ipam_pool_id": null, "ipv4_netmask_length": null, "ipv6_cidr_block": "", @@ -324,7 +324,7 @@ "identity_schema_version": 0, "identity": { "account_id": "177559564758", - "id": "subnet-09d5718b3434ec2be", + "id": "subnet-05e5676ab26e11acc", "region": "us-east-2" }, "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo2MDAwMDAwMDAwMDAsImRlbGV0ZSI6MTIwMDAwMDAwMDAwMH0sInNjaGVtYV92ZXJzaW9uIjoiMSJ9", @@ -337,23 +337,23 @@ { "mode": "managed", "type": "aws_subnet", - "name": "prod", + "name": "secondary", "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", "instances": [ { "schema_version": 1, "attributes": { - "arn": "arn:aws:ec2:us-east-2:177559564758:subnet/subnet-05e5676ab26e11acc", + "arn": "arn:aws:ec2:us-east-2:177559564758:subnet/subnet-0ee7f6fe04be234da", "assign_ipv6_address_on_creation": false, - "availability_zone": "us-east-2c", - "availability_zone_id": "use2-az3", - "cidr_block": "10.0.0.0/17", + "availability_zone": "us-east-2a", + "availability_zone_id": "use2-az1", + "cidr_block": "10.0.128.0/17", "customer_owned_ipv4_pool": "", "enable_dns64": false, "enable_lni_at_device_index": 0, "enable_resource_name_dns_a_record_on_launch": false, "enable_resource_name_dns_aaaa_record_on_launch": false, - "id": "subnet-05e5676ab26e11acc", + "id": "subnet-0ee7f6fe04be234da", "ipv4_ipam_pool_id": null, "ipv4_netmask_length": null, "ipv6_cidr_block": "", @@ -367,7 +367,7 @@ "owner_id": "177559564758", "private_dns_hostname_type_on_launch": "ip-name", "region": "us-east-2", - "tags": {}, + "tags": null, "tags_all": {}, "timeouts": null, "vpc_id": "vpc-0e13d5c774ed2b3c8" @@ -376,7 +376,7 @@ "identity_schema_version": 0, "identity": { "account_id": "177559564758", - "id": "subnet-05e5676ab26e11acc", + "id": "subnet-0ee7f6fe04be234da", "region": "us-east-2" }, "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo2MDAwMDAwMDAwMDAsImRlbGV0ZSI6MTIwMDAwMDAwMDAwMH0sInNjaGVtYV92ZXJzaW9uIjoiMSJ9", @@ -521,6 +521,184 @@ } ] }, + { + "module": "module.prod", + "mode": "managed", + "type": "aws_db_instance", + "name": "default", + "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", + "instances": [ + { + "schema_version": 2, + "attributes": { + "address": "terraform-20260403140156675200000001.cv8mki0o4cg9.us-east-2.rds.amazonaws.com", + "allocated_storage": 5, + "allow_major_version_upgrade": null, + "apply_immediately": false, + "arn": "arn:aws:rds:us-east-2:177559564758:db:terraform-20260403140156675200000001", + "auto_minor_version_upgrade": true, + "availability_zone": "us-east-2c", + "backup_retention_period": 0, + "backup_target": "region", + "backup_window": "08:07-08:37", + "blue_green_update": [], + "ca_cert_identifier": "rds-ca-rsa2048-g1", + "character_set_name": "", + "copy_tags_to_snapshot": false, + "custom_iam_instance_profile": "", + "customer_owned_ip_enabled": false, + "database_insights_mode": "standard", + "db_name": "finus", + "db_subnet_group_name": "finus-prod-db-subnet-group", + "dedicated_log_volume": false, + "delete_automated_backups": true, + "deletion_protection": false, + "domain": "", + "domain_auth_secret_arn": "", + "domain_dns_ips": null, + "domain_fqdn": "", + "domain_iam_role_name": "", + "domain_ou": "", + "enabled_cloudwatch_logs_exports": null, + "endpoint": "terraform-20260403140156675200000001.cv8mki0o4cg9.us-east-2.rds.amazonaws.com:3306", + "engine": "mysql", + "engine_lifecycle_support": "open-source-rds-extended-support", + "engine_version": "8.0", + "engine_version_actual": "8.0.45", + "final_snapshot_identifier": null, + "hosted_zone_id": "Z2XHWR1WZ565X2", + "iam_database_authentication_enabled": false, + "id": "db-WOTCD5TARTB2FNKCFMRERC3LBA", + "identifier": "terraform-20260403140156675200000001", + "identifier_prefix": "terraform-", + "instance_class": "db.t3.micro", + "iops": 0, + "kms_key_id": "", + "latest_restorable_time": "", + "license_model": "general-public-license", + "listener_endpoint": [], + "maintenance_window": "sat:09:52-sat:10:22", + "manage_master_user_password": null, + "master_user_secret": [], + "master_user_secret_kms_key_id": null, + "max_allocated_storage": 0, + "monitoring_interval": 0, + "monitoring_role_arn": "", + "multi_az": false, + "nchar_character_set_name": "", + "network_type": "IPV4", + "option_group_name": "default:mysql-8-0", + "parameter_group_name": "default.mysql8.0", + "password": "abc123456", + "password_wo": null, + "password_wo_version": null, + "performance_insights_enabled": false, + "performance_insights_kms_key_id": "", + "performance_insights_retention_period": 0, + "port": 3306, + "publicly_accessible": false, + "region": "us-east-2", + "replica_mode": "", + "replicas": [], + "replicate_source_db": "", + "resource_id": "db-WOTCD5TARTB2FNKCFMRERC3LBA", + "restore_to_point_in_time": [], + "s3_import": [], + "skip_final_snapshot": false, + "snapshot_identifier": null, + "status": "available", + "storage_encrypted": false, + "storage_throughput": 0, + "storage_type": "gp2", + "tags": null, + "tags_all": {}, + "timeouts": null, + "timezone": "", + "upgrade_rollout_order": "second", + "upgrade_storage_config": null, + "username": "finus_user", + "vpc_security_group_ids": [ + "sg-0b0da810ad840e612" + ] + }, + "sensitive_attributes": [ + [ + { + "type": "get_attr", + "value": "password" + } + ], + [ + { + "type": "get_attr", + "value": "password_wo" + } + ], + [ + { + "type": "get_attr", + "value": "username" + } + ] + ], + "identity_schema_version": 0, + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjozMDAwMDAwMDAwMDAwLCJkZWxldGUiOjM2MDAwMDAwMDAwMDAsInVwZGF0ZSI6NDgwMDAwMDAwMDAwMH0sInNjaGVtYV92ZXJzaW9uIjoiMiJ9", + "dependencies": [ + "aws_security_group.default", + "aws_security_group.services", + "aws_subnet.prod", + "aws_subnet.secondary", + "aws_vpc.finus", + "module.prod.aws_db_subnet_group.default", + "module.prod.aws_instance.backend", + "module.prod.aws_security_group.db", + "module.prod.data.aws_ami.amazon_linux" + ] + } + ] + }, + { + "module": "module.prod", + "mode": "managed", + "type": "aws_db_subnet_group", + "name": "default", + "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "arn": "arn:aws:rds:us-east-2:177559564758:subgrp:finus-prod-db-subnet-group", + "description": "Managed by Terraform", + "id": "finus-prod-db-subnet-group", + "name": "finus-prod-db-subnet-group", + "name_prefix": "", + "region": "us-east-2", + "subnet_ids": [ + "subnet-05e5676ab26e11acc", + "subnet-0ee7f6fe04be234da" + ], + "supported_network_types": [ + "IPV4" + ], + "tags": { + "Name": "finus-prod-db-subnet-group" + }, + "tags_all": { + "Name": "finus-prod-db-subnet-group" + }, + "vpc_id": "vpc-0e13d5c774ed2b3c8" + }, + "sensitive_attributes": [], + "identity_schema_version": 0, + "private": "bnVsbA==", + "dependencies": [ + "aws_subnet.prod", + "aws_subnet.secondary", + "aws_vpc.finus" + ] + } + ] + }, { "module": "module.prod", "mode": "managed", @@ -967,6 +1145,64 @@ ] } ] + }, + { + "module": "module.prod", + "mode": "managed", + "type": "aws_security_group", + "name": "db", + "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", + "instances": [ + { + "schema_version": 1, + "attributes": { + "arn": "arn:aws:ec2:us-east-2:177559564758:security-group/sg-0b0da810ad840e612", + "description": "Managed by Terraform", + "egress": [], + "id": "sg-0b0da810ad840e612", + "ingress": [ + { + "cidr_blocks": [ + "10.0.50.231/32" + ], + "description": "", + "from_port": 3306, + "ipv6_cidr_blocks": [], + "prefix_list_ids": [], + "protocol": "tcp", + "security_groups": [], + "self": false, + "to_port": 3306 + } + ], + "name": "backend access", + "name_prefix": "", + "owner_id": "177559564758", + "region": "us-east-2", + "revoke_rules_on_delete": false, + "tags": {}, + "tags_all": {}, + "timeouts": null, + "vpc_id": "vpc-0e13d5c774ed2b3c8" + }, + "sensitive_attributes": [], + "identity_schema_version": 0, + "identity": { + "account_id": "177559564758", + "id": "sg-0b0da810ad840e612", + "region": "us-east-2" + }, + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo2MDAwMDAwMDAwMDAsImRlbGV0ZSI6OTAwMDAwMDAwMDAwfSwic2NoZW1hX3ZlcnNpb24iOiIxIn0=", + "dependencies": [ + "aws_security_group.default", + "aws_security_group.services", + "aws_subnet.prod", + "aws_vpc.finus", + "module.prod.aws_instance.backend", + "module.prod.data.aws_ami.amazon_linux" + ] + } + ] } ], "check_results": null diff --git a/deployment/infrastructure/terraform.tfstate.backup b/deployment/infrastructure/terraform.tfstate.backup index 8a641c7..edef8a9 100644 --- a/deployment/infrastructure/terraform.tfstate.backup +++ b/deployment/infrastructure/terraform.tfstate.backup @@ -1,7 +1,7 @@ { "version": 4, "terraform_version": "1.14.7", - "serial": 122, + "serial": 130, "lineage": "ae3e9505-c9b9-9084-580e-4ba9a7f0ba2f", "outputs": {}, "resources": [ @@ -175,7 +175,21 @@ "attributes": { "arn": "arn:aws:ec2:us-east-2:177559564758:security-group/sg-0e428a46b850e036a", "description": "Managed by Terraform", - "egress": [], + "egress": [ + { + "cidr_blocks": [ + "0.0.0.0/0" + ], + "description": "MySQL from anywhere", + "from_port": 3306, + "ipv6_cidr_blocks": [], + "prefix_list_ids": [], + "protocol": "tcp", + "security_groups": [], + "self": false, + "to_port": 3306 + } + ], "id": "sg-0e428a46b850e036a", "ingress": [ { @@ -249,7 +263,7 @@ "owner_id": "177559564758", "region": "us-east-2", "revoke_rules_on_delete": false, - "tags": null, + "tags": {}, "tags_all": {}, "timeouts": null, "vpc_id": "vpc-0e13d5c774ed2b3c8" @@ -268,58 +282,6 @@ } ] }, - { - "mode": "managed", - "type": "aws_subnet", - "name": "dev", - "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", - "instances": [ - { - "schema_version": 1, - "attributes": { - "arn": "arn:aws:ec2:us-east-2:177559564758:subnet/subnet-09d5718b3434ec2be", - "assign_ipv6_address_on_creation": false, - "availability_zone": "us-east-2c", - "availability_zone_id": "use2-az3", - "cidr_block": "10.0.128.0/17", - "customer_owned_ipv4_pool": "", - "enable_dns64": false, - "enable_lni_at_device_index": 0, - "enable_resource_name_dns_a_record_on_launch": false, - "enable_resource_name_dns_aaaa_record_on_launch": false, - "id": "subnet-09d5718b3434ec2be", - "ipv4_ipam_pool_id": null, - "ipv4_netmask_length": null, - "ipv6_cidr_block": "", - "ipv6_cidr_block_association_id": "", - "ipv6_ipam_pool_id": null, - "ipv6_native": false, - "ipv6_netmask_length": null, - "map_customer_owned_ip_on_launch": false, - "map_public_ip_on_launch": false, - "outpost_arn": "", - "owner_id": "177559564758", - "private_dns_hostname_type_on_launch": "ip-name", - "region": "us-east-2", - "tags": {}, - "tags_all": {}, - "timeouts": null, - "vpc_id": "vpc-0e13d5c774ed2b3c8" - }, - "sensitive_attributes": [], - "identity_schema_version": 0, - "identity": { - "account_id": "177559564758", - "id": "subnet-09d5718b3434ec2be", - "region": "us-east-2" - }, - "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo2MDAwMDAwMDAwMDAsImRlbGV0ZSI6MTIwMDAwMDAwMDAwMH0sInNjaGVtYV92ZXJzaW9uIjoiMSJ9", - "dependencies": [ - "aws_vpc.finus" - ] - } - ] - }, { "mode": "managed", "type": "aws_subnet", @@ -422,7 +384,7 @@ ] }, { - "module": "module.dev", + "module": "module.prod", "mode": "data", "type": "aws_ami", "name": "amazon_linux", @@ -508,7 +470,7 @@ ] }, { - "module": "module.dev", + "module": "module.prod", "mode": "managed", "type": "aws_eip", "name": "backend", @@ -518,31 +480,31 @@ "schema_version": 0, "attributes": { "address": null, - "allocation_id": "eipalloc-04f46a5b83e1a6af0", - "arn": "arn:aws:ec2:us-east-2:177559564758:elastic-ip/eipalloc-04f46a5b83e1a6af0", + "allocation_id": "eipalloc-0262f07d6e23594c4", + "arn": "arn:aws:ec2:us-east-2:177559564758:elastic-ip/eipalloc-0262f07d6e23594c4", "associate_with_private_ip": null, - "association_id": "eipassoc-0818aa83d85c2f91b", + "association_id": "eipassoc-0202a50414bdbee94", "carrier_ip": "", "customer_owned_ip": "", "customer_owned_ipv4_pool": "", "domain": "vpc", - "id": "eipalloc-04f46a5b83e1a6af0", - "instance": "i-008147727278f7080", + "id": "eipalloc-0262f07d6e23594c4", + "instance": "i-0dd805bcaa0a0ade3", "ipam_pool_id": null, "network_border_group": "us-east-2", - "network_interface": "eni-0f364cdcae030e0e6", - "private_dns": "ip-10-0-221-90.us-east-2.compute.internal", - "private_ip": "10.0.221.90", + "network_interface": "eni-0d9461ec08710f2d7", + "private_dns": "ip-10-0-50-231.us-east-2.compute.internal", + "private_ip": "10.0.50.231", "ptr_record": "", - "public_dns": "ec2-16-58-118-74.us-east-2.compute.amazonaws.com", - "public_ip": "16.58.118.74", + "public_dns": "ec2-3-150-23-72.us-east-2.compute.amazonaws.com", + "public_ip": "3.150.23.72", "public_ipv4_pool": "amazon", "region": "us-east-2", "tags": { - "Name": "finus-dev-backend" + "Name": "finus-prod-backend" }, "tags_all": { - "Name": "finus-dev-backend" + "Name": "finus-prod-backend" }, "timeouts": null }, @@ -552,16 +514,16 @@ "dependencies": [ "aws_security_group.default", "aws_security_group.services", - "aws_subnet.dev", + "aws_subnet.prod", "aws_vpc.finus", - "module.dev.aws_instance.backend", - "module.dev.data.aws_ami.amazon_linux" + "module.prod.aws_instance.backend", + "module.prod.data.aws_ami.amazon_linux" ] } ] }, { - "module": "module.dev", + "module": "module.prod", "mode": "managed", "type": "aws_eip", "name": "webserver", @@ -571,31 +533,31 @@ "schema_version": 0, "attributes": { "address": null, - "allocation_id": "eipalloc-0857b784b20a92dad", - "arn": "arn:aws:ec2:us-east-2:177559564758:elastic-ip/eipalloc-0857b784b20a92dad", + "allocation_id": "eipalloc-06fe359af4fbd5f9b", + "arn": "arn:aws:ec2:us-east-2:177559564758:elastic-ip/eipalloc-06fe359af4fbd5f9b", "associate_with_private_ip": null, - "association_id": "eipassoc-06e143e0fc9004868", + "association_id": "eipassoc-0ce3ab9543feb5d7f", "carrier_ip": "", "customer_owned_ip": "", "customer_owned_ipv4_pool": "", "domain": "vpc", - "id": "eipalloc-0857b784b20a92dad", - "instance": "i-020ba441d6c3c0258", + "id": "eipalloc-06fe359af4fbd5f9b", + "instance": "i-0f897d2768cad0033", "ipam_pool_id": null, "network_border_group": "us-east-2", - "network_interface": "eni-03283cda15cf431d3", - "private_dns": "ip-10-0-140-152.us-east-2.compute.internal", - "private_ip": "10.0.140.152", + "network_interface": "eni-0e2de615da26dd0d9", + "private_dns": "ip-10-0-57-91.us-east-2.compute.internal", + "private_ip": "10.0.57.91", "ptr_record": "", - "public_dns": "ec2-3-142-125-202.us-east-2.compute.amazonaws.com", - "public_ip": "3.142.125.202", + "public_dns": "ec2-18-190-215-135.us-east-2.compute.amazonaws.com", + "public_ip": "18.190.215.135", "public_ipv4_pool": "amazon", "region": "us-east-2", "tags": { - "Name": "finus-dev-webserver" + "Name": "finus-prod-webserver" }, "tags_all": { - "Name": "finus-dev-webserver" + "Name": "finus-prod-webserver" }, "timeouts": null }, @@ -605,16 +567,16 @@ "dependencies": [ "aws_security_group.default", "aws_security_group.webserver", - "aws_subnet.dev", + "aws_subnet.prod", "aws_vpc.finus", - "module.dev.aws_instance.webserver", - "module.dev.data.aws_ami.amazon_linux" + "module.prod.aws_instance.webserver", + "module.prod.data.aws_ami.amazon_linux" ] } ] }, { - "module": "module.dev", + "module": "module.prod", "mode": "managed", "type": "aws_instance", "name": "backend", @@ -624,7 +586,7 @@ "schema_version": 2, "attributes": { "ami": "ami-0b0b78dcacbab728f", - "arn": "arn:aws:ec2:us-east-2:177559564758:instance/i-008147727278f7080", + "arn": "arn:aws:ec2:us-east-2:177559564758:instance/i-0dd805bcaa0a0ade3", "associate_public_ip_address": true, "availability_zone": "us-east-2c", "capacity_reservation_specification": [ @@ -663,7 +625,7 @@ "host_id": "", "host_resource_group_arn": null, "iam_instance_profile": "", - "id": "i-008147727278f7080", + "id": "i-0dd805bcaa0a0ade3", "instance_initiated_shutdown_behavior": "stop", "instance_lifecycle": "", "instance_market_options": [], @@ -697,11 +659,11 @@ "primary_network_interface": [ { "delete_on_termination": true, - "network_interface_id": "eni-0f364cdcae030e0e6" + "network_interface_id": "eni-0d9461ec08710f2d7" } ], - "primary_network_interface_id": "eni-0f364cdcae030e0e6", - "private_dns": "ip-10-0-221-90.us-east-2.compute.internal", + "primary_network_interface_id": "eni-0d9461ec08710f2d7", + "private_dns": "ip-10-0-50-231.us-east-2.compute.internal", "private_dns_name_options": [ { "enable_resource_name_dns_a_record": false, @@ -709,9 +671,9 @@ "hostname_type": "ip-name" } ], - "private_ip": "10.0.221.90", + "private_ip": "10.0.50.231", "public_dns": "", - "public_ip": "16.58.118.74", + "public_ip": "3.150.23.72", "region": "us-east-2", "root_block_device": [ { @@ -723,7 +685,7 @@ "tags": {}, "tags_all": {}, "throughput": 125, - "volume_id": "vol-0c0b46050d4eb986e", + "volume_id": "vol-0115ad31723e63439", "volume_size": 8, "volume_type": "gp3" } @@ -733,12 +695,12 @@ "security_groups": [], "source_dest_check": true, "spot_instance_request_id": "", - "subnet_id": "subnet-09d5718b3434ec2be", + "subnet_id": "subnet-05e5676ab26e11acc", "tags": { - "Name": "finus-dev-backend" + "Name": "finus-prod-backend" }, "tags_all": { - "Name": "finus-dev-backend" + "Name": "finus-prod-backend" }, "tenancy": "default", "timeouts": null, @@ -755,22 +717,22 @@ "identity_schema_version": 0, "identity": { "account_id": "177559564758", - "id": "i-008147727278f7080", + "id": "i-0dd805bcaa0a0ade3", "region": "us-east-2" }, "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo2MDAwMDAwMDAwMDAsImRlbGV0ZSI6MTIwMDAwMDAwMDAwMCwicmVhZCI6OTAwMDAwMDAwMDAwLCJ1cGRhdGUiOjYwMDAwMDAwMDAwMH0sInNjaGVtYV92ZXJzaW9uIjoiMiJ9", "dependencies": [ "aws_security_group.default", "aws_security_group.services", - "aws_subnet.dev", + "aws_subnet.prod", "aws_vpc.finus", - "module.dev.data.aws_ami.amazon_linux" + "module.prod.data.aws_ami.amazon_linux" ] } ] }, { - "module": "module.dev", + "module": "module.prod", "mode": "managed", "type": "aws_instance", "name": "webserver", @@ -780,7 +742,7 @@ "schema_version": 2, "attributes": { "ami": "ami-0b0b78dcacbab728f", - "arn": "arn:aws:ec2:us-east-2:177559564758:instance/i-020ba441d6c3c0258", + "arn": "arn:aws:ec2:us-east-2:177559564758:instance/i-0f897d2768cad0033", "associate_public_ip_address": true, "availability_zone": "us-east-2c", "capacity_reservation_specification": [ @@ -819,7 +781,7 @@ "host_id": "", "host_resource_group_arn": null, "iam_instance_profile": "", - "id": "i-020ba441d6c3c0258", + "id": "i-0f897d2768cad0033", "instance_initiated_shutdown_behavior": "stop", "instance_lifecycle": "", "instance_market_options": [], @@ -853,11 +815,11 @@ "primary_network_interface": [ { "delete_on_termination": true, - "network_interface_id": "eni-03283cda15cf431d3" + "network_interface_id": "eni-0e2de615da26dd0d9" } ], - "primary_network_interface_id": "eni-03283cda15cf431d3", - "private_dns": "ip-10-0-140-152.us-east-2.compute.internal", + "primary_network_interface_id": "eni-0e2de615da26dd0d9", + "private_dns": "ip-10-0-57-91.us-east-2.compute.internal", "private_dns_name_options": [ { "enable_resource_name_dns_a_record": false, @@ -865,9 +827,9 @@ "hostname_type": "ip-name" } ], - "private_ip": "10.0.140.152", + "private_ip": "10.0.57.91", "public_dns": "", - "public_ip": "3.142.125.202", + "public_ip": "18.190.215.135", "region": "us-east-2", "root_block_device": [ { @@ -879,7 +841,7 @@ "tags": {}, "tags_all": {}, "throughput": 125, - "volume_id": "vol-09e9f25279b1c2ac1", + "volume_id": "vol-05d61c7cb18058c36", "volume_size": 8, "volume_type": "gp3" } @@ -889,12 +851,12 @@ "security_groups": [], "source_dest_check": true, "spot_instance_request_id": "", - "subnet_id": "subnet-09d5718b3434ec2be", + "subnet_id": "subnet-05e5676ab26e11acc", "tags": { - "Name": "finus-dev-webserver" + "Name": "finus-prod-webserver" }, "tags_all": { - "Name": "finus-dev-webserver" + "Name": "finus-prod-webserver" }, "tenancy": "default", "timeouts": null, @@ -911,22 +873,22 @@ "identity_schema_version": 0, "identity": { "account_id": "177559564758", - "id": "i-020ba441d6c3c0258", + "id": "i-0f897d2768cad0033", "region": "us-east-2" }, "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo2MDAwMDAwMDAwMDAsImRlbGV0ZSI6MTIwMDAwMDAwMDAwMCwicmVhZCI6OTAwMDAwMDAwMDAwLCJ1cGRhdGUiOjYwMDAwMDAwMDAwMH0sInNjaGVtYV92ZXJzaW9uIjoiMiJ9", "dependencies": [ "aws_security_group.default", "aws_security_group.webserver", - "aws_subnet.dev", + "aws_subnet.prod", "aws_vpc.finus", - "module.dev.data.aws_ami.amazon_linux" + "module.prod.data.aws_ami.amazon_linux" ] } ] }, { - "module": "module.dev", + "module": "module.prod", "mode": "managed", "type": "aws_route_table_association", "name": "assoc", @@ -936,10 +898,10 @@ "schema_version": 0, "attributes": { "gateway_id": "", - "id": "rtbassoc-04712335fcc923e95", + "id": "rtbassoc-0b1e2801d2830d94c", "region": "us-east-2", "route_table_id": "rtb-0f24beedbed7e02a3", - "subnet_id": "subnet-09d5718b3434ec2be", + "subnet_id": "subnet-05e5676ab26e11acc", "timeouts": null }, "sensitive_attributes": [], @@ -948,7 +910,7 @@ "dependencies": [ "aws_internet_gateway.default", "aws_route_table.route_table", - "aws_subnet.dev", + "aws_subnet.prod", "aws_vpc.finus" ] } @@ -956,536 +918,61 @@ }, { "module": "module.prod", - "mode": "data", - "type": "aws_ami", - "name": "amazon_linux", + "mode": "managed", + "type": "aws_security_group", + "name": "db", "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", "instances": [ { - "schema_version": 0, + "schema_version": 1, "attributes": { - "allow_unsafe_filter": null, - "architecture": "x86_64", - "arn": "arn:aws:ec2:us-east-2::image/ami-0b0b78dcacbab728f", - "block_device_mappings": [ - { - "device_name": "/dev/xvda", - "ebs": { - "delete_on_termination": "true", - "encrypted": "false", - "iops": "3000", - "snapshot_id": "snap-0afc5230d5113aa86", - "throughput": "125", - "volume_initialization_rate": "0", - "volume_size": "8", - "volume_type": "gp3" - }, - "no_device": "", - "virtual_name": "" - } - ], - "boot_mode": "uefi-preferred", - "creation_date": "2026-03-03T18:01:43.000Z", - "deprecation_time": "2026-06-01T23:47:00.000Z", - "description": "Amazon Linux 2023 AMI 2023.10.20260302.1 x86_64 HVM kernel-6.1", - "ena_support": true, - "executable_users": null, - "filter": [ + "arn": "arn:aws:ec2:us-east-2:177559564758:security-group/sg-0b0da810ad840e612", + "description": "Managed by Terraform", + "egress": [], + "id": "sg-0b0da810ad840e612", + "ingress": [ { - "name": "image-id", - "values": [ - "ami-0b0b78dcacbab728f" - ] + "cidr_blocks": [ + "10.0.50.231/32" + ], + "description": "", + "from_port": 3306, + "ipv6_cidr_blocks": [], + "prefix_list_ids": [], + "protocol": "tcp", + "security_groups": [], + "self": false, + "to_port": 3306 } ], - "hypervisor": "xen", - "id": "ami-0b0b78dcacbab728f", - "image_id": "ami-0b0b78dcacbab728f", - "image_location": "amazon/al2023-ami-2023.10.20260302.1-kernel-6.1-x86_64", - "image_owner_alias": "amazon", - "image_type": "machine", - "imds_support": "v2.0", - "include_deprecated": false, - "kernel_id": "", - "last_launched_time": "", - "most_recent": false, - "name": "al2023-ami-2023.10.20260302.1-kernel-6.1-x86_64", - "name_regex": null, - "owner_id": "137112412989", - "owners": null, - "platform": "", - "platform_details": "Linux/UNIX", - "product_codes": [], - "public": true, - "ramdisk_id": "", + "name": "backend access", + "name_prefix": "", + "owner_id": "177559564758", "region": "us-east-2", - "root_device_name": "/dev/xvda", - "root_device_type": "ebs", - "root_snapshot_id": "snap-0afc5230d5113aa86", - "sriov_net_support": "simple", - "state": "available", - "state_reason": { - "code": "UNSET", - "message": "UNSET" - }, + "revoke_rules_on_delete": false, "tags": {}, + "tags_all": {}, "timeouts": null, - "tpm_support": "", - "uefi_data": null, - "usage_operation": "RunInstances", - "virtualization_type": "hvm" - }, - "sensitive_attributes": [], - "identity_schema_version": 0 - } - ] - }, - { - "module": "module.prod", - "mode": "managed", - "type": "aws_eip", - "name": "backend", - "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", - "instances": [ - { - "schema_version": 0, - "attributes": { - "address": null, - "allocation_id": "eipalloc-0262f07d6e23594c4", - "arn": "arn:aws:ec2:us-east-2:177559564758:elastic-ip/eipalloc-0262f07d6e23594c4", - "associate_with_private_ip": null, - "association_id": "eipassoc-0202a50414bdbee94", - "carrier_ip": "", - "customer_owned_ip": "", - "customer_owned_ipv4_pool": "", - "domain": "vpc", - "id": "eipalloc-0262f07d6e23594c4", - "instance": "i-0dd805bcaa0a0ade3", - "ipam_pool_id": null, - "network_border_group": "us-east-2", - "network_interface": "eni-0d9461ec08710f2d7", - "private_dns": "ip-10-0-50-231.us-east-2.compute.internal", - "private_ip": "10.0.50.231", - "ptr_record": "", - "public_dns": "ec2-3-150-23-72.us-east-2.compute.amazonaws.com", - "public_ip": "3.150.23.72", - "public_ipv4_pool": "amazon", - "region": "us-east-2", - "tags": { - "Name": "finus-prod-backend" - }, - "tags_all": { - "Name": "finus-prod-backend" - }, - "timeouts": null - }, - "sensitive_attributes": [], - "identity_schema_version": 0, - "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiZGVsZXRlIjoxODAwMDAwMDAwMDAsInJlYWQiOjkwMDAwMDAwMDAwMCwidXBkYXRlIjozMDAwMDAwMDAwMDB9fQ==", - "dependencies": [ - "aws_security_group.default", - "aws_security_group.services", - "aws_subnet.prod", - "aws_vpc.finus", - "module.prod.aws_instance.backend", - "module.prod.data.aws_ami.amazon_linux" - ] - } - ] - }, - { - "module": "module.prod", - "mode": "managed", - "type": "aws_eip", - "name": "webserver", - "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", - "instances": [ - { - "schema_version": 0, - "attributes": { - "address": null, - "allocation_id": "eipalloc-06fe359af4fbd5f9b", - "arn": "arn:aws:ec2:us-east-2:177559564758:elastic-ip/eipalloc-06fe359af4fbd5f9b", - "associate_with_private_ip": null, - "association_id": "eipassoc-0ce3ab9543feb5d7f", - "carrier_ip": "", - "customer_owned_ip": "", - "customer_owned_ipv4_pool": "", - "domain": "vpc", - "id": "eipalloc-06fe359af4fbd5f9b", - "instance": "i-0f897d2768cad0033", - "ipam_pool_id": null, - "network_border_group": "us-east-2", - "network_interface": "eni-0e2de615da26dd0d9", - "private_dns": "ip-10-0-57-91.us-east-2.compute.internal", - "private_ip": "10.0.57.91", - "ptr_record": "", - "public_dns": "ec2-18-190-215-135.us-east-2.compute.amazonaws.com", - "public_ip": "18.190.215.135", - "public_ipv4_pool": "amazon", - "region": "us-east-2", - "tags": { - "Name": "finus-prod-webserver" - }, - "tags_all": { - "Name": "finus-prod-webserver" - }, - "timeouts": null - }, - "sensitive_attributes": [], - "identity_schema_version": 0, - "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiZGVsZXRlIjoxODAwMDAwMDAwMDAsInJlYWQiOjkwMDAwMDAwMDAwMCwidXBkYXRlIjozMDAwMDAwMDAwMDB9fQ==", - "dependencies": [ - "aws_security_group.default", - "aws_security_group.webserver", - "aws_subnet.prod", - "aws_vpc.finus", - "module.prod.aws_instance.webserver", - "module.prod.data.aws_ami.amazon_linux" - ] - } - ] - }, - { - "module": "module.prod", - "mode": "managed", - "type": "aws_instance", - "name": "backend", - "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", - "instances": [ - { - "schema_version": 2, - "attributes": { - "ami": "ami-0b0b78dcacbab728f", - "arn": "arn:aws:ec2:us-east-2:177559564758:instance/i-0dd805bcaa0a0ade3", - "associate_public_ip_address": true, - "availability_zone": "us-east-2c", - "capacity_reservation_specification": [ - { - "capacity_reservation_preference": "open", - "capacity_reservation_target": [] - } - ], - "cpu_options": [ - { - "amd_sev_snp": "", - "core_count": 1, - "nested_virtualization": "", - "threads_per_core": 1 - } - ], - "credit_specification": [ - { - "cpu_credits": "standard" - } - ], - "disable_api_stop": false, - "disable_api_termination": false, - "ebs_block_device": [], - "ebs_optimized": false, - "enable_primary_ipv6": null, - "enclave_options": [ - { - "enabled": false - } - ], - "ephemeral_block_device": [], - "force_destroy": false, - "get_password_data": false, - "hibernation": false, - "host_id": "", - "host_resource_group_arn": null, - "iam_instance_profile": "", - "id": "i-0dd805bcaa0a0ade3", - "instance_initiated_shutdown_behavior": "stop", - "instance_lifecycle": "", - "instance_market_options": [], - "instance_state": "running", - "instance_type": "t2.nano", - "ipv6_address_count": 0, - "ipv6_addresses": [], - "key_name": "finus-dev", - "launch_template": [], - "maintenance_options": [ - { - "auto_recovery": "default" - } - ], - "metadata_options": [ - { - "http_endpoint": "enabled", - "http_protocol_ipv6": "disabled", - "http_put_response_hop_limit": 2, - "http_tokens": "required", - "instance_metadata_tags": "disabled" - } - ], - "monitoring": false, - "network_interface": [], - "outpost_arn": "", - "password_data": "", - "placement_group": "", - "placement_group_id": "", - "placement_partition_number": 0, - "primary_network_interface": [ - { - "delete_on_termination": true, - "network_interface_id": "eni-0d9461ec08710f2d7" - } - ], - "primary_network_interface_id": "eni-0d9461ec08710f2d7", - "private_dns": "ip-10-0-50-231.us-east-2.compute.internal", - "private_dns_name_options": [ - { - "enable_resource_name_dns_a_record": false, - "enable_resource_name_dns_aaaa_record": false, - "hostname_type": "ip-name" - } - ], - "private_ip": "10.0.50.231", - "public_dns": "", - "public_ip": "3.150.23.72", - "region": "us-east-2", - "root_block_device": [ - { - "delete_on_termination": true, - "device_name": "/dev/xvda", - "encrypted": false, - "iops": 3000, - "kms_key_id": "", - "tags": {}, - "tags_all": {}, - "throughput": 125, - "volume_id": "vol-0115ad31723e63439", - "volume_size": 8, - "volume_type": "gp3" - } - ], - "secondary_network_interface": [], - "secondary_private_ips": [], - "security_groups": [], - "source_dest_check": true, - "spot_instance_request_id": "", - "subnet_id": "subnet-05e5676ab26e11acc", - "tags": { - "Name": "finus-prod-backend" - }, - "tags_all": { - "Name": "finus-prod-backend" - }, - "tenancy": "default", - "timeouts": null, - "user_data": null, - "user_data_base64": null, - "user_data_replace_on_change": false, - "volume_tags": null, - "vpc_security_group_ids": [ - "sg-0c03eb59bd6270fcf", - "sg-0e428a46b850e036a" - ] + "vpc_id": "vpc-0e13d5c774ed2b3c8" }, "sensitive_attributes": [], "identity_schema_version": 0, "identity": { "account_id": "177559564758", - "id": "i-0dd805bcaa0a0ade3", + "id": "sg-0b0da810ad840e612", "region": "us-east-2" }, - "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo2MDAwMDAwMDAwMDAsImRlbGV0ZSI6MTIwMDAwMDAwMDAwMCwicmVhZCI6OTAwMDAwMDAwMDAwLCJ1cGRhdGUiOjYwMDAwMDAwMDAwMH0sInNjaGVtYV92ZXJzaW9uIjoiMiJ9", + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo2MDAwMDAwMDAwMDAsImRlbGV0ZSI6OTAwMDAwMDAwMDAwfSwic2NoZW1hX3ZlcnNpb24iOiIxIn0=", "dependencies": [ "aws_security_group.default", "aws_security_group.services", "aws_subnet.prod", "aws_vpc.finus", + "module.prod.aws_instance.backend", "module.prod.data.aws_ami.amazon_linux" ] } ] - }, - { - "module": "module.prod", - "mode": "managed", - "type": "aws_instance", - "name": "webserver", - "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", - "instances": [ - { - "schema_version": 2, - "attributes": { - "ami": "ami-0b0b78dcacbab728f", - "arn": "arn:aws:ec2:us-east-2:177559564758:instance/i-0f897d2768cad0033", - "associate_public_ip_address": true, - "availability_zone": "us-east-2c", - "capacity_reservation_specification": [ - { - "capacity_reservation_preference": "open", - "capacity_reservation_target": [] - } - ], - "cpu_options": [ - { - "amd_sev_snp": "", - "core_count": 1, - "nested_virtualization": "", - "threads_per_core": 1 - } - ], - "credit_specification": [ - { - "cpu_credits": "standard" - } - ], - "disable_api_stop": false, - "disable_api_termination": false, - "ebs_block_device": [], - "ebs_optimized": false, - "enable_primary_ipv6": null, - "enclave_options": [ - { - "enabled": false - } - ], - "ephemeral_block_device": [], - "force_destroy": false, - "get_password_data": false, - "hibernation": false, - "host_id": "", - "host_resource_group_arn": null, - "iam_instance_profile": "", - "id": "i-0f897d2768cad0033", - "instance_initiated_shutdown_behavior": "stop", - "instance_lifecycle": "", - "instance_market_options": [], - "instance_state": "running", - "instance_type": "t2.nano", - "ipv6_address_count": 0, - "ipv6_addresses": [], - "key_name": "finus-dev", - "launch_template": [], - "maintenance_options": [ - { - "auto_recovery": "default" - } - ], - "metadata_options": [ - { - "http_endpoint": "enabled", - "http_protocol_ipv6": "disabled", - "http_put_response_hop_limit": 2, - "http_tokens": "required", - "instance_metadata_tags": "disabled" - } - ], - "monitoring": false, - "network_interface": [], - "outpost_arn": "", - "password_data": "", - "placement_group": "", - "placement_group_id": "", - "placement_partition_number": 0, - "primary_network_interface": [ - { - "delete_on_termination": true, - "network_interface_id": "eni-0e2de615da26dd0d9" - } - ], - "primary_network_interface_id": "eni-0e2de615da26dd0d9", - "private_dns": "ip-10-0-57-91.us-east-2.compute.internal", - "private_dns_name_options": [ - { - "enable_resource_name_dns_a_record": false, - "enable_resource_name_dns_aaaa_record": false, - "hostname_type": "ip-name" - } - ], - "private_ip": "10.0.57.91", - "public_dns": "", - "public_ip": "18.190.215.135", - "region": "us-east-2", - "root_block_device": [ - { - "delete_on_termination": true, - "device_name": "/dev/xvda", - "encrypted": false, - "iops": 3000, - "kms_key_id": "", - "tags": {}, - "tags_all": {}, - "throughput": 125, - "volume_id": "vol-05d61c7cb18058c36", - "volume_size": 8, - "volume_type": "gp3" - } - ], - "secondary_network_interface": [], - "secondary_private_ips": [], - "security_groups": [], - "source_dest_check": true, - "spot_instance_request_id": "", - "subnet_id": "subnet-05e5676ab26e11acc", - "tags": { - "Name": "finus-prod-webserver" - }, - "tags_all": { - "Name": "finus-prod-webserver" - }, - "tenancy": "default", - "timeouts": null, - "user_data": null, - "user_data_base64": null, - "user_data_replace_on_change": false, - "volume_tags": null, - "vpc_security_group_ids": [ - "sg-0973f01390a9d839a", - "sg-0c03eb59bd6270fcf" - ] - }, - "sensitive_attributes": [], - "identity_schema_version": 0, - "identity": { - "account_id": "177559564758", - "id": "i-0f897d2768cad0033", - "region": "us-east-2" - }, - "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo2MDAwMDAwMDAwMDAsImRlbGV0ZSI6MTIwMDAwMDAwMDAwMCwicmVhZCI6OTAwMDAwMDAwMDAwLCJ1cGRhdGUiOjYwMDAwMDAwMDAwMH0sInNjaGVtYV92ZXJzaW9uIjoiMiJ9", - "dependencies": [ - "aws_security_group.default", - "aws_security_group.webserver", - "aws_subnet.prod", - "aws_vpc.finus", - "module.prod.data.aws_ami.amazon_linux" - ] - } - ] - }, - { - "module": "module.prod", - "mode": "managed", - "type": "aws_route_table_association", - "name": "assoc", - "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", - "instances": [ - { - "schema_version": 0, - "attributes": { - "gateway_id": "", - "id": "rtbassoc-0b1e2801d2830d94c", - "region": "us-east-2", - "route_table_id": "rtb-0f24beedbed7e02a3", - "subnet_id": "subnet-05e5676ab26e11acc", - "timeouts": null - }, - "sensitive_attributes": [], - "identity_schema_version": 0, - "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjozMDAwMDAwMDAwMDAsImRlbGV0ZSI6MzAwMDAwMDAwMDAwLCJ1cGRhdGUiOjEyMDAwMDAwMDAwMH19", - "dependencies": [ - "aws_internet_gateway.default", - "aws_route_table.route_table", - "aws_subnet.prod", - "aws_vpc.finus" - ] - } - ] } ], "check_results": null