diff --git a/docker-compose.yml b/docker-compose.yml index d2872a3..d703006 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,39 +1,37 @@ version: '3.7' services: - # api: - # image: tech-challenge:latest - # container_name: app - # build: - # context: . - # dockerfile: Dockerfile - # depends_on: - # - db - # environment: - # - DB_ENDPOINT=db:5432 - # - DB_NAME=selforder - # - DB_USERNAME=selforder - # - DB_PASSWORD=self@Order123! - # - ADMIN_ACCESS_TOKEN=token - # - MOCK_PAYMENT_PROVIDER=true - # - MP_TOKEN=token - # - MP_USER_ID=userId - # - MP_POS_ID=postId - # - MP_WEBHOOK_BASE_URL=webhookBaseUrl - # ports: - # - "8080:8080" - # restart: always - - payment_db: - image: amazon/dynamodb-local:latest + stock_api: + image: fiap-3soat-g15-stock-api:latest + container_name: stock_api + build: + context: . + dockerfile: Dockerfile + depends_on: + - stock_db + environment: + - DB_ENDPOINT=stock_db:5432 + - DB_NAME=selforder + - DB_USERNAME=selforder + - DB_PASSWORD=self@Order123! + - ADMIN_ACCESS_TOKEN=token ports: - - "54000:8000" + - "8080:8080" + restart: always + + stock_db: + image: postgres:15.4 + container_name: stock_db + volumes: + - db:/var/lib/postgresql/data environment: - AWS_ACCESS_KEY_ID: "fakekey" - AWS_SECRET_ACCESS_KEY: "fakeaccesskey" - AWS_REGION: us-east-1 - command: ["-D\"java.library.path\"=./DynamoDBLocal_lib", "-jar", "DynamoDBLocal.jar", "-inMemory", "-sharedDb"] + - POSTGRES_DB=selforder + - POSTGRES_USER=selforder + - POSTGRES_PASSWORD=self@Order123! + ports: + - "5432:5432" + restart: always volumes: - db: + stock_db: driver: local diff --git a/src/main/resources/application-openapi.yml b/src/main/resources/application-openapi.yml index 2cf281a..68edf9b 100644 --- a/src/main/resources/application-openapi.yml +++ b/src/main/resources/application-openapi.yml @@ -1,4 +1 @@ spring: - -payment-provider: - mock: true diff --git a/src/main/resources/application-test.yml b/src/main/resources/application-test.yml index 89b6211..527cf7c 100644 --- a/src/main/resources/application-test.yml +++ b/src/main/resources/application-test.yml @@ -1,5 +1,2 @@ admin: access-token: token - -payment-provider: - mock: true diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 4e48ff2..9f0bc7a 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,6 +1,6 @@ spring: application: - name: payments + name: stock security: oauth2: resourceserver: @@ -10,24 +10,3 @@ spring: admin: access-token: ${ADMIN_ACCESS_TOKEN} - -payment-provider: - mock: ${MOCK_PAYMENT_PROVIDER} - -mercadopago: - api: - url: https://api.mercadopago.com - token: ${MP_TOKEN} - userId: ${MP_USER_ID} - integration: - posId: ${MP_POS_ID} - webhookBaseUrl: ${MP_WEBHOOK_BASE_URL} - -amazon: - dynamodb: - endpoint: http://localhost:54000 - aws: - accessKey: fakekey - secretKey: fakeaccesskey - region: us-east-2 - diff --git a/terraform/outputs.tf b/terraform/outputs.tf new file mode 100644 index 0000000..8d49c66 --- /dev/null +++ b/terraform/outputs.tf @@ -0,0 +1,19 @@ +output "db_instance_master_user_secret_arn" { + description = "The ARN of the master user secret (Only available when manage_master_user_password is set to true)" + value = module.db.db_instance_master_user_secret_arn +} + +output "rds_ssm_parameter_name" { + description = "The name of the SSM parameter for RDS parameters" + value = module.rds_params.ssm_parameter_name +} + +output "rds_secrets_read_only_policy_arn" { + description = "The ARN of the RDS secrets" + value = aws_iam_policy.rds_secrets_read_only_policy.arn +} + +output "rds_params_read_only_policy_arn" { + description = "The ARN of the RDS params" + value = aws_iam_policy.rds_params_read_only_policy.arn +} diff --git a/terraform/providers.tf b/terraform/providers.tf index 94460de..34d379c 100644 --- a/terraform/providers.tf +++ b/terraform/providers.tf @@ -2,7 +2,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "~> 5.0.0" + version = ">= 5.36.0" } } diff --git a/terraform/rds.tf b/terraform/rds.tf new file mode 100644 index 0000000..508740b --- /dev/null +++ b/terraform/rds.tf @@ -0,0 +1,112 @@ +locals { + name = "stock-db" + username = "master" + port = 5432 +} + +data "terraform_remote_state" "tech-challenge" { + backend = "s3" + + config = { + bucket = "fiap-3soat-g15-iac-tech-challenge" + key = "live/terraform.tfstate" + region = var.region + } +} + +module "db" { + source = "terraform-aws-modules/rds/aws" + version = "6.5.2" + + identifier = local.name + + engine = "postgres" + engine_version = "15" + family = "postgres15" + major_engine_version = "15" + instance_class = "db.t3.micro" + + allocated_storage = 10 + max_allocated_storage = 20 + + storage_encrypted = false + + db_name = local.name + username = local.username + port = local.port + + manage_master_user_password = true + + multi_az = false + db_subnet_group_name = data.terraform_remote_state.tech-challenge.outputs.database_subnet_group_name + vpc_security_group_ids = [module.security_group.security_group_id] + + backup_retention_period = 0 + skip_final_snapshot = true + deletion_protection = false +} + +module "security_group" { + source = "terraform-aws-modules/security-group/aws" + version = "~> 5.0" + + name = local.name + vpc_id = data.terraform_remote_state.tech-challenge.outputs.vpc_id + + ingress_with_cidr_blocks = [ + { + from_port = local.port + to_port = local.port + protocol = "tcp" + cidr_blocks = data.terraform_remote_state.tech-challenge.outputs.vpc_cidr_block + }, + ] +} + +module "rds_params" { + source = "terraform-aws-modules/ssm-parameter/aws" + name = "/live/stock/db" + type = "String" + + value = jsonencode({ + name : local.name, + endpoint : module.db.db_instance_endpoint, + port : local.port + }) +} + +resource "aws_iam_policy" "rds_secrets_read_only_policy" { + name = "StockRDSSecretsReadOnlyPolicy" + + policy = jsonencode({ + Version = "2012-10-17" + Statement = [ + { + Effect = "Allow" + Action = [ + "secretsmanager:DescribeSecret", + "secretsmanager:GetSecretValue" + ], + Resource = module.db.db_instance_master_user_secret_arn + } + ] + }) +} + +resource "aws_iam_policy" "rds_params_read_only_policy" { + name = "StockRDSParamsReadOnlyPolicy" + + policy = jsonencode({ + Version = "2012-10-17" + Statement = [ + { + Effect = "Allow" + Action = [ + "ssm:GetParameter", + "ssm:GetParameters" + ], + Resource = module.rds_params.ssm_parameter_arn + } + ] + }) +}