AWS SDK for Rust の基礎 - AWS SDK for Rust

AWS SDK for Rust の基礎

AWS SDK for Rust を使用したプログラミングの基礎 (Rust プログラミング言語の基礎、SDK for Rust クレートに関する情報、プロジェクト設定、SDK for Rust による Tokio ランタイムの使用方法など) について説明します。

前提条件

AWS SDK for Rust を使用するには、Rust と Cargo がインストールされている必要があります。

次のオプションツールを IDE にインストールすると、コード補完やトラブルシューティングに役立てることができます。

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-s3aws-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> {