Using ExAWS library to interact with AWS S3. The setup steps is given in the library's documentation.
It returns a map with all the objects listed. Used Jason to convert the returned map to JSON data. You can also loop through the contents using Enum.map
.
defmodule ElixirS3 do
def list_objects() do
{:ok, data} = ExAws.S3.list_objects("links-data") |> ExAws.request()
jsonData =
data.body.contents
|> Enum.map(fn x -> %{key: x.key} end) # Just getting the `key` from objects
|> Jason.encode!()
File.write!("./data.json", jsonData)
end
end
ElixirS3.list_objects()
There's also aws-elixir library to work with AWS.