

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Migração do AWS SDK for Ruby versão 1 ou 2 para o SDK AWS for Ruby versão 3
<a name="migrating-to-v3"></a>

Este tópico inclui detalhes para ajudá-lo a migrar da versão 1 ou 2 do AWS SDK for Ruby para a versão 3.

## Side-by-side uso
<a name="side-by-side-usage"></a>

Não é necessário substituir a versão 1 ou 2 do AWS SDK for Ruby pela versão 3. Você pode usá-las em conjunto no mesmo aplicativo. Veja esta [postagem de blog](http://ruby.awsblog.com/post/TxFKSK2QJE6RPZ/Upcoming-Stable-Release-of-AWS-SDK-for-Ruby-Version-2) para obter mais informações.

Um exemplo rápido.

```
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
```

Não é necessário reescrever o código existente da versão 1 ou 2 em funcionamento para começar a usar o SDK da versão 3. Uma estratégia de migração válida é simplesmente escrever um novo código com base no SDK da versão 3.

## Diferenças gerais
<a name="general-differences"></a>

A versão 3 difere da versão 2 de uma maneira importante.
+ Cada serviço está disponível como um gem separado.

A versão 2 difere da versão 1 de várias maneiras importantes.
+ Namespace raiz diferente – `Aws` versus `AWS`. Isso permite o side-by-side uso.
+  `Aws.config` — agora é um hash Ruby vanilla, em vez de um método.
+ Opções de construtor restritas - Ao construir um objeto de cliente ou recurso no SDK da versão 1, opções de construtor desconhecidas são ignoradas. Na versão 2, as opções de construtor desconhecidas acionam um `ArgumentError`. Por exemplo:

  ```
  # 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
  ```

## Diferenças de clientes
<a name="client-differences"></a>

Não há diferenças entre as classes de cliente na versão 2 e na versão 3.

Entre a versão 1 e a versão 2, as classes de clientes têm o menor número possível de diferenças externas. Muitos clientes de serviços terão interfaces compatíveis após a construção do cliente. Algumas diferenças importantes:
+  `Aws::S3::Client` - A classe de cliente do Amazon S3 na versão 1 foi codificada manualmente. A versão 2 é gerada a partir de um modelo de serviço. Os nomes e entradas do método são muito diferentes na versão 2.
+  `Aws::EC2::Client` - A versão 2 usa nomes plurais para listas de saída, enquanto a versão 1 usa o sufixo `_set`. Por exemplo:

  ```
  # 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` – a versão 2 usa respostas estruturadas, enquanto a versão 1 usa hashes Ruby vanilla.
+ Renomeações de classes de serviços – a versão 2 usa um nome diferente para vários serviços:
  +  `AWS::SimpleWorkflow` se tornou `Aws::SWF` 
  +  `AWS::ELB` se tornou `Aws::ElasticLoadBalancing` 
  +  `AWS::SimpleEmailService` se tornou `Aws::SES` 
+ Opções de configuração de cliente: algumas das opções de configuração da versão 1 foram renomeadas na versão 2. Outras são removidas ou substituídas. Veja a seguir as principais mudanças:
  +  `:use_ssl` foi removido. A versão 2 usa SSL em todos os locais. Para desabilitar o SSL, você deve configurar um `:endpoint` que use `http://`.
  +  `:ssl_ca_file` é agora `:ssl_ca_bundle` 
  +  `:ssl_ca_path` é agora `:ssl_ca_directory` 
  + Adição do `:ssl_ca_store`.
  +  O `:endpoint` agora deve ser um URI HTTP ou HTTPS totalmente qualificado, em vez de um nome de host.
  + As opções de `:*_port` foram removidas para cada serviço, agora são substituídas por `:endpoint`.
  +  `:user_agent_prefix` é agora `:user_agent_suffix` 

## Diferenças de recursos
<a name="resource-differences"></a>

Não há diferenças entre as interfaces de recursos na versão 2 e na versão 3.

Existem diferenças significativas entre as interfaces de recursos na versão 1 e na versão 2. A versão 1 era codificada manualmente na íntegra, enquanto as interfaces de recursos da versão 2 são geradas a partir de um modelo. As interfaces de recursos da versão 2 são significativamente mais consistentes. Algumas das diferenças sistêmicas incluem:
+ Classe de recurso separada: na versão 2, o nome do serviço é um módulo, não uma classe. Neste módulo, ela é a interface de recurso:

  ```
  # version 1
  s3 = AWS::S3.new
  
  # version 2
  s3 = Aws::S3::Resource.new
  ```
+ Referência a recursos – o SDK da versão 2 separa coleções e getters de recursos individuais em dois métodos diferentes:

  ```
  # version 1
  s3.buckets['bucket-name'].objects['key'].delete
  
  # version 2
  s3.bucket('bucket-name').object('key').delete
  ```
+ Operações em lotes: na versão 1, todas as operações em lotes eram utilitários codificados manualmente. Na versão 2, muitas operações em lotes são operações em lotes geradas automaticamente por meio da API. **As interfaces de lote de versão 2 são muito diferentes daquelas da versão 1.** 