SAM is limited and I didn't care for it. I believe CDK is the way to go; I just haven't had much chance to play around with it yet. I suspect it doesn't solve the problem that extensions are lambdas, but it's a welcome development. I believe Terraform now has a CDK as well.