Ok, então eu tenho um aplicativo de pé de feijão elástico com uma camada da Web escalável, servido por trás de um ELB. Para encurtar a história, preciso ser capaz de inscrever uma instância específica em minha camada da Web para um tópico do SNS. É seguro para mim usar um método padrão para obter o endereço IP da instância (conforme detalhado em python aqui Como posso obter o endereço IP de eth0 em Python?) E simplesmente assinar um tópico SNS usando esse ip como um assinante http ?
Por quê? Boa pergunta...
Meu modelo de dados é composto de muitos objetos, muitos dos quais podem ter um conjunto anexado de usuários que podem querer observar esses objetos. Essa camada da web em meu aplicativo é responsável por manipular a interface de soquete (usando socket.io) para aplicativos cliente.
Quando um usuário é criado no sistema, também é criado um tópico SNS para o usuário, permitindo que notificações sejam enviadas para esse usuário quando um objeto em que está interessado é alterado. Da maneira que estou planejando configurar isso, um aplicativo cliente se conectará ao EB via socket.io, ponto em que a instância do servidor à qual ele se conectou se inscreverá no tópico SNS desse usuário. Então, quando um objeto interessante mudar, as notificações serão postadas nos tópicos do usuário associado, notificando assim a instância do servidor com a qual o aplicativo cliente tem uma conexão aberta, que pode enviar uma mensagem pelo soquete.
Acredito que seja importante que a instância específica seja inscrita em vez do CNAME ou ip externo da camada da web, pois o aplicativo cliente está conectado a uma instância específica e, portanto, apenas essa instância pode enviar mensagens por meio de seu soquete. Assinar o balanceador de carga não seria bom, pois a notificação pode ser entregue a uma instância à qual o usuário não está conectado.
Acredito que a pergunta no topo é tudo de que preciso, mas estou aberto a soluções criativas se meu raciocínio parecer falho?
Essa arquitetura não é adequada para o seu caso de uso.
Em vez disso, tente: