Python AWS Apprunner 服务未通过健康检查

问题描述 投票:0回答:0

Apprunner 的新手,并试图让普通 Python 应用程序成功部署,但继续未能通过 TCP 健康检查。以下是服务和 Apprunner 控制台日志的一些相关部分:

服务日志:

2023-02-18T15:20:20.856-05:00   [Build] Step 5/5 : EXPOSE 80
2023-02-18T15:20:20.856-05:00   [Build] ---> Running in abcxyz 
2023-02-18T15:20:20.856-05:00   [Build] Removing intermediate container abcxyz 
2023-02-18T15:20:20.856-05:00   [Build] ---> f3701b7ee4cf
2023-02-18T15:20:20.856-05:00   [Build] Successfully built abcxyz 
2023-02-18T15:20:20.856-05:00   [Build] Successfully tagged application-image:latest
2023-02-18T15:30:49.152-05:00   [AppRunner] Failed to deploy your application source code.

控制台:

02-18-2023 03:30:49 PM [AppRunner] Deployment with ID : 123456789 failed. Failure reason : Health check failed.
02-18-2023 03:30:38 PM [AppRunner] Health check failed on port '80'. Check your configured port number. For more information, read the application logs.
02-18-2023 03:24:21 PM [AppRunner] Performing health check on port '80'.
02-18-2023 03:24:11 PM [AppRunner] Provisioning instances and deploying image for privately accessible service.
02-18-2023 03:23:59 PM [AppRunner] Successfully built source code.

我的应用程序是一个原始的、非联网的 Python 应用程序,我在其中添加了一个 SimpleHTTPRequestHandler 运行在一个 TCPServer 上,配置为作为单独的线程运行,如下所示:

import socketserver
import threading
from http.server import SimpleHTTPRequestHandler


# handler for server
class HealthCheckHandler(SimpleHTTPRequestHandler):
    def do_GET(self) -> None:
        self.send_response(code=200)
        self.send_header("Content-Type", "text/html")
        self.end_headers()
        self.wfile.write("""<html><body>hello, client.</body><html>""".encode('utf-8'))


# runs the server
def run_healthcheck_server():
    with socketserver.TCPServer(("127.0.0.1", 80), HealthCheckHandler) as httpd:
        print(f"Fielding health check requests on: 80")
        httpd.serve_forever()


# dummy
def my_app_logic():
    while True:
        print('hello, server.')
        time.sleep(5)


# wrapper to run primary application logic AND TCPServer
def main():

    # run the server in a thread
    threading.Thread(target=run_healthcheck_server).start()

    # run my app
    my_app_logic()


if __name__ == "__main__":
    main()

这在我的本地机器上运行良好,我看到“你好,客户”。在我的浏览器中转到 127.0.0.1 并且在我的控制台中每 5 秒发送一连串 hello, server. 消息。

我对网络知之甚少,我将其合并到应用程序中的唯一原因是为了促进我无法在 AppRunner 服务中禁用的 AWS HealthCheck。我试图了解问题是我如何try 处理来自 AWS 健康检查器的 TCP 请求,还是 Apprunner 方面的其他问题。

python tcpserver amazon-app-runner
© www.soinside.com 2019 - 2024. All rights reserved.