class Mapper
Generic wrapper for service clients.
Paging
The AWS Ruby SDK has a built-in enumerator in the client response object that automatically handles paging large requests. Confirm the AWS SDK client call returns a Aws::PageableResponse to take advantage of automatic paging.
Retries
The AWS Ruby SDK performs retries automatically. We change the retry_limit to 9 (10 total requests) and the retry_backoff to add 5 seconds delay on each retry for a total max of 55 seconds.
Constants
- SINGLE_REGION_SERVICES
Services that use us-east-1 endpoint only:
Organizations Route53Domains Shield S3 (unless the bucket was created in another region)
Public Class Methods
new(account, service, region, options)
click to toggle source
# File lib/aws_recon/lib/mapper.rb, line 27 def initialize(account, service, region, options) @account = account @service = service @region = region @options = options @thread = Parallel.worker_number || 0 # build the client interface module_name = "Aws::#{service}::Client" # incremental delay on retries (seconds) retry_delay = 5 # default is 3 retries, with 15 second sleep in between # reset to 9 retries, with incremental backoff client_options = { retry_mode: 'legacy', # legacy, standard, or adaptive retry_limit: 9, # only legacy retry_backoff: ->(context) { sleep(retry_delay * context.retries + 1) }, # only legacy http_read_timeout: 10 } # regional service client_options.merge!({ region: region }) unless region == 'global' # single region services client_options.merge!({ region: 'us-east-1' }) if SINGLE_REGION_SERVICES.include?(service.downcase) # rubocop:disable Layout/LineLength # debug with wire trace client_options.merge!({ http_wire_trace: true }) if @options.debug @client = Object.const_get(module_name).new(client_options) end
Private Instance Methods
_msg(msg)
click to toggle source
# File lib/aws_recon/lib/mapper.rb, line 63 def _msg(msg) base_msg = ["t#{@thread}", @region, @service] base_msg.concat(msg) end
log(*msg)
click to toggle source
# File lib/aws_recon/lib/mapper.rb, line 68 def log(*msg) return unless @options.verbose puts _msg(msg).map(&:to_s).join('.') end
log_error(*msg)
click to toggle source
# File lib/aws_recon/lib/mapper.rb, line 74 def log_error(*msg) return unless @options.verbose puts _msg(msg).map(&:to_s).join('.') end