如何将AWS Network Load Balancer与自定义python服务器一起使用

时间:2020-04-08 13:15:27

标签: python amazon-web-services sockets amazon-ec2 amazon-elb

我正在尝试在AWS上设置python服务器。 我想通过弹性负载平衡器访问此服务器。但是,我在解决问题时遇到了一些困难。 到目前为止,我已采取的步骤如下。

我创建了一个新的EC2实例,将其ssh-ed并创建了服务器并启动了它。

该服务器的代码如下:

import socket
HOST = '127.0.0.1'
PORT = 3002 

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind((HOST, PORT))
    s.listen()
    conn, addr = s.accept()
    print("listening")
    with conn:
        print('Connected by', addr)
        while True:
            data = conn.recv(1024)
            if not data:
                break
            conn.sendall(data)

然后,我创建了一个新的目标组并将该ec2实例注册到该目标组。将目标组设置为与服务器(3002)相同的端口。

接下来,我创建了一个网络负载平衡器。此负载平衡器在端口3002上设置了一个侦听器,该规则将转发到我已设置的目标组。

最后,我在计算机上使用python创建了本地客户端以与服务器进行通信。

该客户端的代码如下:

HOST = DNS name for load-balancer
PORT = 3002

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect((HOST, PORT))
    s.sendall(b'Hello, world')
    data = s.recv(1024)

print('Received', repr(data))

我的想法是客户端将连接到端口3002上的负载均衡器。在该端口上具有侦听器的负载均衡器将转发到目标组,该目标组也使用端口3002。因此,ec2实例将在此端口上接收连接并能够处理它。但是,什么也没收到,连接超时。

安全组被配置为允许所有端口上的所有TCP流量被允许(暂时,在我尝试弄清楚这一点时)

此外,这只是我尝试学习如何使用负载平衡器并从客户端连接的方法。我不打算在更大的项目中使用它:)对我的想法出错的任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:3)

您的Python应用仅监听来自本地主机的连接。更改此:

HOST = '127.0.0.1'

对此:

HOST = '0.0.0.0'