Receiving 301 redirected when listing bucket contents with ExAws

I’m using the latest versions of ExAws and ExAws.S3. I have configured access key, secret key, and region via AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, and AWS_REGION, respectively. The keys I am using have Administrator Access in AWS.

I am experimenting in a local iex session.

I can get a list of buckets via:

ExAws.S3.list_buckets() |> ExAws.request!()

…but I cannot get contents via:

ExAws.S3.list_objects_v2("my_bucket_name") |> ExAws.request!()

I get:

15:04:55.211 module=ExAws.Request [warning] ExAws: Received redirect, did you specify the correct region?
** (ExAws.Error) ExAws Request Error!

{:error, {:http_error, 301, "redirected"}}

    (ex_aws 2.2.3) lib/ex_aws.ex:87: ExAws.request!/2
    iex:1: (file)

I have verified via AWS console and from the above Elixir code that the bucket exists.

Can anyone please advise on how to make this work?

This generally means that you haven’t specified the region correctly. What region is the bucket located in?

I tried to help him and failed. We used AWS_REGION and it was correctly set (us-west-1). I also ran ExAws.Config.new(:s3) in iex but that shows the wrong region (not sure if that’s at all relevant, I am just grasping for straws at this point).

Perhaps we should ditch the env vars and just use app config?

@dimitarvp ExAws always uses app env, there is no magic use of environment variables. That’s why the install instructions have you set config just to even get keys working. ExAws — ExAws v2.4.3

Are you sure? The first example is literally to use env vars. And if I remove them (rename .envrc and have direnv unload them) I get a super long and confusing error message.

I’ve been through the docs a few times now but the few different ideas I tried didn’t work. Can you give me a cookie cutter Config snippet that should work?

EDITED: see next comment.

Whoops, it was a very stupid copy-paste mistake, apologies. Seems both me and @cortfritz derped big time. I’ll have him change his config as well and it should work right away.

Thanks for making me double-check.

1 Like

Thanks @benwilson512 and @dimitarvp!

My app has a custom config management scheme and we tripped over it.

Where we needed:

config :ex_aws,
  access_key_id: ...

I instead had:

config :custom_atom_from_config_scheme,
  access_key_id: ...

…and got confused about what was set, where.

Going forward will move to modern best practice Elixir config management so as to not post confusion here (as often).

Thank you again!

2 Likes