【问题标题】:How to migrate a modular Sinatra app to AWS Lambda如何将模块化 Sinatra 应用程序迁移到 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”一书,但我认为我的菜鸟大脑只是缺少了一些真正基本的东西。我错过了什么?

【问题讨论】:

    标签: aws-lambda sinatra rack


    【解决方案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 中一样。这似乎非常可行!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-19
      • 2021-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-16
      • 1970-01-01
      • 2021-01-06
      相关资源
      最近更新 更多