apigatewayv2_rack: serve Rack app from AWS Lambda function via API Gateway V2 (HTTP API) or ALB (ELB v2) lambda target
Apigatewayv2Rack provides a method to convert a AWS Lambda invocation event from API Gateway V2 (HTTP API) or ALB lambda target (ELBv2) to a Rack request environment and a method to convert a Rack response tuple to a corresponding Lambda response object.
This gem also provides support for Lambda function URL as it uses the same schema with API Gateway V2.
- Supports Rack 2 and Rack 3 specification
- The following AWS Lambda invocation event schemas:
- Multiple field lines are not supported on API Gateway schema except
set-cookieheader due to API Gateway's limitation lambda.multi_value_headers.enabledis recommended to be set for usage with ALB. [doc]
# Gemfile
gem 'apigatewayv2_rack'# main.rb
require 'apigatewayv2_rack'
Main = Apigatewayv2Rack.handler_from_rack_config_file(File.join(__dir__, 'config.ru'))And set lambda function handler to main.Main.handle then voila!
req = Apigatewayv2Rack::Request.new(event: event, context: context)
status, headers, body = rack_app.call(req.to_h)
resp = Apigatewayv2Rack::Response.new(status: status, headers: headers, body: body, elb: req.elb?, multivalued: req.multivalued?)
p resp.as_jsonSee ./Dockerfile.integration and ./integration.
This gem includes several utility middlewares:
- CloudfrontVerify: Verify
x-origin-verifyvalue to protect unwanted direct access. - CloudfrontXff: Respect
cloudfront-viewer-addressasx-forwarded-forvalue.
After checking out the repo, run bin/setup to install dependencies. Then, run rake spec to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and the created tag, and push the .gem file to rubygems.org.
Bug reports and pull requests are welcome on GitHub at https://github.com/sorah/apigatewayv2_rack.
The gem is available as open source under the terms of the MIT License.