

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 的基本概念 適用於 Rust 的 AWS SDK
<a name="fundamentals"></a>

了解使用 進行程式設計的基礎知識 適用於 Rust 的 AWS SDK，例如：Rust 程式設計語言基礎知識、適用於 Rust 的 SDK 木箱的相關資訊、專案組態，以及適用於 Rust 的 SDK 使用 Tokio 執行期。

## 先決條件
<a name="prerequisites"></a>

若要使用 適用於 Rust 的 AWS SDK，您必須安裝 Rust 和 Cargo。
+ 安裝 Rust 工具鏈：https：//[https://www.rust-lang.org/tools/install](https://www.rust-lang.org/tools/install)
+ 執行 命令來安裝`cargo-component`[工具](https://github.com/bytecodealliance/cargo-component)： `cargo install cargo-component`

### 建議的工具：
<a name="recommended-tools"></a>

下列選用工具可以安裝在 IDE 中，以協助程式碼完成和故障診斷。
+ rust-analyzer 延伸模組，請參閱 [Visual Studio Code 中的 Rust](https://code.visualstudio.com/docs/languages/rust)。
+ Amazon Q Developer，請參閱[在您的 IDE 中安裝 Amazon Q Developer 延伸模組或外掛程式](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/q-in-IDE-setup.html)。

## Rust 基本概念
<a name="rust-fundamentals"></a>

以下是 Rust 程式設計語言的一些基本概念，有助於了解。如需詳細資訊，所有參考皆來自 [Rust 程式設計語言](https://doc.rust-lang.org/book/title-page.html#the-rust-programming-language)。
+ `Cargo.toml` 是標準 Rust 專案組態檔案，其中包含相依性和專案的一些中繼資料。Rust 來源檔案具有`.rs`副檔名。請參閱 [Hello， Cargo！](https://doc.rust-lang.org/book/ch01-03-hello-cargo.html)。
  + `Cargo.toml` 您可以使用設定檔自訂 ，請參閱[使用發行設定檔自訂組建](https://doc.rust-lang.org/book/ch14-01-release-profiles.html)。這些設定檔完全無關 AWS，且與共用 AWS `config`檔案中使用設定檔無關。
  + 將程式庫相依性新增至專案和此檔案的常見方法是使用 `cargo add`。請參閱 [https://doc.rust-lang.org/cargo/commands/cargo-add.html](https://doc.rust-lang.org/cargo/commands/cargo-add.html)。
+ Rust 具有如下的基本函數結構。`let` 關鍵字會宣告變數，並可能與指派 (=) 配對。如果您未在 之後指定類型`let`，則編譯器會推斷類型。請參閱[變數和可變更性](https://doc.rust-lang.org/book/ch03-01-variables-and-mutability.html)。

  ```
  fn main() {
      let w = "world";
      println!("Hello {}!", w);
  }
  ```
+ 若要宣告`x`明確類型為 的變數`T`，Rust 會使用語法 `x: T`。請參閱[資料類型](https://doc.rust-lang.org/book/ch03-02-data-types.html)。
+ `struct X {}` 定義新類型 `X`。方法實作在自訂結構類型 上`X`。類型 的方法`X`會宣告為實作區塊字首為關鍵字 `impl`。在實作區塊中， `self`是指呼叫方法的結構執行個體。請參閱[關鍵字`impl`](https://doc.rust-lang.org/std/keyword.impl.html)和[方法語法](https://doc.rust-lang.org/book/ch05-03-method-syntax.html)。
+ 如果驚嘆號 ("！") 跟隨似乎是函數定義或函數呼叫的內容，則程式碼正在定義或呼叫巨集。請參閱[巨集](https://doc.rust-lang.org/book/ch19-06-macros.html?highlight=macro#macros)。
+ 在 Rust 中，無法復原的錯誤由`panic!`巨集表示。當程式遇到`panic!`將會停止執行的 時，請列印失敗訊息、展開、清除堆疊，然後結束。請參閱[使用 無法復原的錯誤`panic!`](https://doc.rust-lang.org/book/ch09-01-unrecoverable-errors-with-panic.html)。
+ Rust 不支援像其他程式設計語言一樣從基礎類別繼承功能；Rust 提供方法超載`traits`的方式。特徵可能會被視為概念上類似於 界面。不過，特徵和真正的界面有差異，通常在設計過程中使用不同。請參閱[特徵：定義共享行為](https://doc.rust-lang.org/book/ch10-02-traits.html)。
  + 多態性是指支援多種資料類型功能的程式碼，而不必個別寫入。Rust 透過列舉、特性和學名藥支援多形性。請參閱 [Inheritance as a Type System and as Code Sharing](https://doc.rust-lang.org/book/ch17-01-what-is-oo.html?#inheritance-as-a-type-system-and-as-code-sharing)。
+ Rust 對記憶體非常明確。智慧指標「是作用如同指標的資料結構，但也有額外的中繼資料和功能」。請參閱[智慧指標](https://doc.rust-lang.org/book/ch15-00-smart-pointers.html)。
  + 類型`Cow`是clone-on-write的智慧型指標，有助於在必要時將記憶體擁有權傳輸給發起人。請參閱 [https://doc.rust-lang.org/std/borrow/enum.Cow.html](https://doc.rust-lang.org/std/borrow/enum.Cow.html)。
  + 類型`Arc`是原子參考計數智慧指標，可計算配置的執行個體。請參閱 [https://doc.rust-lang.org/std/sync/struct.Arc.html](https://doc.rust-lang.org/std/sync/struct.Arc.html)。
+ 適用於 Rust 的 SDK 經常使用建置器模式來建構複雜類型。

## 適用於 Rust 的 AWS SDK 木箱基本概念
<a name="aws-sdk-crate-fundamentals"></a>
+ SDK for Rust 功能的主要核心木箱為 `aws-config`。這包含在大多數專案中，因為它提供從環境讀取組態的功能。

  ```
  $ cargo add aws-config
  ```
  + 請勿將此與呼叫 AWS 服務 的 混淆 AWS Config。由於這是一項服務，因此會遵循 AWS 服務 裝箱的標準慣例，稱為 `aws-sdk-config`。
+ 適用於 Rust 的 SDK 程式庫會分別分成不同的程式庫箱 AWS 服務。這些木箱可在 https：//[https://docs.rs/](https://docs.rs/) 取得。
+ AWS 服務 箱子遵循 的命名慣例`aws-sdk-[servicename]`，例如 `aws-sdk-s3`和 `aws-sdk-dynamodb`。

## 使用 的專案組態 AWS 服務
<a name="project-configuration-for-working-with-aws-services"></a>
+ 您需要為應用程式要使用的每個 AWS 服務 ，將木箱新增至您的專案。
+ 新增木箱的建議方法是透過執行 ，在專案的 目錄中使用命令列`cargo add [crateName]`，例如 `cargo add aws-sdk-s3`。
  + 這會在 `Cargo.toml`下將一行新增至專案的 `[dependencies]`。
  + 根據預設，這會將最新版的 木箱新增至您的專案。
+ 在您的來源檔案中，使用 `use`陳述式將項目從其箱子帶入範圍。請參閱 Rust 程式設計語言網站上的[使用外部套件](https://doc.rust-lang.org/book/ch07-04-bringing-paths-into-scope-with-the-use-keyword.html#using-external-packages)。
  + 木箱名稱通常使用連字號，但連字號會在實際使用木箱時轉換為底線。例如，在程式碼`use`陳述式中使用 `aws-config` 木箱做為：`use aws_config`。
+ 組態是一個複雜的主題。組態可以直接發生在程式碼中，也可以在環境變數或組態檔案中外部指定。如需詳細資訊，請參閱[在外部設定 適用於 Rust 的 AWS SDK 服務用戶端](config-external.md)。
  + 當 SDK 載入您的組態時，會記錄無效的值，而不是停止執行，因為大多數設定都有合理的預設值。若要了解如何開啟記錄，請參閱 [在適用於 Rust 的 AWS SDK 中設定和使用記錄](logging.md)。
  + 大多數環境變數和組態檔案設定會在程式啟動時載入一次。在您重新啟動程式之前，將不會看到值的任何更新。

## Tokio 執行時間
<a name="tokio-runtime"></a>
+ Tokio 是適用於 Rust 的 SDK 程式設計語言的非同步執行期，它會執行`async`任務。請參閱 [tokio.rs](http://tokio.rs/) 和 [docs.rs/tokio](http://docs.rs/tokio)。
+ 適用於 Rust 的 SDK 需要非同步執行時間。我們建議您將下列木箱新增至您的專案：

  ```
  $ cargo add tokio --features=full
  ```
+ `tokio::main` 屬性巨集會為您的程式建立非同步主要進入點。若要使用此巨集，請將其新增至`main`方法之前的行，如下所示：

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