Debugging for another day with out replies, looks like I am able narrow down that problem to not having the permission - rds:ListTagsForResource.
https://github.com/elastic/beats/blob/master/x-pack/metricbeat/module/aws/rds/rds.go Line : 192-198, It was an most likely an error in our case, though the return statement doesn't make sense. If its a warning, throw a warning, continue and if its an error, throw any error. Returning partially constructed data is incorrect, most likely resulting in the weird behavior i noticed.
reqListTags := svc.ListTagsForResourceRequest(&listTagsInput)
outputListTags, err := reqListTags.Send(context.TODO())
if err != nil {
m.Logger().Warn("ListTagsForResourceRequest failed, rds:ListTagsForResource permission is required for getting tags.")
dbDetailsMap[*dbInstance.DBInstanceIdentifier] = dbDetails
return dbInstanceIDs, dbDetailsMap, nil
}
Another unrelated bug, same class, Line 180-182, looks like an error.
if dbInstance.DBInstanceClass != nil {
dbDetails.dbStatus = *dbInstance.DBInstanceStatus
}
The aws.rds.db_instance.engine_name
is another mystery still unsolved.