Ruby 包版本不匹配 Ruby AWS Lambda 函数版本
Ruby bundle version doesn't match Ruby AWS Lambda function version
我在 AWS 上创建了一个 Lambda 函数并选择了运行时:Ruby 版本 2.7.0。
然后我使用以下命令将带有 .zip 文件存档的 Ruby 函数部署到此 AWS Lambda 函数:
bundle config set --local path 'vendor/bundle'
bundle install
zip -r my_function.zip lambda_function.rb vendor
aws lambda update-function-code --function-name test-function --zip-file fileb://my_function.zip
部署成功,但是所有库都已添加到 vendor/bundle/ruby/2.4.0/...
,但未添加到 vendor/bundle/ruby/2.7.0/...
adding: vendor/bundle/ruby/2.4.0/ (stored 0%)
adding: vendor/bundle/ruby/2.4.0/build_info/ (stored 0%)
adding: vendor/bundle/ruby/2.4.0/doc/ (stored 0%)
adding: vendor/bundle/ruby/2.4.0/gems/ (stored 0%)
adding: vendor/bundle/ruby/2.4.0/gems/aws-eventstream-1.2.0/ (stored 0%)
adding: vendor/bundle/ruby/2.4.0/gems/aws-eventstream-1.2.0/CHANGELOG.md (deflated 50%)
adding: vendor/bundle/ruby/2.4.0/gems/aws-eventstream-1.2.0/LICENSE.txt (deflated 65%)
adding: vendor/bundle/ruby/2.4.0/gems/aws-eventstream-1.2.0/lib/ (stored 0%)
adding: vendor/bundle/ruby/2.4.0/gems/aws-eventstream-1.2.0/lib/aws-eventstream.rb (deflated 63%)
adding: vendor/bundle/ruby/2.4.0/gems/aws-eventstream-1.2.0/lib/aws-eventstream/ (stored 0%)
adding: vendor/bundle/ruby/2.4.0/gems/aws-eventstream-1.2.0/lib/aws-eventstream/types.rb (deflated 62%)
adding: vendor/bundle/ruby/2.4.0/gems/aws-eventstream-1.2.0/lib/aws-eventstream/header_value.rb (deflated 57%)
...
我找不到导致问题的原因。如何通过将库添加到 vendor/bundle/ruby/2.7.0/...
来部署 lambda?
GEMFILE.lock
文件是:
GEM
remote: https://rubygems.org/
specs:
aws-eventstream (1.2.0)
aws-partitions (1.547.0)
aws-sdk-core (3.125.1)
aws-eventstream (~> 1, >= 1.0.2)
aws-partitions (~> 1, >= 1.525.0)
aws-sigv4 (~> 1.1)
jmespath (~> 1.0)
aws-sdk-sqs (1.49.0)
aws-sdk-core (~> 3, >= 3.125.0)
aws-sigv4 (~> 1.1)
aws-sigv4 (1.4.0)
aws-eventstream (~> 1, >= 1.0.2)
bindata (2.4.10)
colorize (0.8.1)
jmespath (1.4.0)
json (2.6.1)
redis (4.5.1)
PLATFORMS
x86_64-darwin-20
DEPENDENCIES
aws-sdk-sqs
bindata
colorize
json
redis
BUNDLED WITH
2.3.4
您在本地使用 Ruby 2.4.0 来捆绑您的 Ruby 应用程序,这让 Bundler(正确地)相信您的目标是 2.4.0,然后结果在正在填充的 vendor/bundle/ruby/2.4.0/
文件夹中。
您应该安装并使用 Ruby 2.7.0 将本地 Ruby 版本同步到您的目标 Lambda 运行时。
在用 ruby -v
确认您确实在 2.7.0 上后,重新安装 Bundler (gem install bundler
),然后重新运行上述命令。
您应该在 运行 bundle install
之后填充 vendor/bundle/ruby/2.7.0/
文件夹,zip -r
的输出也显示了这一点。
我在 AWS 上创建了一个 Lambda 函数并选择了运行时:Ruby 版本 2.7.0。 然后我使用以下命令将带有 .zip 文件存档的 Ruby 函数部署到此 AWS Lambda 函数:
bundle config set --local path 'vendor/bundle'
bundle install
zip -r my_function.zip lambda_function.rb vendor
aws lambda update-function-code --function-name test-function --zip-file fileb://my_function.zip
部署成功,但是所有库都已添加到 vendor/bundle/ruby/2.4.0/...
,但未添加到 vendor/bundle/ruby/2.7.0/...
adding: vendor/bundle/ruby/2.4.0/ (stored 0%)
adding: vendor/bundle/ruby/2.4.0/build_info/ (stored 0%)
adding: vendor/bundle/ruby/2.4.0/doc/ (stored 0%)
adding: vendor/bundle/ruby/2.4.0/gems/ (stored 0%)
adding: vendor/bundle/ruby/2.4.0/gems/aws-eventstream-1.2.0/ (stored 0%)
adding: vendor/bundle/ruby/2.4.0/gems/aws-eventstream-1.2.0/CHANGELOG.md (deflated 50%)
adding: vendor/bundle/ruby/2.4.0/gems/aws-eventstream-1.2.0/LICENSE.txt (deflated 65%)
adding: vendor/bundle/ruby/2.4.0/gems/aws-eventstream-1.2.0/lib/ (stored 0%)
adding: vendor/bundle/ruby/2.4.0/gems/aws-eventstream-1.2.0/lib/aws-eventstream.rb (deflated 63%)
adding: vendor/bundle/ruby/2.4.0/gems/aws-eventstream-1.2.0/lib/aws-eventstream/ (stored 0%)
adding: vendor/bundle/ruby/2.4.0/gems/aws-eventstream-1.2.0/lib/aws-eventstream/types.rb (deflated 62%)
adding: vendor/bundle/ruby/2.4.0/gems/aws-eventstream-1.2.0/lib/aws-eventstream/header_value.rb (deflated 57%)
...
我找不到导致问题的原因。如何通过将库添加到 vendor/bundle/ruby/2.7.0/...
来部署 lambda?
GEMFILE.lock
文件是:
GEM
remote: https://rubygems.org/
specs:
aws-eventstream (1.2.0)
aws-partitions (1.547.0)
aws-sdk-core (3.125.1)
aws-eventstream (~> 1, >= 1.0.2)
aws-partitions (~> 1, >= 1.525.0)
aws-sigv4 (~> 1.1)
jmespath (~> 1.0)
aws-sdk-sqs (1.49.0)
aws-sdk-core (~> 3, >= 3.125.0)
aws-sigv4 (~> 1.1)
aws-sigv4 (1.4.0)
aws-eventstream (~> 1, >= 1.0.2)
bindata (2.4.10)
colorize (0.8.1)
jmespath (1.4.0)
json (2.6.1)
redis (4.5.1)
PLATFORMS
x86_64-darwin-20
DEPENDENCIES
aws-sdk-sqs
bindata
colorize
json
redis
BUNDLED WITH
2.3.4
您在本地使用 Ruby 2.4.0 来捆绑您的 Ruby 应用程序,这让 Bundler(正确地)相信您的目标是 2.4.0,然后结果在正在填充的 vendor/bundle/ruby/2.4.0/
文件夹中。
您应该安装并使用 Ruby 2.7.0 将本地 Ruby 版本同步到您的目标 Lambda 运行时。
在用 ruby -v
确认您确实在 2.7.0 上后,重新安装 Bundler (gem install bundler
),然后重新运行上述命令。
您应该在 运行 bundle install
之后填充 vendor/bundle/ruby/2.7.0/
文件夹,zip -r
的输出也显示了这一点。