【发布时间】:2020-08-26 18:15:45
【问题描述】:
我想在本地运行我的 lambda 函数(我目前正在使用 ruby 2.7.1),但是当我需要一个需要本机依赖项的 gem 时,它会失败,因为它找不到它们。
我尝试使用 'pg' gem 连接到 postgresql 数据库。然后我继续运行sam build 和sam local invoke HelloWorldFunction --event events/event.json,它失败并出现下一个错误:
Invoking app.lambda_handler (ruby2.7)
Failed to download a new amazon/aws-sam-cli-emulation-image-ruby2.7:rapid-1.0.0 image.
Invoking with the already downloaded image.
Mounting /home/user/sam-app/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated
inside runtime container
Init error when loading handler app.lambda_handler
{
"errorMessage": "libpq.so.5: cannot open shared object file: No such file or directory - /var/task/vendor/bundle/ruby/2.7.0/gems/pg-1.2.3/lib/pg_ext.so",
"errorType": "Init<LoadError>",
"stackTrace": [
"/var/lang/lib/ruby/site_ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `require'",
"/var/lang/lib/ruby/site_ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `require'",
"/var/task/vendor/bundle/ruby/2.7.0/gems/pg-1.2.3/lib/pg.rb:5:in `<top (required)>'",
"/var/lang/lib/ruby/site_ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `require'",
"/var/lang/lib/ruby/site_ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `require'",
"/var/task/app.rb:3:in `<top (required)>'",
"/var/lang/lib/ruby/site_ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `require'",
"/var/lang/lib/ruby/site_ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `require'"
]
}
接下来我尝试执行sam build --use-container 并得到Gem::Ext::BuildError 和消息ERROR: Failed to build gem native extension.
似乎没有包含gem需要的外部库。
我的问题是:
- 如何使用 AWS SAM 实现这一点?最好的方法是什么?
- 如何解决这个问题以在本地测试 lambda 并让它在生产环境中工作?
我阅读了一些关于为此使用图层的信息,但我并不完全理解,因为这是我第一次使用 lambda 函数。
sam proyect 似乎也有一些关于解决此问题的未解决问题,但不会在不久的将来。
任何帮助将不胜感激! 谢谢!
【问题讨论】:
-
你在关注什么文档?
-
@D.SM 我正在关注AWS documentation 以及自动生成项目中包含的自述文件
-
sam build是一个本地命令,如果这是真的,你有一个本地构建问题。
标签: ruby aws-lambda pg aws-sam aws-sam-cli