ExAws: HTTP ERROR: :nxdomain for URL:

I’m using ExAws in my phoenix liveview project to call my S3 bucket. I tried running this code ExAws.S3.get_object("<bucketname>", "<objectkey>") |> ExAws.request!(region: "ap-southeast-1") in my iex getting this error:

ExAws: HTTP ERROR: :nxdomain for URL:

However, I know the URL is correct because I can put it into my browser to gain access to it. (Yes I set my bucket to public just to see if that was what’s blocking my request)

Here’s my config inside of config.exs:

# AWS
config :ex_aws,
  debug_requests: true,
  json_codec: Jason,
  access_key_id: {:system, "AWS_ACCESS_KEY_ID"},
  secret_access_key: {:system, "AWS_SECRET_ACCESS_KEY"}

Here’s my deps:

{:ex_aws, "~> 2.1"},
{:ex_aws_s3, "~> 2.0"},
{:hackney, "~> 1.9"},
{:sweet_xml, "~> 0.6"},
{:jason, "~> 1.2"},

My aws access key and secret access key are stored in the .env file in the root directory (side note: i dont know how to verify if the config is reading the .env variables correctly. I’m using dotenv to read fyi)

Can anyone please help provide me some guidance? :pray:

Here is not enough information to give any conclusion, just advice.

You can stub :http_client in :ex_aws config with your own implementation and get the idea about the exact request being made.

Try to replicate the request not in the browser, but in the iex console.

Thank you for your reply. I thought the point of using ExAws’s implementation is so I do not need to dive deep into understanding all the headers and signing of credentials. Looks like I have to do it regardless since I am unable to get the happy case.

Perhaps the error can be more verbose? I assumed :nxdomain error just means the URL is wrong. Perhaps I’m wrong and it can mean the headers are wrong too?

No, it means “cannot resolve host name to an IP”. So you should find which domain can’t be resolved in your environment. Maybe a PiHole? An over-zealous corporate network?

1 Like