You’ve got your work cut out there. I wrote our gateway code that receives data from the sensors over XBee and then parses it, converts it to JSON, and then uploads it to those cloud platforms over MQTT. I couldn’t see a reasonable way to support all those cloud platforms on one device just due to memory storage and RAM availability. AWS requires x509 certificates for The MQTT connection which was really fun(). Google and Azure both use rotating keys so you have to send requests to update basic auth credentials so that’s also a pain in the butt.
I wish I could share the source code for the gateways, would certainly be a big benefit I’d think to a user such as yourself, but management close sourced the source code for all the gateways so my hands are tied. Not to say I can’t provide you a little support here and there though.
A word to the wise, don’t try to use off the shelf libraries for any of the cloud platforms(AWS, Azure, Google IoT, etc). They all work over MQTT. Just use the PubSubClient. It’ll do everything you need to do over The MQTT connection, although you will most certainly need to increase the transmit packet buffer size as it’s only 128 bytes by default. From there the main difference between the different platforms is authentication and topic/packet structure. I attempted to simplify user setup as much as possible so the gateways do most of the heavy lifting of obtaining credentials while the user just has to enter the Connection String for Azure, IAM credentials for AWS, or Region, Location, and OAuth Token for Google IoT.
Best of luck and let me know if I can help.