module Aws::Rails::SqsActiveJob

def self.config

Returns:
  • (Configuration) - the (singleton) Configuration
def self.config
  @config ||= Configuration.new
end

def self.configure

Other tags:
    Yield: - Configuration
def self.configure
  yield(config)
end

def self.fifo?(queue_url)

def self.fifo?(queue_url)
  queue_url.ends_with? '.fifo'
end

def self.lambda_job_handler(event:, context:)

This will load your Rails environment, and then use this method as the handler.
Configure the entrypoint to: +config/environment.Aws::Rails::SqsActiveJob.lambda_job_handler+
Trigger the lambda from your SQS queue
A lambda event handler to run jobs from an SQS queue trigger
def self.lambda_job_handler(event:, context:)
  return 'no records to process' unless event['Records']
  event['Records'].each do |record|
    sqs_msg = to_sqs_msg(record)
    job = Aws::Rails::SqsActiveJob::JobRunner.new(sqs_msg)
    puts("Running job: #{job.id}[#{job.class_name}]")
    job.run
    sqs_msg.delete
  end
  "Processed #{event['Records'].length} jobs."
end

def self.to_message_attributes(record)

def self.to_message_attributes(record)
  record['messageAttributes'].each_with_object({}) do |(key, value), acc|
    acc[key] = {
      string_value: value['stringValue'],
      binary_value: value['binaryValue'],
      string_list_values: ['stringListValues'],
      binary_list_values: value['binaryListValues'],
      data_type: value['dataType']
    }
  end
end

def self.to_queue_url(record)

def self.to_queue_url(record)
  source_arn = record['eventSourceARN']
  raise ArgumentError, "Invalid queue arn: #{source_arn}" unless Aws::ARNParser.arn?(source_arn)
  arn = Aws::ARNParser.parse(source_arn)
  sfx = Aws::Partitions::EndpointProvider.dns_suffix_for(arn.region)
  "https://sqs.#{arn.region}.#{sfx}/#{arn.account_id}/#{arn.resource}"
end

def self.to_sqs_msg(record)

def self.to_sqs_msg(record)
  msg = Aws::SQS::Types::Message.new(
    body: record['body'],
    md5_of_body: record['md5OfBody'],
    message_attributes: self.to_message_attributes(record),
    message_id: record['messageId'],
    receipt_handle: record['receiptHandle']
  )
  Aws::SQS::Message.new(
    queue_url: to_queue_url(record),
    receipt_handle: msg.receipt_handle,
    data: msg,
    client: Aws::Rails::SqsActiveJob.config.client
  )
end