Class: LambdaPunch::Api
- Inherits:
-
Object
- Object
- LambdaPunch::Api
- Includes:
- Singleton
- Defined in:
- lib/lambda_punch/api.rb
Overview
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
Constant Summary collapse
- EXTENSION_NAME =
'lambdapunch'
Class Method Summary collapse
Instance Method Summary collapse
Class Method Details
.loop ⇒ Object
19 20 21 |
# File 'lib/lambda_punch/api.rb', line 19 def loop instance.loop end |
.register! ⇒ Object
15 16 17 |
# File 'lib/lambda_punch/api.rb', line 15 def register! instance.register! end |
Instance Method Details
#loop ⇒ Object
41 42 43 44 45 46 47 48 49 50 |
# 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! ⇒ Object
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# 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 |