我在 Chef 食谱中遇到了这个问题,所以下面的回答肯定是以 Chef 为中心的。
亚马逊于 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 列表 |选择字符串 aws-sdk
在 Linux 上:
宝石清单 | 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