Tengo un servidor web Python Flask ejecutándose dentro de un contenedor acoplable que se ejecuta en una máquina AWS EC2 Ubuntu. El contenedor se ejecuta en una configuración de red predeterminada (docker0). Dentro del host EC2, puedo enviar solicitudes (Obtener, Publicar) a este servidor web utilizando la ip de la máquina docker (172.xxx) y los puertos reenviados (3000: 3000) del host.
url: http:// 172.xxx:3000 / <api address>¿Cómo puedo enviar solicitudes (GET, POST) a este servidor web desde el mundo exterior? Por ejemplo, desde otro servidor web que se ejecuta en otra máquina EC2. ¿O incluso desde la web usando mi navegador web?
Si tiene una solución, explíquela con tantos detalles como pueda para que la entienda.
¿La única forma que se me ocurre es escribir un servidor web en el EC2 principal que escuche las solicitudes y las reenvíe a los servidores web de contenedores acoplables apropiados? ¡Pero eso sería demasiados códigos redundantes y preferiría solicitar directamente al servidor web que se ejecuta en el contenedor!
La dirección IP de la ventana acoplable no es pública. Sin embargo, su instancia EC2 generalmente tiene una dirección IP pública. Necesita un agente escuchando en un puerto en su instancia EC2 y pasándolo a su servidor docker/Flask. Entonces podrá llamarlo desde el exterior usando ec2-instance-ip:agent-port.
Todavía no es una solución a largo plazo, ya que las IP de EC2 cambian cuando se detienen. Será mejor que use un equilibrador de carga o una IP elástica si desea que la ip/puerto sea confiable.
Así es, genera mucho código redundante y un punto de falla adicional. Por eso es mejor usar el servicio docker administrado de Amazon ( https://aws.amazon.com/ecs/ ). De esta manera, solo inicia una instancia EC2 que es una ventana acoplable y tiene una dirección IP pública. Todavía le permite usar SSH en su instancia EC2 y cambiar cosas.