Migrar de la versión 1 o 2 a la versión 3 de AWS SDK para Ruby - AWS SDKpara Ruby

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 a AWS. 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 en Aws::SWF

    • AWS::ELB se ha convertido en Aws::ElasticLoadBalancing

    • AWS::SimpleEmailService se ha convertido en Aws::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 utilice http://.

    • :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.