本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
从 Ruby 版 Amazon SDK 版本 1 或 2 迁移到 Amazon 适用于 Ruby 的 SDK 版本 3
本主题包含的详细信息可帮助您从适用于 Ruby 的 Amazon SDK 的版本 1 或 2 迁移到版本 3。
Side-by-side 用法
没有必要将适用于 Ruby 的 Amazon SDK 的版本 1 或 2 替换为版本 3。您可以在同一应用程序中一起使用它们。有关更多信息,请参阅此博客文章
下面是一个快速示例。
require 'aws-sdk-v1' # version 1 require 'aws-sdk' # version 2 require 'aws-sdk-s3' # version 3 s3 = AWS::S3::Client.new # version 1 s3 = Aws::S3::Client.new # version 2 or 3
您无需重写现有的工作版本 1 或 2 代码即可开始使用版本 3 开发工具包。有效的迁移策略是仅针对版本 3 开发工具包编写新代码。
一般区别
版本 3 在一个重要方面与版本 2 不同。
- 
            每项服务都作为单独的 Gem 提供。 
版本 2 在多个重要方面与版本 1 不同。
- 
            不同的根命名空间: Aws与Amazon。这样可以 side-by-side使用。
- 
            Aws.config– 现在是 vanilla Ruby 哈希,而不是方法。
- 
            严格的构造函数选项 - 在版本 1 开发工具包中构造客户端或资源对象时,会忽略未知构造函数选项。在版本 2 中,未知构造函数选项会触发 ArgumentError。例如:# version 1 AWS::S3::Client.new(http_reed_timeout: 10) # oops, typo'd option is ignored # version 2 Aws::S3::Client.new(http_reed_timeout: 10) # => raises ArgumentError
客户端区别
版本 2 和版本 3 中的客户端类之间没有区别。
在版本 1 和版本 2 之间,客户端类具有最少的外部区别。在构造客户端后,许多服务客户端都将具有兼容的接口。一些重要区别:
- 
            Aws::S3::Client:版本 1 Amazon S3 客户端类是手动编码的。版本 2 是从服务模型生成的。方法名称和输入在版本 2 中大不相同。
- 
            Aws::EC2::Client- 版本 2 对输出列表使用复数名称,版本 1 使用后缀_set。例如:# version 1 resp = AWS::EC2::Client.new.describe_security_groups resp.security_group_set #=> [...] # version 2 resp = Aws::EC2::Client.new.describe_security_groups resp.security_groups #=> [...]
- 
            Aws::SWF::Client– 版本 2 使用结构化响应,而版本 1 使用 vanilla Ruby 哈希。
- 
            服务类重命名 – 版本 2 对多个服务使用不同的名称: - 
                  Amazon::SimpleWorkflow变成Aws::SWF
- 
                  Amazon::ELB变成Aws::ElasticLoadBalancing
- 
                  Amazon::SimpleEmailService变成Aws::SES
 
- 
                  
- 
            客户端配置选项:一些版本 1 配置选项在版本 2 中被重命名。其他选项被删除或被替换。下面是主要的更改: - 
                  :use_ssl已删除。版本 2 到处使用 SSL。要禁用 SSL,您必须配置使用:endpoint的http://。
- 
                  :ssl_ca_file现在是:ssl_ca_bundle
- 
                  :ssl_ca_path现在是:ssl_ca_directory
- 
                  增加了 :ssl_ca_store。
- 
                  :endpoint现在必须是完全限定的 HTTP 或 HTTPS URI 而非主机名。
- 
                  为每个服务删除了 :*_port选项,现在替换为:endpoint。
- 
                  :user_agent_prefix现在是:user_agent_suffix
 
- 
                  
资源区别
版本 2 和版本 3 中的资源接口之间没有区别。
版本 1 和版本 2 中的资源接口之间存在显著区别。版本 1 是完全手动编码的,而版本 2 资源接口是从模型生成的。版本 2 资源接口明显更一致。一些系统区别包括:
- 
            单独的资源类:在版本 2 中,服务名称是模块而不是类。在此模块中,它为资源接口: # version 1 s3 = AWS::S3.new # version 2 s3 = Aws::S3::Resource.new
- 
            参考资源 – 版本 2 开发工具包将集合和单个资源 getter 分成两个不同的方法: # version 1 s3.buckets['bucket-name'].objects['key'].delete # version 2 s3.bucket('bucket-name').object('key').delete
- 
            批量操作:在版本 1 中,所有批量操作都是手动编码的实用程序。在版本 2 中,许多批量操作是通过 API 自动生成的批处理操作。版本 2 批处理接口与版本 1 大不相同。