For starters, you have a typo in your add_host task: publid_dns_name should be public_dns_name.
When you run your playbook the first time, there *is* no inventory. If you want to be able to access your new instances from the same playbook that creates them, you'll need to reference them by either the registered variable (ec2) or the group you're adding them to (my_cool_instance_group).
Dynamic inventory isn't dynamically modified as you create instances. It simply populates your inventory when the playbook starts. That's the inventory you have to work with until the playbook is complete and you refresh the cache.