I don't know if this is anywhere on your roadmap, but I wanted to share a weekend project here to give the ExAws team a chance to comment and for me to gauge enthusiasm.
ExAws.Boto is a library that generates ExAws clients from the same JSON specification files that are used to generate the other AWS SDKs. It's driven by macros, and produces API model objects as structs, typespecs for dialyzer, and ex-docs at compile time. (Screenshot of the documentation it produces is included below.) I started on this this weekend, and got to the point where a few basic API requests appear to be working. Lots more ahead before it can be considered production ready.
Some thoughts I have about this project:
This is very much a work in progress, and not ready for production. But feel free to check it out and push its buttons. I find the IAM API is a good place to test.
This does not eliminate the need for having service-specific libraries to make AWS nice to use in Elixir. The code and interfaces that Boto produces can be... rugged. But perhaps it can alleviate some of the communal legwork of writing out a thousand CRUD operations and keeping APIs up to date. I would value any suggestions from maintainers of existing libraries about how this could produce an underlying client implementation that's valuable to them, while leaving room to enrich the APIs with the interesting things like ExAws.S3.Upload
The compile times aren't terrible, but they aren't great either. It's worth compiling only the services that you actually need. Compiling an API for AWS IAM takes around 10 seconds on my dev machine. Compiling a service produces a lot of modules.
Testing is pretty thin. Only basic functionality of generating model objects currently has unit tests. Integration testing with actual AWS APIs is something I haven't addressed yet, if anyone has input on how to do that, I'm all ears.
Only the Query protocol is supported. Still more work to support json, rest-xml, etc. I'm sure there is a long tail of edge cases...
Feedback is welcome, and any comments or suggestions about the best way for this to fit in with the ExAws vision would be greatly appreciated.
Hi @seanedwards - are you still working on this? It's exactly the kind of thing I'd like to start using to ease the maintenance of service modules (as well as simplify the creation of new ones). Cheers.
I don't know if this is anywhere on your roadmap, but I wanted to share a weekend project here to give the ExAws team a chance to comment and for me to gauge enthusiasm.
ExAws.Boto
is a library that generates ExAws clients from the same JSON specification files that are used to generate the other AWS SDKs. It's driven by macros, and produces API model objects as structs, typespecs for dialyzer, and ex-docs at compile time. (Screenshot of the documentation it produces is included below.) I started on this this weekend, and got to the point where a few basic API requests appear to be working. Lots more ahead before it can be considered production ready.Some thoughts I have about this project:
ExAws.S3.Upload
Query
protocol is supported. Still more work to support json, rest-xml, etc. I'm sure there is a long tail of edge cases...Feedback is welcome, and any comments or suggestions about the best way for this to fit in with the ExAws vision would be greatly appreciated.