适用于 Rust 的 AWS SDK 的基础知识 - 适用于 Rust 的 AWS SDK

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

适用于 Rust 的 AWS SDK 的基础知识

学习使用适用于 Rust 的 AWS SDK 进行编程的基础知识,例如:Rust 编程语言基础知识、有关适用于 Rust 的 SDK crate 的信息、项目配置以及适用于 Rust 的 SDK 对 Tokio 运行时的使用。

先决条件

要使用适用于 Rust 的 AWS SDK,您必须安装 Rust 和 Cargo。

可以在 IDE 中安装以下可选工具,以帮助完成代码和进行故障排除。

Rust 基础知识

以下是 Rust 编程语言的一些基础知识,了解这些基础知识会很有帮助。有关更多信息的所有参考资料均来自 Rust 编程语言

  • Cargo.toml 是标准 Rust 项目配置文件,它包含该项目的依赖项和一些元数据。Rust 源文件具有 .rs 文件扩展名。请参阅 Hello, Cargo!

    • 您可以使用配置文件自定义 Cargo.toml,请参阅使用版本配置文件自定义构建。这些配置文件与 AWS 在共享的 AWS config 文件中使用的配置文件完全无关且相互独立。

    • 向项目和此文件添加库依赖项的常用方法是使用 cargo add。请参阅。cargo-add

  • Rust 有一个基本函数结构,如下所示。let 关键字声明了变量,可以与赋值(=)结合使用。如果您没有在 let 之后指定类型,编译器会推断出类型。请参阅变量和可变性

    fn main() { let w = "world"; println!("Hello {}!", w); }
  • 要声明变量 x 具有显式类型 T,Rust 使用语法 x: T。请参阅数据类型

  • struct X {} 定义新类型 X。方法是在自定义结构类型 X 上实现的。类型 X 的方法是用以关键字 impl 为前缀的实现块声明的。在实现块中,self 是指调用该方法的结构的实例。请参阅关键字 impl方法语法

  • 如果一个感叹号(“!”)跟在看似函数定义或函数调用的后面,则表示代码正在定义或调用宏。请参阅

  • 在 Rust 中,不可恢复的错误由 panic! 宏表示。当程序遇到 panic! 时,它会停止运行,打印失败消息,展开,清理堆栈,然后退出。请参阅 panic! 不可恢复的错误

  • 与其他编程语言不同,Rust 不支持从基类继承功能;Rust 通过 traits 提供方法重载。特性在概念上可视为类似于接口。但是,特性和真实接口存在差异,并且在设计过程中通常以不同的方式使用。请参阅特性:定义共享行为

    • 多态性是指代码支持多种数据类型的功能,而无需单独为每种数据类型编写代码。Rust 通过枚举、特性和泛型支持多态性。请参阅继承作为类型系统和代码共享

  • Rust 在内存方面非常显式。智能指针“是像指针一样起作用的数据结构,但也具有额外的元数据和功能”。请参阅智能指针

    • 类型 Cow 是一个写时克隆智能指针,可帮助在必要时将内存所有权转移给调用方。请参阅。Enum std::borrow::Cow

    • 类型 Arc 是用于计算已分配实例的原子引用计数智能指针。请参阅。Struct std::sync::Arc

  • 适用于 Rust 的 SDK 经常使用生成器模式来构造复杂类型。

适用于 Rust 的 AWS SDK crate 基础知识

  • 适用于 Rust 的 SDK 功能的主要核心 crate 是 aws-config。它之所以包含在大多数项目中,是因为它提供了从环境中读取配置的功能。

    $ cargo add aws-config
    • 不要将此与名为 AWS Config 的 AWS 服务混淆。因为这是一项服务,所以它遵循 AWS 服务 crate 的标准约定,称为 aws-sdk-config

  • 适用于 Rust 的 SDK 库按每个 AWS 服务 分成不同的库 crate。这些 crate 可通过 https://docs.rs/ 获取。

  • AWS 服务 crate 遵循 aws-sdk-[servicename] 的命名约定,例如 aws-sdk-s3aws-sdk-dynamodb

用于与 AWS 服务结合使用的项目配置

  • 对于您希望应用程序使用的每个 AWS 服务,您都需要在项目中添加一个 crate。

  • 添加 crate 的推荐方法是在项目目录中使用命令行运行 cargo add [crateName],例如 cargo add aws-sdk-s3

    • 这将向项目 Cargo.toml 中的 [dependencies] 下添加一行。

    • 默认情况下,这会将最新版本的 crate 添加到项目中。

  • 在源文件中,使用 use 语句将 crate 中的项目放入作用域。请参阅 Rust 编程语言网站上的使用外部程序包

    • crate 名称通常使用连字符,但是在实际使用 crate 时,连字符会被转换为下划线。例如,aws-config crate 在代码 use 语句中使用,例如:use aws_config

  • 配置是一个复杂的主题。配置可以直接在代码中进行,也可以在外部环境变量或配置文件中指定。有关更多信息,请参阅 在外部配置适用于 Rust 的 AWS SDK 服务客户端

    • 当 SDK 加载配置时,系统会记录无效值,而不是停止执行,因为大多数设置都有合理的默认值。要了解如何启用日志记录功能,请参阅在适用于 Rust 的 AWS SDK 中配置和使用日志记录

    • 大多数环境变量和配置文件设置会在程序启动时加载一次。在重新启动程序之前,不会看到对这些值的任何更新。

Tokio 运行时

  • Tokio 是适用于 Rust 的 SDK 编程语言的一个异步运行时,它执行 async 任务。请参阅 tokio.rsdocs.rs/tokio

  • 适用于 Rust 的 SDK 需要异步运行时。建议您在项目中添加以下 crate:

    $ cargo add tokio --features=full
  • tokio::main 属性宏为程序创建一个异步主入口点。要使用此宏,请将其添加到 main 方法前面的行中,如下所示:

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