【问题标题】:@GetMapping("/") does not work in Elastic Beanstalk but works locally@GetMapping("/") 在 Elastic Beanstalk 中不起作用,但在本地起作用
【发布时间】:2021-12-21 13:41:25
【问题描述】:

我的 Elastic Beanstalk 环境的运行状况为 severe。我相信这是因为我没有处理健康检查。这可以在我的日志中看到:

/var/log/nginx/access.log
----------------------------------------
172.31.75.161 - - [08/Nov/2021:13:21:41 +0000] "GET / HTTP/1.1" 404 116 "-" "ELB-HealthChecker/2.0" "-"
172.31.75.161 - - [08/Nov/2021:13:21:41 +0000] "GET / HTTP/1.1" 404 116 "-" "ELB-HealthChecker/2.0" "-"
...

43 connect() failed (111: Connection refused) while connecting to upstream, client: 172.XX.XX.XX, server: , request: "GET / HTTP/1.1", upstream: "http://172.XX.XX.XX:8080/"

这是我的 Docker 文件:

# Build stage 
# 
FROM maven:3.8.1-jdk-8 
ADD src /tmp/src
ADD pom.xml /tmp/pom.xml
RUN mvn -f /tmp/pom.xml clean package

#
# Package stage
#
FROM openjdk:8
COPY --from=0 /tmp/target/para-host-0.0.1-SNAPSHOT.jar /usr/local/lib/para.jar
EXPOSE 5000
ENTRYPOINT ["java","-jar","/usr/local/lib/para.jar"]

所以我的 Spring Boot 应用程序在端口 5000 上运行。这可以在本地和 Elastic Beanstalk 中运行。

到目前为止我所尝试的 我曾尝试使用此依赖项添加运行状况检查功能:

        <dependency>
            <groupId>
                org.springframework.boot
            </groupId>
            <artifactId>
                spring-boot-starter-actuator
            </artifactId>
        </dependency>

之后,我能够在本地运行服务器并像这样访问端点: http://localhost:5000/actuator/health 得到回复:

{
    "status": "UP"
}

(这甚至是状态码吗?)

这是坏掉的地方 在我的 Elastic Beanstalk 环境中的负载均衡器中,它说我的运行状况检查路径是 /。如果我将该值编辑为/actuator/health/,那么它会简单地恢复为/。我已经尝试了很多次,甚至尝试删除它并创建一个新的。没有。所以我放弃了。相反,我想,我只会让路径 / 返回运行状况检查的状态代码。

所以我做了这个:

    @GetMapping("/")
    public ResponseEntity<String> dummyMethod() {
        return new ResponseEntity<>("Hello from Dummy-Root-Method", HttpStatus.OK);
    }

认为现在当健康检查被调用时,它会成功,但这也不起作用。如果我在本地运行服务器,我可以访问/ 端点,但是当它在 Elastic Beanstalk 中时,它会认为路径不存在。但是,我的其他端点 DO 工作。这是工作端点(getGroupResults)和非工作端点(dummyMethod)的sn-p:

    @GetMapping("/get-group-results")
    public ResponseEntity<String> getGroupResults(@RequestBody ObjectNode objectNode)
            throws IOException, AddressException, MessagingException {
        String groupFolder = objectNode.get("group").asText();
        String sendToEmail = objectNode.get("email").asText();
        logger.info("Attempting to get results from folder: {}", groupFolder);
        String attachmentPath = Test.getMapFromGroupFolder(groupFolder).getAbsolutePath();
        String subject = "Results from parallenium";
        MailService.sendEmailWithAttachment(sendToEmail, attachmentPath, subject);
        return new ResponseEntity<>("Successfully sent results email", HttpStatus.OK);
    }

    /**
     * Dummy response for ELB so we do not receive errors
     * 
     * @return
     */
    @GetMapping("/")
    public ResponseEntity<String> dummyMethod() {
        return new ResponseEntity<>("Hello from Dummy-Root-Method", HttpStatus.OK);
    }

这是我在尝试访问 Elastic Beanstalk 中的 /actuator/health/ 端点时得到的响应,就像 http://para-server.us-east-1.elasticbeanstalk.com/actuator/health 一样使用:

{
    "timestamp": "2021-11-08T16:56:20.785+00:00",
    "status": 404,
    "error": "Not Found",
    "path": "/"
}

同样,这在本地有效。为什么?

总结。我能做什么?

  1. 为什么我不能在 Elastic Beanstalk 控制台中更改运行状况检查的路径?
  2. 为什么根路径 / 可以在本地工作,但不能在我的 Elastic Beanstalk 环境中工作?

我只是希望我的环境不显示为红色。它工作正常,但有健康检查错误。

【问题讨论】:

    标签: java amazon-web-services spring-boot nginx amazon-elastic-beanstalk


    【解决方案1】:

    确认 Beanstalk 正在运行您的代码的最新版本。可能仍在使用在您添加新映射之前启动的容器。

    【讨论】:

    • 最简单的确定方法是什么?
    • 一件事是使用“上传和部署”按钮重新部署。它还可能取决于您如何将图像提供给 beanstalk,无论是来自 Dockerfile 还是像 Dockerhub 这样的存储库。如果您有 CI/CD 管道设置,这当然应该是自动化的。
    • 我目前使用弹性 beanstalk cli 并使用deploy 命令
    • 只要重新部署所有更改就可以了。可以尝试 GUI 中的 Restart app server(s) 选项。健康检查找不到简单的 GET 映射的事实让我认为它可能是一个过时的容器。
    • 我同意。我重新启动,仍然找不到该路径
    【解决方案2】:

    问题在于,即使我通过 EBS CLI 部署新版本,它实际上并没有部署我的最新更改。如果您在项目中设置了 git,那么它只会部署最后一次提交。所以我必须提交我的更改,然后重新部署它并开始工作。

    【讨论】:

      猜你喜欢
      • 2013-03-17
      • 1970-01-01
      • 2016-02-22
      • 2016-08-02
      • 2018-04-21
      • 2016-04-17
      • 1970-01-01
      • 1970-01-01
      • 2021-02-05
      相关资源
      最近更新 更多