We're using Ansible and building the AMIs on a dedicated ec2 instance (started for a build and shut down afterwards). The AMIs are fully baked and environment information is configured via user_data in the launch configuration.
We use SSH to communicate with the build instance as a result, but I'd rather spend time during the build than during start-up of a new instance.