code: func StackEvents(stackID string,
  	eventFilterLowerBoundInclusive time.Time,
  	awsSession *session.Session) ([]*cloudformation.StackEvent, error) {
  
  	cfService := cloudformation.New(awsSession)
  	var events []*cloudformation.StackEvent
  
  	nextToken := ""
  	for {
  		params := &cloudformation.DescribeStackEventsInput{
  			StackName: aws.String(stackID),
  		}
  		if len(nextToken) > 0 {
  			params.NextToken = aws.String(nextToken)
  		}
  
  		resp, err := cfService.DescribeStackEvents(params)
  		if nil != err {
  			return nil, err
  		}
  		for _, eachEvent := range resp.StackEvents {
  			if eachEvent.Timestamp.Equal(eventFilterLowerBoundInclusive) ||
  				eachEvent.Timestamp.After(eventFilterLowerBoundInclusive) {
  				events = append(events, eachEvent)
  			}
  		}
  		if nil == resp.NextToken {
  			break
  		} else {
  			nextToken = *resp.NextToken
  		}
  	}
  	return events, nil
  }
docs: // StackEvents returns the slice of cloudformation.StackEvents for the given stackID or stackName