Python Thrift RPC Не работает на EC2 - PullRequest
1 голос
/ 20 сентября 2011

Я пытаюсь создать простое клиент-серверное приложение с использованием Thrift, которое будет работать на EC2.

Пример, который я создал, отлично работает для localhost, но когда я пытаюсь выполнить вызов RPC на двух разных машинах на ec2 (обе из которых раздельно указали эластичные IP-адреса), он не работает со следующей ошибкой:

raceback (most recent call last):
  File "SocialQClient.py", line 25, in <module>
    transport.open()
  File "/usr/local/lib/python2.6/dist-packages/thrift/transport/TTransport.py", line 150, in open
    return self.__trans.open()
  File "/usr/local/lib/python2.6/dist-packages/thrift/transport/TSocket.py", line 90, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=message)
thrift.transport.TTransport.TTransportException: Could not connect to <MY-ELASTIC-IP>:9090

Моя группа безопасности настроена на 0.0.0.0/0 для порта 9090 на обеих машинах для TCP. Я пробовал UDP также, и это не исправило это. Что я делаю не так?

Обновление:

1 Ответ

4 голосов
/ 20 сентября 2011

Я рискну предположить, что когда один из ваших экземпляров ec2 ("node1") пытается выполнить вызов RPC к другому экземпляру ec2 ("node2"), node2 возвращает свой внутренний IP-адрес.

Ссылка- http://alestic.com/2009/06/ec2-elastic-ip-internal

Цитата:

Этот последний вариант использует малоизвестную функцию системы Elastic IP Address, реализованную Amazon EC2:

КогдаЭкземпляр EC2 запрашивает внешнее DNS-имя Elastic IP, DNS-сервер EC2 возвращает внутренний IP-адрес экземпляра, которому в настоящее время назначен Elastic IP-адрес.

А вот несколько примеров, иллюстрирующих, какdig возвращает разные значения, сравнивая сценарий, в котором вы используете машину вне Amazon для проверки связи с экземпляром ec2, и когда вы используете экземпляр ec2 для проверки связи с другим экземпляром ec2: -

Это постоянный внешнийDNS-имя для этого Elastic IP-адреса, независимо от того, сколько раз вы меняете экземпляр, которому он назначен.Если вы запрашиваете это DNS-имя из-за пределов EC2, оно преобразуется во внешний IP-адрес, как показано выше:

$ dig +short ec2-75-101-137-243.compute-1.amazonaws.com
75.101.137.243

Однако, если вы запрашиваете это DNS-имя из EC2экземпляр, он будет преобразован во внутренний IP-адрес для экземпляра, которому он назначен в данный момент:

$ dig +short ec2-75-101-137-243.compute-1.amazonaws.com
10.254.171.132
...