class LambdaPunch::Api
Interface to Lambda's Extensions API using simple `Net::HTTP` calls.
Lambda Extensions API https://docs.aws.amazon.com/lambda/latest/dg/runtimes-extensions-api.html
Constants
- EXTENSION_NAME
Public Class Methods
loop()
click to toggle source
# File lib/lambda_punch/api.rb, line 19 def loop instance.loop end
register!()
click to toggle source
# File lib/lambda_punch/api.rb, line 15 def register! instance.register! end
Public Instance Methods
loop()
click to toggle source
# File lib/lambda_punch/api.rb, line 41 def loop resp = event_next event_payload = JSON.parse(resp.body) case event_payload['eventType'] when 'INVOKE' then invoke(event_payload) when 'SHUTDOWN' then shutdown else event_type_error(event_payload) end end
register!()
click to toggle source
# File lib/lambda_punch/api.rb, line 25 def register! return if @registered uri = URI.parse "#{base_uri}/register" http = Net::HTTP.new uri.host, uri.port request = Net::HTTP::Post.new uri.request_uri request['Content-Type'] = 'application/vnd.aws.lambda.extension+json' request['Lambda-Extension-Name'] = EXTENSION_NAME request.body = %q|{"events":["INVOKE","SHUTDOWN"]}| http.request(request).tap do |r| logger.debug "Api#register! => #{r.class.name.inspect}, body: #{r.body}" @registered = true @extension_id = r.each_header.to_h['lambda-extension-identifier'] logger.debug "Api::ExtensionId => #{@extension_id}" end end
Private Instance Methods
base_uri()
click to toggle source
# File lib/lambda_punch/api.rb, line 78 def base_uri "http://#{ENV['AWS_LAMBDA_RUNTIME_API']}/2020-01-01/extension" end
event_next()
click to toggle source
# File lib/lambda_punch/api.rb, line 54 def event_next uri = URI.parse "#{base_uri}/event/next" http = Net::HTTP.new uri.host, uri.port request = Net::HTTP::Get.new uri.request_uri request['Content-Type'] = 'application/vnd.aws.lambda.extension+json' request['Lambda-Extension-Identifier'] = @extension_id http.request(request).tap do |r| logger.debug "Api#event_next => #{r.class.name.inspect}, body: #{r.body}" end end
event_type_error(event_payload)
click to toggle source
# File lib/lambda_punch/api.rb, line 86 def event_type_error(event_payload) message = "Unknown event type: #{event_payload['eventType'].inspect}" logger.fatal(message) raise EventTypeError.new(message) end
invoke(event_payload)
click to toggle source
# File lib/lambda_punch/api.rb, line 65 def invoke(event_payload) logger.debug "Api#invoke => #{JSON.dump(event_payload)}" if logger.debug? Worker.call(event_payload) end
logger()
click to toggle source
# File lib/lambda_punch/api.rb, line 82 def logger LambdaPunch.logger end
shutdown()
click to toggle source
# File lib/lambda_punch/api.rb, line 70 def shutdown logger.info 'Api#shutdown...' DRb.stop_service rescue true exit end