16
votes

I'm trying to deploy a very simple Spring Boot application on AWS Elastic Beanstalk using AWS's Java configuration (not their Tomcat configuration), but I keep getting a 502 error with the following log:

2016/06/10 02:00:14 [error] 4921#0: *1 connect() failed 
(111: Connection refused) while connecting to upstream, client: 38.94.153.178,   
server: , request: "GET /test HTTP/1.1", upstream:   "http://127.0.0.1:5000/test",
host: "my-single-instance-java-app.us-east-1.elasticbeanstalk.com"

I've tried setting my port via Spring's application.properties to what the log seems to want (5000, using server.port=5000) and have verified that my application runs successfully on that port on localhost.

This question is very similar, except that I'm deploying a JAR instead of a WAR. It seems like there is something I'm missing regarding configuring Nginx, and I don't know how to proceed.

Here's my Spring Application:

@SpringBootApplication
public class MyApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }

    @RestController
    public static class MainController {

        @RequestMapping("/test")
        public String testMethod() {
            return "Method success!";
        }
    }
}
4
Can you paste your security group rules?error2007s
I'm not sure if this is what you're asking for but I have two roles: role: aws-elasticbeanstalk-ec2-role permissions: AWSElasticBeanstalkWebTier AWSElasticBeanstalkMulticontainerDocker AWSElasticBeanstalkWorkerTier role: aws-elasticbeanstalk-service-role permissions: AWSElasticBeanstalkEnhancedHealth AWSElasticBeanstalkServiceScott Storch
No this are roles I wanted the Security Group for your EC2 instances .error2007s
I'm still not quite sure if this is what you're asking for imgur.com/a/RwXgkScott Storch
Ok Add a security rule in Inbound for TCP Port 5000 "0.0.0.0/32"error2007s

4 Answers

19
votes

Nginx doesn't know on which port your spring boot applicaiton is running. Make application run on port 5000 that Nginx redirects to by default by adding "server.port=5000" to application.properties or other suggested ways in the last step:

https://pragmaticintegrator.wordpress.com/2016/07/12/run-your-spring-boot-application-on-aws-using-elastic-beanstalk/

7
votes

From your question description and the security group settings you send me your only inbound Port 80 for your EC2 instance was open to world through firewall and you were using port 5000 for your application. So using the security rule that I gave you it opened the inbound port 5000 too for your EC2 instance so your application started working without above error.

1
votes

If somebody is still getting such error, after setting server.port=5000. Here's what you can do if you got db connectivity:

  1. In configuration section of your dashboard, go to RDS section and create a remote db. Remember username, password of formed db.

  2. In Software section, add following properties:

SPRING_DATASOURCE_URL=jdbc:mysql://(your-db-url)/ebdb

SPRING_DATASOURCE_USERNAME=(username)

SPRING_DATASOURCE_PASSWORD=(password)

SPRING_JPA_HIBERNATE_DDL_AUTO=update

SPRING_JPA_DATABASE_PLATFORM=org.hibernate.dialect.MySQL5Dialect

0
votes

After reading both eb-engine.log as well nginx/error.log, the default nginx port is 5000 whereas the default port for spring-boot is 8080.

We can update our application via the elastic beanstalk CLI with the setenv cmd.

eb setenv SERVER_PORT=5000

We can update this in the code via application.properties

server.port=5000