Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Migrar de la versión 1 o 2 a la versión 3 de AWS SDK para Ruby
El objetivo de este tema es ayudar a migrar de la versión 1 o 2 de AWS SDK para Ruby a la versión 3.
Uso en paralelo
No es necesario reemplazar la versión 1 o 2 de AWS SDK para Ruby por la versión 3. Puede utilizarlas de forma conjunta en la misma aplicación. Para obtener más información, consulte esta entrada del blog
Un ejemplo 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
No es necesario volver a escribir el código funcional de la versión 1 o 2 existente para comenzar a utilizar el SDK de la versión 3. Una estrategia de migración válida es escribir solo el nuevo código con respecto al SDK de la versión 3.
Diferencias generales
La versión 3 difiere de la versión 2 en un aspecto importante.
-
Cada servicio está disponible como una gema independiente.
La versión 2 difiere de la versión 1 en varios aspectos importantes.
-
El espacio de nombres raíz es distinto:
Aws
frente aAWS
. Esto permite realizar un uso en paralelo. -
Aws.config
: ahora es un hash de Ruby simple, en lugar de un método. -
Estrictas opciones del constructor: al construir un cliente o un objeto de recurso en el SDK de la versión 1, no se tienen en cuenta las opciones del constructor desconocidas. En la versión 2, las opciones del constructor desconocidas activan un
ArgumentError
. Por ejemplo:# 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
Diferencias del cliente
No existen importantes diferencias entre las clases de cliente de la versión 2 y la versión 3.
Entre la versión 1 y 2, las clases del cliente presentan menos diferencias externas. Muchos clientes de servicios tendrán interfaces compatibles tras la construcción del cliente. Algunas de las diferencias más destacadas:
-
Aws::S3::Client
: en la versión 1, la clase del cliente de Amazon S3 tiene codificación manual. La versión 2 se genera a partir de un modelo de servicio. Los nombres de método y las entradas son muy diferentes en la versión 2. -
Aws::EC2::Client
: la versión 2 utiliza nombre en plural para las listas de salida, mientras que la versión 1 utiliza el sufijo_set
. Por ejemplo:# 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
: la versión 2 utiliza respuestas estructuradas, mientras que la versión 1 utiliza hash de Ruby simples. -
Nombres distintos según la clase de servicio: la versión 2 utiliza un nombre diferente para los distintos servicios:
-
AWS::SimpleWorkflow
se ha convertido enAws::SWF
-
AWS::ELB
se ha convertido enAws::ElasticLoadBalancing
-
AWS::SimpleEmailService
se ha convertido enAws::SES
-
-
Opciones de configuración de clientes: algunas de las opciones de configuración de la versión 1 han cambiado de nombre en la versión 2. Otras se han eliminado o reemplazado. A continuación, se muestran los principales cambios:
-
Se ha eliminado
:use_ssl
. La versión 2 utiliza SSL para todo. Para deshabilitar SSL debe configurar un:endpoint
que utilicehttp://
. -
:ssl_ca_file
ahora es:ssl_ca_bundle
-
:ssl_ca_path
ahora es:ssl_ca_directory
-
:ssl_ca_store
añadido. -
Ahora
:endpoint
debe ser un URI HTTP o HTTPS completo en lugar de un nombre de host. -
Se han quitado las opciones
:*_port
de cada servicio y ahora se han reemplazado por:endpoint
. -
:user_agent_prefix
ahora es:user_agent_suffix
-
Diferencias en los recursos
No existen importantes diferencias entre las interfaces de recurso de la versión 2 y la versión 3.
Existen importantes diferencias entre las interfaces de recurso de la versión 1 y la versión 2. Toda la versión 1 está codificada manualmente, mientras que las interfaces de recurso de la versión 2 se generan a partir de un modelo. Las interfaces de recurso de la versión 2 son significativamente más coherentes. Algunas de las diferencias entre sistemas son:
-
Clase de recurso independiente: en la versión 2, el nombre del servicio es un módulo, no una clase. En este módulo se encuentra la interfaz de recurso:
# version 1 s3 = AWS::S3.new # version 2 s3 = Aws::S3::Resource.new
-
Referencia a los recursos: el SDK de la versión 2 separa los métodos getter de las colecciones y los recursos individuales en dos métodos diferentes:
# version 1 s3.buckets['bucket-name'].objects['key'].delete # version 2 s3.bucket('bucket-name').object('key').delete
-
Operaciones por lotes: en la versión 1, todas las operaciones por lotes eran utilidades con codificación manual. En la versión 2, muchas operaciones por lotes son operaciones procesadas por lotes de generación automática a través de la API. Las interfaces procesadas por lotes de la versión 2 son muy distintas de la versión 1.