如何将模块化 Sinatra 应用程序迁移到 AWS Lambda
Posted
技术标签:
【中文标题】如何将模块化 Sinatra 应用程序迁移到 AWS Lambda【英文标题】:How to migrate a modular Sinatra app to AWS Lambda 【发布时间】:2021-04-10 16:47:19 【问题描述】:我有一个模块化的 Sinatra 应用程序,它在 rackup 下运行良好,即带有一个 config.ru,它具有三个“使用”语句和一个运行语句。我正在尝试了解如何将应用程序移植到 AWS lambda,其中 API_gateway 将提供 Web 服务器服务并调用我的应用程序。
我使用来自https://github.com/aws-samples/serverless-sinatra-sample/blob/master/lambda.rb 的推荐 lambda.rb 脚本作为我的入口点。我不明白的是,在 AWS Lambda 微环境中,我如何在没有 rackup 和 config.ru 的情况下组装我的应用程序的模块/层?
尽管我已经阅读了每一篇博客文章、我所知道的 Sinatra 和 Rack 文档以及伟大的“Sinatra Up and Running”一书,但我认为我的菜鸟大脑只是缺少了一些真正基本的东西。我错过了什么?
【问题讨论】:
【参考方案1】:再次阅读《Sinatra: Up and Running》这本书时,似乎有一个相当优雅的解决方案。如果我将我的 lambda.handler 入口点设置为指向一个简单的 Sinatra 路由器,那么它将是将各个控制器组成一个“系统”的路由器,它将处理我的所有端点。书中的例子:
Example 4-32. Using Sinatra as router
require 'sinatra/base'
class Foo < Sinatra::Base
get('/foo') 'foo'
end
class Bar < Sinatra::Base
get('/bar') 'bar'
end
class Routes < Sinatra::Base
get('/foo') Foo.call(env)
get('/bar') Bar.call(env)
end
run Routes
当然,就我而言,我不需要“运行路线”行。我只会让我的 lambda.handler 调用 Routes,就像在 Routes.call 中一样。这似乎非常可行!
【讨论】:
以上是关于如何将模块化 Sinatra 应用程序迁移到 AWS Lambda的主要内容,如果未能解决你的问题,请参考以下文章
带有角膜宝石和 sqlite 的 Sinatra 项目。耙分贝:迁移不工作。已创建架构但无法生成测试数据