mirror of
https://github.com/Sea-Haven-Industries/shoc-backend.git
synced 2026-10-02 10:53:23 +00:00
Add import-only dev and staging state with least-privilege HCP authentication and plan safety guards.
234 lines
5.4 KiB
HCL
234 lines
5.4 KiB
HCL
resource "aws_elastic_beanstalk_application" "api" {
|
|
name = var.eb_application_name
|
|
description = "SHOC API ${var.environment} (Terraform). Parallel to live shoc-backend during the POC."
|
|
|
|
tags = {
|
|
Name = var.eb_application_name
|
|
}
|
|
|
|
depends_on = [terraform_data.account_guard]
|
|
}
|
|
|
|
resource "aws_elastic_beanstalk_environment" "api" {
|
|
name = var.eb_environment_name
|
|
application = aws_elastic_beanstalk_application.api.name
|
|
solution_stack_name = data.aws_elastic_beanstalk_solution_stack.dotnet.name
|
|
tier = "WebServer"
|
|
cname_prefix = var.eb_environment_name
|
|
|
|
wait_for_ready_timeout = "40m"
|
|
|
|
setting {
|
|
namespace = "aws:elasticbeanstalk:environment"
|
|
name = "EnvironmentType"
|
|
value = "LoadBalanced"
|
|
}
|
|
|
|
setting {
|
|
namespace = "aws:elasticbeanstalk:environment"
|
|
name = "LoadBalancerType"
|
|
value = "application"
|
|
}
|
|
|
|
setting {
|
|
namespace = "aws:elasticbeanstalk:environment"
|
|
name = "ServiceRole"
|
|
value = data.aws_iam_role.eb_service.arn
|
|
}
|
|
|
|
setting {
|
|
namespace = "aws:ec2:vpc"
|
|
name = "VPCId"
|
|
value = var.vpc_id
|
|
}
|
|
|
|
setting {
|
|
namespace = "aws:ec2:vpc"
|
|
name = "Subnets"
|
|
value = join(",", var.private_subnet_ids)
|
|
}
|
|
|
|
setting {
|
|
namespace = "aws:ec2:vpc"
|
|
name = "ELBSubnets"
|
|
value = join(",", var.public_subnet_ids)
|
|
}
|
|
|
|
setting {
|
|
namespace = "aws:ec2:vpc"
|
|
name = "ELBScheme"
|
|
value = "public"
|
|
}
|
|
|
|
setting {
|
|
namespace = "aws:ec2:vpc"
|
|
name = "AssociatePublicIpAddress"
|
|
value = var.associate_public_ip ? "true" : "false"
|
|
}
|
|
|
|
setting {
|
|
namespace = "aws:autoscaling:launchconfiguration"
|
|
name = "IamInstanceProfile"
|
|
value = aws_iam_instance_profile.eb_ec2.name
|
|
}
|
|
|
|
setting {
|
|
namespace = "aws:autoscaling:launchconfiguration"
|
|
name = "InstanceType"
|
|
value = var.eb_instance_type
|
|
}
|
|
|
|
setting {
|
|
namespace = "aws:autoscaling:launchconfiguration"
|
|
name = "SecurityGroups"
|
|
value = aws_security_group.eb.id
|
|
}
|
|
|
|
setting {
|
|
namespace = "aws:autoscaling:launchconfiguration"
|
|
name = "DisableIMDSv1"
|
|
value = "true"
|
|
}
|
|
|
|
setting {
|
|
namespace = "aws:autoscaling:asg"
|
|
name = "MinSize"
|
|
value = "1"
|
|
}
|
|
|
|
setting {
|
|
namespace = "aws:autoscaling:asg"
|
|
name = "MaxSize"
|
|
value = "1"
|
|
}
|
|
|
|
setting {
|
|
namespace = "aws:elbv2:loadbalancer"
|
|
name = "SecurityGroups"
|
|
value = aws_security_group.alb.id
|
|
}
|
|
|
|
setting {
|
|
namespace = "aws:elbv2:loadbalancer"
|
|
name = "ManagedSecurityGroup"
|
|
value = aws_security_group.alb.id
|
|
}
|
|
|
|
setting {
|
|
namespace = "aws:elbv2:listener:443"
|
|
name = "Protocol"
|
|
value = "HTTPS"
|
|
}
|
|
|
|
setting {
|
|
namespace = "aws:elbv2:listener:443"
|
|
name = "SSLCertificateArns"
|
|
value = aws_acm_certificate_validation.api.certificate_arn
|
|
}
|
|
|
|
setting {
|
|
namespace = "aws:elbv2:listener:443"
|
|
name = "SSLPolicy"
|
|
value = "ELBSecurityPolicy-TLS13-1-2-2021-06"
|
|
}
|
|
|
|
setting {
|
|
namespace = "aws:elbv2:listener:80"
|
|
name = "Protocol"
|
|
value = "HTTP"
|
|
}
|
|
|
|
setting {
|
|
namespace = "aws:elasticbeanstalk:environment:process:default"
|
|
name = "HealthCheckPath"
|
|
value = "/swagger/v1/swagger.json"
|
|
}
|
|
|
|
setting {
|
|
namespace = "aws:elasticbeanstalk:environment:process:default"
|
|
name = "Port"
|
|
value = "80"
|
|
}
|
|
|
|
setting {
|
|
namespace = "aws:elasticbeanstalk:application:environment"
|
|
name = "ASPNETCORE_ENVIRONMENT"
|
|
value = "Production"
|
|
}
|
|
|
|
setting {
|
|
namespace = "aws:elasticbeanstalk:application:environment"
|
|
name = "ConnectionStrings__DefaultConnection"
|
|
value = local.connection_string
|
|
}
|
|
|
|
setting {
|
|
namespace = "aws:elasticbeanstalk:application:environment"
|
|
name = "JWT__Secret"
|
|
value = aws_secretsmanager_secret_version.jwt.secret_string
|
|
}
|
|
|
|
setting {
|
|
namespace = "aws:elasticbeanstalk:application:environment"
|
|
name = "SendGrid__ApiKey"
|
|
value = var.sendgrid_api_key
|
|
}
|
|
|
|
setting {
|
|
namespace = "aws:elasticbeanstalk:application:environment"
|
|
name = "WorkOrderWebhook__Enabled"
|
|
value = "true"
|
|
}
|
|
|
|
setting {
|
|
namespace = "aws:elasticbeanstalk:application:environment"
|
|
name = "WorkOrderWebhook__Region"
|
|
value = var.aws_region
|
|
}
|
|
|
|
setting {
|
|
namespace = "aws:elasticbeanstalk:application:environment"
|
|
name = "WorkOrderWebhook__SecretId"
|
|
value = aws_secretsmanager_secret.webhook.arn
|
|
}
|
|
|
|
setting {
|
|
namespace = "aws:elasticbeanstalk:application:environment"
|
|
name = "Sync__Enabled"
|
|
value = "false"
|
|
}
|
|
|
|
setting {
|
|
namespace = "aws:elasticbeanstalk:application:environment"
|
|
name = "WorkOrderReconciliation__Enabled"
|
|
value = "false"
|
|
}
|
|
|
|
setting {
|
|
namespace = "aws:elasticbeanstalk:command"
|
|
name = "DeploymentPolicy"
|
|
value = "AllAtOnce"
|
|
}
|
|
|
|
tags = {
|
|
Name = var.eb_environment_name
|
|
}
|
|
|
|
depends_on = [
|
|
aws_iam_role_policy_attachment.eb_web_tier,
|
|
aws_iam_instance_profile.eb_ec2,
|
|
aws_db_instance.poc,
|
|
]
|
|
}
|
|
|
|
resource "aws_route53_record" "api" {
|
|
zone_id = var.hosted_zone_id
|
|
name = var.domain_name
|
|
type = "A"
|
|
|
|
alias {
|
|
name = aws_elastic_beanstalk_environment.api.cname
|
|
zone_id = data.aws_elastic_beanstalk_hosted_zone.current.id
|
|
evaluate_target_health = true
|
|
}
|
|
}
|