DBSubnetGroup создается из списка subnets, их вы получаете или через псевдопараметры (если создаете тут же в CFT) или как явные параметры (если задаете снаружи)
Мне нужно было создать ElastiCache Subnet Group и я почему-то думал, что создаётся выделенная подсеть конкретно для этого кластера. Этим двум или более подсетям - публичной и приватной назначаются subnet id типа subnet_hash. По идее так и должно быть в идеале и даже свой VPC, но в реале всё гораздо проще.
эти группы не отличаются от RDS, обычно если вы пишете CFT то вы там же создаете все подсети, группы и остальное (ну или используете готовые, как параметры)