simple workarounds:
1) move scripts from "User Data" to "Init script" section
2) keep scripts in "User Data" and add the following script to "Init script" section
until sudo grep "Cloud-init .* finished" /var/log/cloud-init-output.log; do echo wait for cloud-init sleep 1 done
Another simpler version of the second part of Mykola Marzhan's workaround is to have this in your init script:
sudo cloud-init status --wait