function createSnsTopics (config = { sns: { bounce: { arn: '' }, complaint: { arn: '' } } }, callback) {
  const SNS_BOUNCE_NAME = 'mail-for-good-ses-bounce';
  const SNS_COMPLAINT_NAME = 'mail-for-good-ses-complaint';

  const create = (name, callback) => {
    // If this queue already exists, it just returns the ARN
    const sns = new AWS.SNS();
    console.log(`Creating SNS topic: ${name}`);

    sns.createTopic({
      Name: name
    }, (err, result) => {
      if (err) {
        callback(err);
      } else {
        callback(null, result.TopicArn);
      }
    });
  };

  async.parallel({
    bounce: async.apply(create, SNS_BOUNCE_NAME),
    complaint: async.apply(create, SNS_COMPLAINT_NAME)
  }, (err, result) => {
    if (err) {
      callback(err);
    } else {
      config.sns.bounce.arn = result.bounce;
      config.sns.complaint.arn = result.complaint;

      callback(null, config);
    }
  });
}
Configure an AWS account for receiving SES feedback notifications (bounces and complaints) through an SNS queue.
https://docs.aws.amazon.com/ses/latest/DeveloperGuide/notifications-via-sns.html

End configuration:
Send emails (SES) -> listen for bounces/complaints (SNS) -> publish to queue (SQS)
This makes it possible to poll the SQS queue and receive the stored feedback notifications, then save
the bounces/complaints in the db + associate them with CampaignSubcribers using the messageId

@param credentials
@param callback - Called on success or error, i.e. callback(error, queueUrl)