backin
I need help sending a put event on AWS Eventbridge
I’m fighting with this code
@moduledoc false
require Logger
def send_event_to_eventbridge() do
event = %{
entries: [
%{
source: "car-event",
detailType: "car-created",
detail: (%{
brand: "Renault",
name: "A4",
country: "US"
}),
eventBusName: "my-event-bus"
}
]
}
event_json = Poison.encode(event)
Logger.info("Sending: #{inspect(event_json)}")
case ExAws.EventBridge.put_events(event_json) |> ExAws.request() do
{:ok, response} ->
Logger.info("Successfully: #{inspect(response)}")
{:error, error} ->
Logger.error("Error: #{inspect(error)}")
end
end
end
and I don’t know how to fix this error
(Protocol.UndefinedError) protocol Enumerable not implemented for {:ok, “{"entries":[{"eventBusName":"my-event-bus","detail":{"country":"US","brand":"Renault","name":"A4"},"detailType":"car-created","source":"car-event"}]}”} of type Tuple. This protocol is implemented for the following type(s): DBConnection.PrepareStream, DBConnection.Stream, Date.Range, Ecto.Adapters.SQL.Stream, File.Stream, Function, GenEvent.Stream, HashDict, HashSet, IO.Stream, Jason.OrderedObject, List, Map, MapSet, Phoenix.LiveView.LiveStream, Postgrex.Stream, Range, Stream
(elixir 1.14.0) lib/enum.ex:1: Enumerable.impl_for!/1
(elixir 1.14.0) lib/enum.ex:166: Enumerable.reduce/3
(elixir 1.14.0) lib/enum.ex:4307: Enum.map/2
(ex_aws_eventbridge 0.1.1) lib/ex_aws/event_bridge.ex:88: ExAws.EventBridge.put_events/2
(my_app 0.1.0) lib/my_app/eventbridge.ex:27: MyApp.Eventbridge.send_event_to_eventbridge/0
Marked As Solved
backin
I was able to get it now, I’ll leave it here for other users.
defmodule MyApp.EventBridge do
@moduledoc false
require Logger
alias ExAws.EventBridge
def send_event_to_eventbridge(source, detail_type, detail, event_bus_name) do
event = %{
"Source": source,
"DetailType": detail_type,
"Detail": Poison.encode!(detail),
"EventBusName": event_bus_name
}
Logger.info("Sending: #{inspect(event)}" )
case EventBridge.put_events([event]) |> ExAws.request() do
{:ok, response} ->
Logger.info("Event ID: #{inspect(response)}")
{:error, error} ->
Logger.error("Error #{inspect(error)}")
end
end
end
I insert the data through the console
MyApp.EventBridge.send_event_to_eventbridge(
"car-event",
"car-created",
%{brand: "Renault", name: "A4", country: "US"},
"my-event-bus"
)
[info] Sending: %{Source: "car-event", DetailType: "car-created", Detail: "{\"country\":\"US\",\"brand\":\"Renault\",\"name\":\"A4\"}", EventBusName: "my-event-bus"}
[info] Event ID: %{"Entries" => [%{"EventId" => "e4accabf-b89d-0dd2-0fff-92e6de215a95"}], "FailedEntryCount" => 0}
Also Liked
msmithstubbs
This error message:
(Protocol.UndefinedError) protocol Enumerable not implemented for {:ok, “{"entries":[{"eventBusName":"my-event-bus","detail":{"country":"US","brand":"Renault","name":"A4"},"detailType":"car-created","source":"car-event"}]}”} of type Tuple.
is telling you “I’m calling an Enumerable function on something, but it doesn’t support it because it is a tuple”
Where is the tuple coming from? Here:
event_json = Poison.encode(event)`
Poison.encode returns a tuple. If you just want the encoded JSON, you can call Poison.encode!
iex> Poison.encode([1, 2, 3])
{:ok, "[1,2,3]"}
iex> Poison.encode!([1, 2, 3])
"[1,2,3]"
Popular in Questions
Other popular topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #advent-of-code
- #elixirconf-us
- #distillery
- #processes
- #forms
- #api
- #metaprogramming
- #security
- #performance









