xsqlserversetup resource vs configuration data sections

Below are the parameters which can be used in the DSC xsqlserversetup resource section. I’ve also seen many of them used in the configuration data section instead. Are there are any pros or cons for using them in one place versus another?

Name PropertyType IsMandatory Values

InstanceName [string] True {}
SetupCredential [PSCredential] True {}
Action [string] False {AddNode, CompleteFailoverCluster, Install, InstallFailoverCluster…}
AgtSvcAccount [PSCredential] False {}
ASBackupDir [string] False {}
ASCollation [string] False {}
ASConfigDir [string] False {}
ASDataDir [string] False {}
ASLogDir [string] False {}
ASSvcAccount [PSCredential] False {}
ASSysAdminAccounts [string[]] False {}
ASTempDir [string] False {}
BrowserSvcStartupType [string] False {Automatic, Disabled, Manual}
DependsOn [string[]] False {}
ErrorReporting [string] False {}
FailoverClusterGroupName [string] False {}
FailoverClusterIPAddress [string[]] False {}
FailoverClusterNetworkName [string] False {}
Features [string] False {}
ForceReboot [bool] False {}
FTSvcAccount [PSCredential] False {}
InstallSharedDir [string] False {}
InstallSharedWOWDir [string] False {}
InstallSQLDataDir [string] False {}
InstanceDir [string] False {}
InstanceID [string] False {}
ISSvcAccount [PSCredential] False {}
ProductKey [string] False {}
PsDscRunAsCredential [PSCredential] False {}
RSSvcAccount [PSCredential] False {}
SAPwd [PSCredential] False {}
SecurityMode [string] False {}
SourceCredential [PSCredential] False {}
SourcePath [string] False {}
SQLBackupDir [string] False {}
SQLCollation [string] False {}
SQLSvcAccount [PSCredential] False {}
SQLSysAdminAccounts [string[]] False {}
SQLTempDBDir [string] False {}
SQLTempDBLogDir [string] False {}
SQLUserDBDir [string] False {}
SQLUserDBLogDir [string] False {}
SQMReporting [string] False {}
SuppressReboot [bool] False {}
UpdateEnabled [string] False {}
UpdateSource [string] False {}

Well, you don’t really “use” them in a configuration data section. Those are just a way of more easily defining shared and per-node settings in a single place. It’s the resources that “use” those, regardless. Whether you define resources in-place or via a data block is really more of a modularization decision on your part. Neither is wrong; they’re just representative of different strategies. Like chocolate or vanilla ice cream - they’re both wonderful for certain people.

“The DSC Book” goes into some of the broad configuration/modularization strategies. Neither of these approaches is better than dedicated tooling to help you manage all of it, which MS currently doesn’t make.