Writing infrastructure as code is pretty nice and I enjoy the declarative approach of defining what you want and letting the tooling take care of the how. I guess this is because of my background as a SQL developer.
What I don't like so much is the development experience and if you don't get this part right it can be a right pain.
What are the challenges? The first real challenge is writing the correct json for each thing you want to create.