如何将模块化 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的主要内容,如果未能解决你的问题,请参考以下文章

在凯马尔使用params

您如何在 Sinatra 中选择您的 HTTP 服务器?

带有角膜宝石和 sqlite 的 Sinatra 项目。耙分贝:迁移不工作。已创建架构但无法生成测试数据

如何将 PicketBox 自定义登录模块迁移到 Elytron?

Sinatra 应用程序找不到视图目录

如何将 Flutter 项目迁移到 Firebase 版本 9 现代 Web 模块化风格