我在一个厨师食谱中遇到了这个问题,所以下面的回答绝对是以厨师为中心的。
Amazon 于 2015 年 2 月上旬发布了 aws-sdk 的第 2 版。第 2 版并不完全向后兼容第 1 版。
因此,您必须做出决定——您是满足于版本 1 的功能,还是想要版本 2 的功能?
如果您对版本 1 感到满意,也许在短期内,有必要让 Chef 显式加载版本 1,因为默认情况下,它似乎使用最新版本。为此,您必须在加载 chef_gem aws-sdk 的配方中指定要加载的版本属性。修改看起来像这样(可能在相关食谱的 default.rb 中实现):
chef_gem "aws-sdk" do
action :nothing
# Source: https://aws.amazon.com/releasenotes/Ruby?browse=1
version '1.62.0'
end.run_action(:install)
更新食谱元数据中的版本,然后将食谱上传到您的 Chef 服务器。更新环境中的说明书版本,然后将环境上传到您的 Chef 服务器。
收敛后,在您的实例上运行 gem 列表以查看 gem 版本:
在 PowerShell PS C:\Users\Administrator> gem list | 选择字符串 aws-sdk
在 Linux 上:gem 列表 | grep -i aws-sdk
这些是典型的结果:
aws-sdk (2.0.27, 1.62.0)
aws-sdk-core (2.0.27)
aws-sdk-resources (2.0.27)
aws-sdk-v1 (1.62.0)
请注意,最后一个指定 aws-sdk-v1。现在,您必须更新您的配方以使用旧版本的 aws-sdk。改变这个:
require 'aws-sdk'
对此:
require 'aws-sdk-v1'
更新metadata.rb中的版本,上传cookbook,更新环境文件中的版本,上传环境,下次收敛之后应该就好了。
此博客文章包含此问题的更多详细信息和解决方案:
http ://ruby.awsblog.com/post/TxFKSK2QJE6RPZ/Upcoming-Stable-Release-of-AWS-SDK-for-Ruby-Version-2