code: function makeRequest(operation, params, callback) {
      if (typeof params === 'function') {
        callback = params;
        params = null;
      }
  
      params = params || {};
      if (this.config.params) { // copy only toplevel bound params
        var rules = this.api.operations[operation];
        if (rules) {
          params = AWS.util.copy(params);
          AWS.util.each(this.config.params, function(key, value) {
            if (rules.input.members[key]) {
              if (params[key] === undefined || params[key] === null) {
                params[key] = value;
              }
            }
          });
        }
      }
  
      var request = new AWS.Request(this, operation, params);
      this.addAllRequestListeners(request);
      this.attachMonitoringEmitter(request);
      if (callback) request.send(callback);
      return request;
    }
docs: Calls an operation on a service with the given input parameters.
  
  @param operation [String] the name of the operation to call on the service.
  @param params [map] a map of input options for the operation
  @callback callback function(err, data)
  If a callback is supplied, it is called when a response is returned
  from the service.
  @param err [Error] the error object returned from the request.
  Set to `null` if the request is successful.
  @param data [Object] the de-serialized data returned from
  the request. Set to `null` if a request error occurs.