Although there is no ootb "CTA" component, you do not need custom code.
What I normally do in such cases:
- Create a custom template for "CTA" with the needed fields
- Create a copy of "Promo" (see below) and name it CTA
- Set the datasource (location and template) for your CTA's (use your template and add a location in the Data folder)
- Add this CTA rendering to your allowed renderings on the site
- Create a variant for this new rendering to display the fields and such (the name of the variant is the exact name of your rendering - the name of the variant definition can be anything.. you might even create more than one)
- You should be good to go..
To create a copy of Promo you can use the official docs: https://doc.sitecore.net/sitecore_experience_accelerator/setting_up_and_configuring/configuring/copy_and_customize_an_sxa_rendering
Or if you are not concerned about multisite and re-using the component, there is a faster way: just copy the Promo rendering item and adjust the fields you want (optionally the rendering parameters, surely the datasource and datatemplate as mentioned above)
This way you will end up with only one datasource. If you actually want three (for image, text and link separately) snippets are indeed the way to go - but normally your editors will like one datasource better..