Cloud Init is used everywhere, probably in every cloud provider. It's very ubiquitous. I don't like it either, its syntax changed in an incompatible way between versions and simple things might require a lot of experimentation, like just creating user with password to log in. But once you're over this, it's pretty nice.
Where it isn't technically supported, there is 'NoCloud'. A generic mechanism for hosting the data elsewhere:
https://cloudinit.readthedocs.io/en/latest/reference/datasou...
Might think 'chicken/egg': not really. Resources usually come with some credentials -- use those to add more with this.