In simple term, think of data source as a messenger that terraform sends to get information about a pre-existing resource created manually, or managed by another terraform in your cloud provider. Then brings the information so that terraform can reference that in the configuration files. Example, you want create a EC2 instance in AWS cloud, but it has to be in a particular VPC which was created manually on the AWS console. Now terraform will use data source to get information about the network so that it make use of it to deploy the EC2 in that VPC.