Эластичный IP-адрес существует за NAT 1: 1, поэтому вам необходимо привязать локальный IP-адрес, за которым находится экземпляр.Вы можете попросить хранилище метаданных получить публичные / локальные IP-адреса для каждого сетевого адаптера.
В большинстве случаев это довольно просто:
import requests
import socket
metadata = "http://169.254.169.254/latest/meta-data/network/interfaces/macs/"
for mac_id in requests.get(metadata).text.split("\n"):
local_ip = requests.get(metadata + mac_id + "local-ipv4s").text
public_ip = requests.get(metadata + mac_id + "public-ipv4s").text
print("{} has local IP of {} and public IP of {}".format(mac_id, local_ip, public_ip))
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind((local_ip, 1234))