Provision multiple packages of same grouping of resources

I’m quite new to TF, so apologies if this is a basic question, I would like to understand how to approach this.

I have set up a straightforward project (main.tf, variables.tf, outputs.tf) that provisions resources in AWS such as Redshift, VPCs, IAM etc.

This is working, but it can only provision one such “package”. Supplying a different name for resources will overwrite resources created before. But I would like to create many of these “packages” (i.e. another Redshift, VPC, etc. combo without modifying the existing one). In the future I would need to re-create the equivalent also in Azure.

How would I go about it? Do I create modules (how to invoke the modules)? Or do I need to look into CDK?

Thanks!