deploy/main.tf
resource "aws_elastic_beanstalk_application" "elasticapp" {
name = terraform.workspace == "addressr-prod" || terraform.workspace == "prod" ? var.elasticapp : "${terraform.workspace}-${var.elasticapp}"
}
resource "aws_s3_bucket" "elasticapp" {
bucket = aws_elastic_beanstalk_application.elasticapp.name
}
resource "aws_s3_object" "elasticapp" {
bucket = aws_s3_bucket.elasticapp.id
key = "${var.elasticapp}-deployment-${var.elasticapp_version}.zip"
source = "${var.elasticapp}-deployment-${var.elasticapp_version}.zip"
}
resource "aws_elastic_beanstalk_application_version" "elasticapp" {
name = "${aws_elastic_beanstalk_application.elasticapp.name}-v${var.elasticapp_version}"
application = aws_elastic_beanstalk_application.elasticapp.name
bucket = aws_s3_bucket.elasticapp.id
key = aws_s3_object.elasticapp.id
}
# Create elastic beanstalk Environment
resource "aws_elastic_beanstalk_environment" "beanstalkappenv" {
name = aws_elastic_beanstalk_application.elasticapp.name
application = aws_elastic_beanstalk_application.elasticapp.name
solution_stack_name = var.solution_stack_name
tier = var.tier
version_label = aws_elastic_beanstalk_application_version.elasticapp.name
lifecycle {
create_before_destroy = true
}
setting {
namespace = "aws:elasticbeanstalk:application:environment"
name = "ADDRESSR_ACCESS_CONTROL_ALLOW_ORIGIN"
value = "*"
// These empty 'resource' values prevent updating the environment on every apply.
// See https://github.com/terraform-providers/terraform-provider-aws/issues/1471#issuecomment-522977469
resource = ""
}
setting {
namespace = "aws:elasticbeanstalk:application:environment"
name = "ADDRESSR_ACCESS_CONTROL_ALLOW_HEADERS"
value = "*"
resource = ""
}
setting {
namespace = "aws:elasticbeanstalk:application:environment"
name = "ADDRESSR_ACCESS_CONTROL_EXPOSE_HEADERS"
value = "*"
resource = ""
}
setting {
namespace = "aws:elasticbeanstalk:application:environment"
name = "ADDRESSR_ENABLE_GEO"
value = "1"
resource = ""
}
setting {
namespace = "aws:elasticbeanstalk:application:environment"
name = "DEBUG"
value = "error,api,express:*,swagger-tools*,test,es"
resource = ""
}
setting {
namespace = "aws:elasticbeanstalk:application:environment"
name = "ELASTIC_HOST"
value = var.elastic_host
resource = ""
}
setting {
namespace = "aws:elasticbeanstalk:application:environment"
name = "ELASTIC_PASSWORD"
value = var.elastic_password
resource = ""
}
setting {
namespace = "aws:elasticbeanstalk:application:environment"
name = "ELASTIC_PORT"
value = "443"
resource = ""
}
setting {
namespace = "aws:elasticbeanstalk:application:environment"
name = "ELASTIC_PROTOCOL"
value = "https"
resource = ""
}
setting {
namespace = "aws:elasticbeanstalk:application:environment"
name = "ELASTIC_USERNAME"
value = var.elastic_username
resource = ""
}
setting {
namespace = "aws:elasticbeanstalk:application:environment"
name = "NODE_ENV"
value = "production"
resource = ""
}
setting {
namespace = "aws:elasticbeanstalk:monitoring"
name = "Automatically Terminate Unhealthy Instances"
value = "true"
resource = ""
}
setting {
namespace = "aws:autoscaling:asg"
name = "Availability Zones"
value = "Any 2"
resource = ""
}
setting {
namespace = "aws:elasticbeanstalk:command"
name = "BatchSize"
value = "100"
resource = ""
}
setting {
namespace = "aws:elasticbeanstalk:command"
name = "BatchSizeType"
value = "Percentage"
resource = ""
}
setting {
namespace = "aws:autoscaling:trigger"
name = "BreachDuration"
value = "5"
resource = ""
}
setting {
namespace = "aws:elb:policies"
name = "ConnectionDrainingEnabled"
value = "true"
resource = ""
}
setting {
namespace = "aws:elb:policies"
name = "ConnectionDrainingTimeout"
value = "10"
resource = ""
}
setting {
namespace = "aws:elb:policies"
name = "ConnectionSettingIdleTimeout"
value = "60"
resource = ""
}
setting {
namespace = "aws:autoscaling:asg"
name = "Cooldown"
value = "360"
resource = ""
}
setting {
namespace = "aws:elb:loadbalancer"
name = "CrossZone"
value = "true"
resource = ""
}
setting {
namespace = "aws:autoscaling:asg"
name = "Custom Availability Zones"
value = "ap-southeast-2b,ap-southeast-2a,ap-southeast-2c"
resource = ""
}
setting {
namespace = "aws:elasticbeanstalk:control"
name = "DefaultSSHPort"
value = "22"
resource = ""
}
setting {
namespace = "aws:elasticbeanstalk:cloudwatch:logs"
name = "DeleteOnTerminate"
value = "false"
resource = ""
}
setting {
namespace = "aws:elasticbeanstalk:cloudwatch:logs:health"
name = "DeleteOnTerminate"
value = "false"
resource = ""
}
setting {
namespace = "aws:elasticbeanstalk:command"
name = "DeploymentPolicy"
value = "AllAtOnce"
resource = ""
}
setting {
namespace = "aws:ec2:vpc"
name = "ELBScheme"
value = "public"
resource = ""
}
setting {
namespace = "aws:autoscaling:asg"
name = "EnableCapacityRebalancing"
value = "true"
resource = ""
}
setting {
namespace = "aws:ec2:instances"
name = "EnableSpot"
value = "true"
resource = ""
}
setting {
namespace = "aws:elasticbeanstalk:healthreporting:system"
name = "EnhancedHealthAuthEnabled"
value = "false"
resource = ""
}
setting {
namespace = "aws:elasticbeanstalk:environment"
name = "EnvironmentType"
value = "LoadBalanced"
resource = ""
}
setting {
namespace = "aws:autoscaling:trigger"
name = "EvaluationPeriods"
value = "1"
resource = ""
}
setting {
namespace = "aws:elasticbeanstalk:healthreporting:system"
name = "HealthCheckSuccessThreshold"
value = "Ok"
resource = ""
}
setting {
namespace = "aws:elasticbeanstalk:cloudwatch:logs:health"
name = "HealthStreamingEnabled"
value = "true"
resource = ""
}
setting {
namespace = "aws:elb:healthcheck"
name = "HealthyThreshold"
value = "2"
resource = ""
}
setting {
namespace = "aws:autoscaling:launchconfiguration"
name = "IamInstanceProfile"
value = "aws-elasticbeanstalk-ec2-role"
resource = ""
}
setting {
namespace = "aws:elasticbeanstalk:command"
name = "IgnoreHealthCheck"
value = "false"
resource = ""
}
setting {
namespace = "aws:cloudformation:template:parameter"
name = "InstancePort"
value = "80"
resource = ""
}
setting {
namespace = "aws:elb:listener:80"
name = "InstancePort"
value = "80"
resource = ""
}
setting {
namespace = "aws:elb:listener:80"
name = "InstanceProtocol"
value = "HTTP"
resource = ""
}
setting {
namespace = "aws:elasticbeanstalk:managedactions:platformupdate"
name = "InstanceRefreshEnabled"
value = "false"
resource = ""
}
setting {
namespace = "aws:autoscaling:launchconfiguration"
name = "InstanceType"
value = "t2.nano"
resource = ""
}
setting {
namespace = "aws:cloudformation:template:parameter"
name = "InstanceTypeFamily"
value = "t2"
resource = ""
}
setting {
namespace = "aws:ec2:instances"
name = "InstanceTypes"
value = "t2.nano, t3.nano"
resource = ""
}
setting {
namespace = "aws:elb:healthcheck"
name = "Interval"
value = "10"
resource = ""
}
setting {
namespace = "aws:elasticbeanstalk:control"
name = "LaunchTimeout"
value = "0"
resource = ""
}
setting {
namespace = "aws:elasticbeanstalk:control"
name = "LaunchType"
value = "Migration"
resource = ""
}
setting {
namespace = "aws:elb:listener:80"
name = "ListenerEnabled"
value = "true"
resource = ""
}
setting {
namespace = "aws:elb:listener:80"
name = "ListenerProtocol"
value = "HTTP"
resource = ""
}
setting {
namespace = "aws:elb:loadbalancer"
name = "LoadBalancerHTTPPort"
value = "OFF"
resource = ""
}
setting {
namespace = "aws:elb:loadbalancer"
name = "LoadBalancerHTTPSPort"
value = "OFF"
resource = ""
}
setting {
namespace = "aws:elb:loadbalancer"
name = "LoadBalancerPortProtocol"
value = "HTTP"
resource = ""
}
setting {
namespace = "aws:elb:loadbalancer"
name = "LoadBalancerSSLPortProtocol"
value = "HTTPS"
resource = ""
}
setting {
namespace = "aws:elasticbeanstalk:environment"
name = "LoadBalancerType"
value = "classic"
resource = ""
}
setting {
namespace = "aws:elasticbeanstalk:hostmanager"
name = "LogPublicationControl"
value = "false"
resource = ""
}
setting {
namespace = "aws:autoscaling:trigger"
name = "LowerBreachScaleIncrement"
value = "-1"
resource = ""
}
setting {
namespace = "aws:autoscaling:trigger"
name = "LowerThreshold"
value = "2000000"
resource = ""
}
setting {
namespace = "aws:autoscaling:updatepolicy:rollingupdate"
name = "MaxBatchSize"
value = "1"
resource = ""
}
setting {
namespace = "aws:autoscaling:asg"
name = "MaxSize"
value = "4"
resource = ""
}
setting {
namespace = "aws:autoscaling:trigger"
name = "MeasureName"
value = "NetworkOut"
resource = ""
}
setting {
namespace = "aws:autoscaling:updatepolicy:rollingupdate"
name = "MinInstancesInService"
value = "2"
resource = ""
}
setting {
namespace = "aws:autoscaling:asg"
name = "MinSize"
value = "2"
resource = ""
}
setting {
namespace = "aws:autoscaling:launchconfiguration"
name = "MonitoringInterval"
value = "5 minute"
resource = ""
}
setting {
namespace = "aws:autoscaling:trigger"
name = "Period"
value = "5"
resource = ""
}
setting {
namespace = "aws:elasticbeanstalk:managedactions"
name = "PreferredStartTime"
value = "Thu:08:00"
resource = ""
}
setting {
namespace = "aws:elasticbeanstalk:environment:proxy"
name = "ProxyServer"
value = "nginx"
resource = ""
}
setting {
namespace = "aws:elasticbeanstalk:cloudwatch:logs"
name = "RetentionInDays"
value = "7"
resource = ""
}
setting {
namespace = "aws:elasticbeanstalk:cloudwatch:logs:health"
name = "RetentionInDays"
value = "7"
resource = ""
}
setting {
namespace = "aws:elasticbeanstalk:control"
name = "RollbackLaunchOnFailure"
value = "false"
resource = ""
}
setting {
namespace = "aws:autoscaling:updatepolicy:rollingupdate"
name = "RollingUpdateEnabled"
value = "true"
resource = ""
}
setting {
namespace = "aws:autoscaling:updatepolicy:rollingupdate"
name = "RollingUpdateType"
value = "Health"
resource = ""
}
setting {
namespace = "aws:autoscaling:launchconfiguration"
name = "SSHSourceRestriction"
value = "tcp,22,22,0.0.0.0/0"
resource = ""
}
setting {
namespace = "aws:ec2:instances"
name = "SpotFleetOnDemandAboveBasePercentage"
value = "0"
resource = ""
}
setting {
namespace = "aws:ec2:instances"
name = "SpotFleetOnDemandBase"
value = "0"
resource = ""
}
setting {
namespace = "aws:autoscaling:trigger"
name = "Statistic"
value = "Average"
resource = ""
}
setting {
namespace = "aws:elasticbeanstalk:cloudwatch:logs"
name = "StreamLogs"
value = "false"
resource = ""
}
setting {
namespace = "aws:ec2:instances"
name = "SupportedArchitectures"
value = "x86_64"
resource = ""
}
setting {
namespace = "aws:elasticbeanstalk:healthreporting:system"
name = "SystemType"
value = "enhanced"
resource = ""
}
setting {
namespace = "aws:elb:healthcheck"
name = "Target"
value = "HTTP:80/"
resource = ""
}
setting {
namespace = "aws:autoscaling:updatepolicy:rollingupdate"
name = "Timeout"
value = "PT30M"
resource = ""
}
setting {
namespace = "aws:elasticbeanstalk:command"
name = "Timeout"
value = "600"
resource = ""
}
setting {
namespace = "aws:elb:healthcheck"
name = "Timeout"
value = "5"
resource = ""
}
setting {
namespace = "aws:elb:healthcheck"
name = "UnhealthyThreshold"
value = "5"
resource = ""
}
setting {
namespace = "aws:autoscaling:trigger"
name = "Unit"
value = "Bytes"
resource = ""
}
setting {
namespace = "aws:elasticbeanstalk:managedactions:platformupdate"
name = "UpdateLevel"
value = "minor"
resource = ""
}
setting {
namespace = "aws:autoscaling:trigger"
name = "UpperBreachScaleIncrement"
value = "1"
resource = ""
}
setting {
namespace = "aws:autoscaling:trigger"
name = "UpperThreshold"
value = "6000000"
resource = ""
}
setting {
namespace = "aws:elasticbeanstalk:xray"
name = "XRayEnabled"
value = "false"
resource = ""
}
}