Hello. I am new to EC2. I am trying to make fastapi requests to my EC2 instance from an external ip address (my VM). I started a python docker container on my EC2 instance sudo docker run --name <container_name> -p 5000:5000 -itd python:latest bash
. Then inside that container I ran the following script:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
return "Connection successful and operates on port 5000"
I then run this script with uvicorn main:app --port 5000
in the terminal of the container.
When I try to make an api request from inside the terminal of the container using requests.get('http://localhost:5000')
I received the response I expect ("Connection successful and operates on port 5000").
But when I try to make the same request from my VM (external ip), using requests.get('http://3.17.184.122:5000')
I always get the error
raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPConnectionPool(host='3.17.184.122', port=5000): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f94332f45e0>: Failed to establish a new connection: [Errno 111] Connection refused'))
I tried to add an inbound rule on the defaul security group to allow tcp access on port 5000, which did not help. I also tried to allow access from all traffic, which also did not help.
Please advise as far as what I am missing. Thank you.
Thank you @s4zed. I was testing to make api calls from EC2 to my VM. Specifying the
--host
allowed me to make requests from EC2 to my VM. However, making calls from VM to EC2 still throws the same error. There is an image of my security configurations posted at the Stackoverflow question (same questions as here): https://stackoverflow.com/questions/75966975/how-to-open-port-on-ec2-to-allow-api-requests-from-external-ips?noredirect=1#comment133986810_75966975