I have an SNS Topic ARN that I'm trying to programmatically assign as the EventDestination for SES. I'm using a Custom CloudFormation resource and here is the order of my script: 

* list the topics currently in sns (validate that the lambda running has access to sns)
* create a configuration set
* create an event destination with topic arn

The Lambda that is executing during CloudFormation has access to list the topic. But when it gets to creating the EventDestination. It cannot find the topic. It throws the following error:

```
2018-02-05T23:42:22.538Z    357e9918-0ace-11e8-a033-b70f6bdba611    { InvalidSNSDestination: Could not access SNS topic <arn:aws:sns:us-east-1:846743712894:REDACTED>.
    at Request.extractError (/var/task/src/sesRuleSet.js:17884:29)
    at Request.callListeners (/var/task/src/sesRuleSet.js:20237:20)
    at Request.emit (/var/task/src/sesRuleSet.js:20209:10)
    at Request.emit (/var/task/src/sesRuleSet.js:30887:14)
    at Request.transition (/var/task/src/sesRuleSet.js:30226:10)
    at AcceptorStateMachine.runTo (/var/task/src/sesRuleSet.js:31033:12)
    at /var/task/src/sesRuleSet.js:31045:10
    at Request.<anonymous> (/var/task/src/sesRuleSet.js:30242:9)
    at Request.<anonymous> (/var/task/src/sesRuleSet.js:30889:12)
    at Request.callListeners (/var/task/src/sesRuleSet.js:20247:18)
  message: 'Could not access SNS topic <arn:aws:sns:us-east-1:846743712894:REDACTED>.',
  code: 'InvalidSNSDestination',
  time: 2018-02-05T23:42:22.538Z,
  requestId: '363abdd6-0ace-11e8-82ef-3ba09d6eb8e6',
  statusCode: 400,
  retryable: false,
  retryDelay: 18.25373598353528 }

```

Here is the code in question:

```
.then(() => {
  console.log('Checking Access to SNS topic');
  return new Promise((resolve, reject) => {
    const params: AWS.SNS.ListTopicsInput = {};
    sns.listTopics(params, (err, data) => {
      if (err) {
        console.log(err);
        return reject(err);
      }
      console.log(data);
      return resolve();
    });
  });
})
.then(() => {
  console.log('Create Configuration Set');
  return new Promise((resolve, reject) => {
    const params: AWS.SES.CreateConfigurationSetRequest = {
      ConfigurationSet: {
        Name: 'configset',
      },
    };
    console.log(params);
    ses.createConfigurationSet(params, (err, data) => {
      if (err) {
        return reject(err);
      }
      console.log(data);
      resolve();
    });
  });
})
.then(() => {
  console.log('Create Configuration Set Event Destination');
  return  new Promise((resolve, reject) => {
    const params: AWS.SES.CreateConfigurationSetEventDestinationRequest = {
      ConfigurationSetName: 'configset',
      EventDestination: {
        MatchingEventTypes: ['open', 'click'],
        Name: 'OpenAndClickHandler',
        SNSDestination: {
          TopicARN: `REDACTED`,
        },
      },
    };
    console.log(params);
    ses.createConfigurationSetEventDestination(params, (err, data) => {
      if (err) {
        return reject(err);
      }
      resolve();
    });
  });

```