Aspectos fundamentales del AWS SDK para Rust - AWS SDK para Rust

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.

Aspectos fundamentales del AWS SDK para Rust

Conozca los aspectos fundamentales de la programación con el AWS SDK para Rust, por ejemplo: los aspectos fundamentales del lenguaje de programación Rust, la información sobre el SDK para las cajas de Rust, la configuración de proyectos y el uso del tiempo de ejecución de Tokio por parte del SDK para Rust.

Requisitos previos

Para poder utilizar el AWS SDK para Rust, debe tener Rust y Cargo instalados.

Las siguientes herramientas opcionales se pueden instalar en el IDE para facilitar la finalización del código y la solución de problemas.

Aspectos fundamentales de Rust

A continuación se presentan algunos conceptos básicos del lenguaje de programación Rust que sería útil conocer. Todas las referencias para obtener más información proceden de El lenguaje programación Rust.

  • Cargo.toml es el archivo de configuración estándar de proyectos de Rust, que contiene las dependencias y algunos metadatos sobre el proyecto. Los archivos fuente de Rust tienen la extensión de archivo .rs. Consulte ¡Hola, Cargo!

    • El archivo Cargo.toml se puede personalizar con perfiles; consulte Personalización de compilaciones con perfiles de versión. Estos perfiles no tienen ninguna relación con el uso que AWS hace de los perfiles en el archivo config de AWS compartido y son totalmente independientes de él.

    • Una forma habitual de agregar dependencias de biblioteca al proyecto y a este archivo es usar cargo add. Consulte cargo-add.

  • Rust tiene una estructura de funciones básica como la que se muestra a continuación. La palabra clave let declara una variable y puede combinarse con una asignación (=). Si no especifica ningún tipo después de let, el compilador inferirá uno. Consulte Variables y mutabilidad.

    fn main() { let w = "world"; println!("Hello {}!", w); }
  • Para declarar una variable x con un tipo explícito T, Rust usa la sintaxis x: T. Consulte Tipos de datos.

  • struct X {} define el nuevo tipo X. Los métodos se implementan en el tipo de estructura personalizada X. Los métodos para el tipo X se declaran con bloques de implementación prefijados con la palabra clave impl. Dentro del bloque de implementación, self se refiere a la instancia de la estructura en la que se llamó el método. Consulte Palabra clave impl y Sintaxis de métodos.

  • Si es un signo de exclamación («!») sigue a lo que parece ser una definición de función o una llamada a una función, entonces el código define o llama a una macro. Consulte Macros.

  • En Rust, los errores irrecuperables se representan mediante la macro panic! Cuando un programa encuentra un panic!, deja de ejecutarse, imprime un mensaje de error, se deshace, limpia la pila y se cierra. Consulte Errores irrecuperables con panic!

  • Rust no admite la herencia de funciones de clases base como otros lenguajes de programación; los traits son la forma en que Rust proporciona la sobrecarga de métodos. Los indicadores pueden considerarse conceptualmente similares a una interfaz. Sin embargo, los indicadores y las interfaces verdaderas tienen diferencias y, a menudo, se utilizan de forma diferente en el proceso de diseño. Consulte Indicadores: definición del comportamiento compartido.

    • El polimorfismo se refiere al código que admite la funcionalidad de varios tipos de datos sin tener que escribir cada uno de ellos de manera individual. Rust admite el polimorfismo mediante enumeraciones, indicadores y genéricos. Consulte La herencia como sistema de tipos y como código compartido.

  • Rust es muy explícito en cuanto a la memoria. Los indicadores inteligentes «son estructuras de datos que actúan como un indicador, pero también tienen metadatos y capacidades adicionales». Consulte Indicadores inteligentes.

    • El tipo Cow es un indicador inteligente clonado al escribir que ayuda a transferir la propiedad de la memoria al llamante cuando es necesario. Consulte Enum std::borrow::Cow.

    • El tipo Arc es un indicador inteligente con recuento de referencias atómico que cuenta las instancias asignadas. Consulte Struct std::sync::Arc.

  • El SDK de Rust utiliza con frecuencia el patrón generador para crear tipos complejos.

Aspectos fundamentales de la caja AWS SDK para Rust

  • La caja principal de la funcionalidad del SDK para Rust es aws-config. Se incluye en la mayoría de los proyectos porque proporciona la funcionalidad de leer la configuración del entorno.

    $ cargo add aws-config
    • No confundirlo con el Servicio de AWS llamado AWS Config. Dado que se trata de un servicio, sigue la convención estándar de las cajas de Servicio de AWS y se llama aws-sdk-config.

  • La biblioteca del SDK para Rust se divide en diferentes cajas de biblioteca según cada Servicio de AWS. Estas cajas están disponibles en https://docs.rs/.

  • Las cajas de Servicio de AWS siguen la convención de nomenclatura deaws-sdk-[servicename], como aws-sdk-s3 y aws-sdk-dynamodb.

Configuración del proyecto para trabajar con Servicios de AWS

  • Deberá agregar una caja a su proyecto para cada Servicio de AWS que desee que utilice la aplicación.

  • La forma recomendada de agregar una caja es mediante la línea de comandos en el directorio del proyecto, ejecutando cargo add [crateName], por ejemplo cargo add aws-sdk-s3.

    • Se agregará una línea al archivo Cargo.toml del proyecto en [dependencies].

    • De forma predeterminada, se agregará la última versión de la caja al proyecto.

  • En el archivo fuente, utilice la instrucción use para incluir elementos de sus cajas al ámbito. Consulte Uso de paquetes externos en el sitio web del lenguaje de programación Rust.

    • Los nombres de las cajas suelen estar separados con guiones, pero estos se convierten en guiones bajos cuando se utiliza la caja. Por ejemplo, la caja aws-config se usa en la instrucción use del código como: use aws_config.

  • La configuración es un tema complejo. La configuración puede realizarse directamente en el código o especificarse externamente en variables de entorno o archivos de configuración. Para obtener más información, consulte Configuración externa de clientes de servicio de AWS SDK para Rust.

    • Cuando el SDK carga la configuración, se registran los valores no válidos en lugar de detener la ejecución, ya que la mayoría de las configuraciones tienen valores predeterminados razonables. Para obtener información sobre el registro, consulte Configuración y uso del registro en AWS SDK de Rust.

    • La mayoría de las variables de entorno y los ajustes del archivo de configuración se cargan una vez al iniciarse el programa. Las actualizaciones de los valores no se verán hasta que reinicie el programa.

Tiempo de ejecución de Tokio

  • Tokio es un tiempo de ejecución asíncrono para el lenguaje de programación del SDK para Rust, que ejecuta las tareas async. Consulte tokio.rs y docs.rs/tokio.

  • El SDK para Rust requiere un tiempo de ejecución asíncrono. Se recomienda agregar la siguiente caja a los proyectos:

    $ cargo add tokio --features=full
  • La macro de atributos tokio::main crea un punto de entrada principal asíncrono al programa. Para poder utilizar esta macro, agréguela a la línea anterior al método main, como se muestra a continuación:

    #[tokio::main] async fn main() -> Result<(), Error> {