AWS SDK for Rust の基礎
AWS SDK for Rust を使用したプログラミングの基礎 (Rust プログラミング言語の基礎、SDK for Rust クレートに関する情報、プロジェクト設定、SDK for Rust による Tokio ランタイムの使用方法など) について説明します。
前提条件
AWS SDK for Rust を使用するには、Rust と Cargo がインストールされている必要があります。
-
Rust ツールチェーン: https://www.rust-lang.org/tools/install
をインストールします。 -
cargo install cargo-componentコマンドを実行して、cargo-componentツールをインストールします
推奨ツール:
次のオプションツールを IDE にインストールすると、コード補完やトラブルシューティングに役立てることができます。
-
rust-analyzer 拡張機能については、「Rust in Visual Studio Code
」を参照してください。 -
Amazon Q Developer については、「IDE に Amazon Q Developer 拡張機能またはプラグインをインストールする」を参照してください。
Rust の基礎
以下は、知っておくと役立つ Rust プログラミング言語の基本です。詳細に情報についてはすべての参照先は、「Rust プログラミング言語
-
Cargo.tomlは標準の Rust プロジェクト設定ファイルで、プロジェクトに関する依存関係とメタデータが含まれています。Rust ソースファイルには、.rsファイル拡張子があります。「Hello, Cargo!」を参照してください。 -
Cargo.tomlはプロファイルでカスタマイズできます。「リリースプロファイルを使用したビルドのカスタマイズ」を参照してください。これらのプロファイルは、共有 AWS configファイル内での AWS によるプロファイルの使用とは完全に無関係で独立しています。 -
ライブラリの依存関係をプロジェクトに追加する一般的な方法は、
cargo addを使用することです。「cargo-add」を参照してください。
-
-
Rust には、次のような基本的な関数構造があります。
letキーワードは変数を宣言し、割り当て (=) とペアになる場合があります。letの後に型を指定しない場合、コンパイラは型を推測します。「変数と可変性」を参照してください。 fn main() { let w = "world"; println!("Hello {}!", w); } -
明示的な型
Tを持つ変数xを宣言するために、Rust はx: T構文を使用します。「データ型」を参照してください。 -
struct X {}は新しい型Xを定義します。メソッドは、カスタム構造体の型Xに実装されます。型Xのメソッドは、キーワードimplのプレフィックスが付いた実装ブロックで宣言されます。実装ブロック内では、selfはメソッドが呼び出された構造体のインスタンスを参照します。「キーワードimpl」および「メソッド構文 」を参照してください。 -
関数定義または関数呼び出しと思われる文の後に感嘆符 (!) が続く場合、そのコードはマクロを定義または呼び出しています。「マクロ
」を参照してください。 -
Rust では、回復不能なエラーは
panic!マクロによって表されます。プログラムでpanic!が発生すると、失敗メッセージを出力して、アンワインドし、スタックをクリーンアップして終了します。「panic!による回復不可能なエラー」を参照してください。 -
Rust は、他のプログラミング言語のようにベースクラスからの機能の継承をサポートしていません。
traitsこそが Rust がメソッドのオーバーロードを実行する手段です。トレイトは、概念的にはインターフェイスに似ていると考えることができます。ただし、トレイトと真のインターフェイスには違いがあり、多くの場合、設計プロセスで異なる方法で使用されます。「トレイト: 共通の振る舞いを定義する」を参照してください。 -
多相とは、個々のデータ型を個別に記述することなく、複数のデータ型に対応する機能をサポートするコードのことです。Rust は、列挙型、トレイト、ジェネリクスを通じて多相をサポートしています。「型システム、およびコード共有としての継承
」を参照してください。
-
-
Rust は、メモリについて非常に明示的です。スマートポインタは、「ポインタのように振る舞うが、追加のメタデータと機能を持つデータ構造」です。「スマートポインタ
」を参照してください。 -
Cow型はクローンオンライトのスマートポインタであり、必要に応じてメモリの所有権を呼び出し元に転送するのに役立ちます。「Enum std::borrow::Cow」を参照してください。 -
Arc型は、割り当てられたインスタンスをカウントするアトミック参照カウント型スマートポインタです。「Struct std::sync::Arc」を参照してください。
-
-
SDK for Rust は、複雑な型を構築するためにビルダーパターンを頻繁に使用します。
AWS SDK for Rust クレートの基礎
-
SDK for Rust 機能のプライマリコアクレートは
aws-configです。これは、環境から設定を読み取る機能があるため、ほとんどのプロジェクトに含まれています。$cargo add aws-config-
これを AWS Config と呼ばれる AWS のサービス と混同しないでください。これはサービスであり、AWS のサービス クレートの標準規則に従って
aws-sdk-configと呼ばれます。
-
-
SDK for Rust ライブラリは、AWS のサービス ごとに異なるライブラリクレートに分割されます。これらのクレートは https://docs.rs/
で入手できます。 -
AWS のサービス クレートは、
aws-sdk-s3やaws-sdk-などの[servicename]aws-sdk-dynamodbの命名規則に従います。
AWS のサービスを操作するためのプロジェクト設定
-
アプリケーションで使用する各AWS のサービス のプロジェクトにクレートを追加する必要があります。
-
プロジェクトディレクトリ内でコマンドラインを使用して、
cargo add aws-sdk-s3などのcargo addを実行してクレートを追加する方法が推奨されます。[crateName]-
これにより、
Cargo.tomlの下のプロジェクトの[dependencies]に行が追加されます。 -
デフォルトでは、これによりクレートの最新バージョンがプロジェクトに追加されます。
-
-
ソースファイルで、
useステートメントを使用して、クレートの項目をスコープ内に取り込みます。Rust プログラミング言語ウェブサイトの「外部のパッケージを使う」を参照してください。 -
クレート名はハイフンで区切られることがよくありますが、実際にクレートを使用する際にはハイフンがアンダースコアに変換されます。例えば、
aws-configクレートはコードuseステートメントでuse aws_configとして使用されます。
-
-
設定は複雑なトピックです。設定はコードで直接行うことも、環境変数や設定ファイルの外部で指定することもできます。詳細については、「外部で AWS SDK for Rust サービスクライアントを設定する」を参照してください。
-
SDK によって設定を読み込むと、ほとんどの設定に妥当なデフォルトが存在するため、無効な値は実行を停止せずログに記録されます。ログ記録を有効にする方法については、「AWS SDK for Rust でのログ記録の設定と使用」を参照してください。
-
大部分の環境変数と設定ファイル設定は、プログラムの開始時に 1 回ロードされます。値の更新は、プログラムを再起動するまで表示されません。
-
Tokio ランタイム
-
Tokio は SDK for Rust プログラミング言語の非同期ランタイムであり、
asyncタスクを実行します。「tokio.rs」および「docs.rs/tokio 」を参照してください。 -
SDK for Rust には非同期ランタイムが必要です。次のクレートをプロジェクトに追加することをお勧めします。
$cargo add tokio --features=full -
tokio::main属性マクロは、プログラムへの非同期メインエントリポイントを作成します。このマクロを使用するには、次に示すように、mainメソッドの前の行に追加します。#[tokio::main] async fn main() -> Result<(), Error> {