CNAME records cannot coexist with other record types at the same name,
and an apex/root domain (example.com) always needs at least an SOA and
NS record at that name — so a CNAME is not allowed at the apex.
(RFC 1034 / RFC 1035)
Subdomains (www.example.com, app.example.com) have no such restriction —
CNAME works fine there.
Why this matters for AWS
An ALB has no static IP — its DNS name resolves to a rotating set of
IPs, which is exactly why CNAME (or ALIAS) is the intended way to point a
domain at it.
Since apex domains can't use CNAME, you cannot point example.com directly
at an ALB's DNS name with a plain A record — an A record needs a fixed
IP, and the ALB doesn't have one.