I had the same issue on Centos, i.e. I added a script and nothing happened. Not tried on Debian based distros, but I found building a base AMI with cloud-init installed and, in /etc/cloud/cloud.cfg set ‘disable_root: false’, solved it for me. Then launch an instance of that base AMI, setting the user-data.
In my case it wasn’t an ansible issue, but a limitation of the AMI I chose.
It’s been a long time since I’ve used cloud-init, but I believe that your script needs to start with a bangline (#!/bin/sh) for cloud-init to interpret it as an on-boot script.
Regardless, I think a better approach would be to use Ansible and the apt module to ensure that the package is installed post-boot, not just running a script on boot.