Rust を使ってみる

このドキュメントでは、ローカルの Rust 開発環境を設定し、Rust 用の Cloud クライアント ライブラリのいずれかをインストールして、最初の Google CloudAPI リクエストを実行する方法について説明します。

始める前に

このドキュメントのコマンドを実行する前に、次の前提条件を満たしてください。

Rust プロジェクトを作成する

プログラムのバイナリ クレートを作成する手順は次のとおりです。

  1. バイナリ クレートを作成します。

    cargo new my-project
    
  2. 新しいプロジェクト ディレクトリに移動します。

    cd my-project
    

Google Cloud クライアント ライブラリをインストールする

Rust 用 Cloud クライアント ライブラリは、Secret Manager などのGoogle Cloud サービスに慣用的な Rust クライアントを提供します。Secret Manager クライアント ライブラリを追加してビルドする手順は次のとおりです。

  1. プロジェクトで Secret Manager API を有効にします。

    gcloud services enable secretmanager.googleapis.com
    
  2. Secret Manager クライアント ライブラリをプロジェクトに追加します。

    cargo add google-cloud-secretmanager-v1
    
  3. ページネーション ヘルパーの google-cloud-gax クレートを追加します。

    cargo add google-cloud-gax
    
  4. 非同期ランタイム用の tokio クレートを追加します。

    cargo add tokio --features macros,rt-multi-thread
    
  5. src/main.rs の内容を次のコードに置き換えて、プロジェクト内のシークレットを一覧表示します。

    #[tokio::main]
    async fn main() -> Result<(), Box<dyn std::error::Error>> {
        use google_cloud_gax::paginator::ItemPaginator as _;
        use google_cloud_secretmanager_v1::client::SecretManagerService;
        let project_id = std::env::args().nth(1).unwrap();
        let client = SecretManagerService::builder().build().await?;
    
        let mut items = client
            .list_secrets()
            .set_parent(format!("projects/{project_id}"))
            .by_item();
        while let Some(item) = items.next().await {
            println!("{}", item?.name);
        }
        Ok(())
    }

  6. プログラムをビルドして、エラーなくコンパイルされることを確認します。

    cargo build
    

Rust プログラムを実行する

ローカル環境を認証して、サンプル プログラムを実行します。

  1. ローカル環境のアプリケーションのデフォルト認証情報を構成します。

    gcloud auth application-default login
    
  2. Google Cloud プロジェクト ID を引数として渡して、プログラムを実行します。

    PROJECT_ID=$(gcloud config get project)
    cargo run -- "${PROJECT_ID}"
    

    プログラムは、プロジェクト内のシークレットの名前を出力します。プロジェクトにまだシークレットがない場合は、シークレットを作成し、コマンドを再度実行して出力に表示します。

クリーンアップ

このドキュメントで使用したリソースについて Google Cloud アカウントに課金されないようにするには、作成したテスト シークレットを削除し、完了したらローカルの my-project ディレクトリを削除します。