はじめに
この記事では 手を動かしながらAWSが提供するAWS SDK for Rust(以下、AWS SDK)を学習していく記事です。主な内容としては実践したときのメモを中心に書きます。
(忘れやすいことなど)誤りなどがあれば書き直していく予定です。
RustでAWS SDKが使えるようになったとさ
投稿日: Nov 27, 2023
本日、AWS は AWS SDK for Rust の一般提供を発表しました。これにより、お客様はこれを本番環境のワークロードに使用できるようになります。AWS SDK for Rust を使用すると、開発者は AWS のサービスを操作し、Rust のコードとベストプラクティスに従った API を楽しむことができます。
Rust のコードとベストプラクティスに従った API を楽しむことができます
RustでAPIを楽しむことができる!!楽しめる!これはやるしかないですね!!
事前準備
まずはセットアップをしましょう。動作環境としてはcurlが動くLinuxかもしくはMacOSが望ましいです。WindowsでもWSLやDockerなどで動作すると思います。
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
インストールが完了したらソースコマンドを実行します。
source "$HOME/.cargo/env"
最後に動作確認でバージョンを確認してみます。
rustc -V
実行結果
rustc 1.74.0 (79e9716c9 2023-11-13)
ドキュメントを見ていこう
今回はEC2クライアントの機能をうまいこと使ってVPCの情報を引用してみます。
つまりはHello,World
的なものを作っていきます。
準備体操
プロジェクト作成からHello,Worldまで実行
ec2-for-rust
というプロジェクトをデスクトップ上に作成します。
まずはディレクトリを移動します。
cd ~/Desktop
プロジェクトを作成します。
cargo new ec2-for-rust
プロジェクトのディレクトリに変更します。
cd ec2-for-rust
プロジェクトを実行してHello,World
が実行できることを確認します。
cargo run
実行結果
Finished dev [unoptimized + debuginfo] target(s) in 0.00s
Running `target/debug/ec2-for-rust`
Hello, world!
AWS SDKをセットアップ
Cargo.tomlを追記する
下記の設定をCargo.toml
に追記します。
[dependencies]
aws-config = { version = "1.0.3", features = ["behavior-version-latest"] }
aws-sdk-ec2 = "1.5.0"
tokio = { version = "1", features = ["full"] }
cargo install
もしくは
aws-sdk-ec2
パッケージを追加します。
cargo add aws-sdk-ec2
コードを修正
use aws_sdk_ec2 as ec2;
#[::tokio::main]
async fn main() -> Result<(), ec2::Error> {
let config = aws_config::load_from_env().await;
let client = aws_sdk_ec2::Client::new(&config);
// ... make some calls with the client
let vpcs = client.describe_vpcs().send().await?;
println!(
"{:?}",
vpcs.vpcs()[0]
.vpc_id()
.as_deref()
.unwrap_or_default()
.as_bytes()
);
println!("{:?}", Some("vpc".as_bytes()));
Ok(())
}
プロジェクトを実行するとVPC IDが取得できます。VPCを作成していない場合は作成してから実行しましょう。
cargo run
まとめ
癖がありましたが、Rustがかける人なら扱えるかなと思えるところです。
Pythonを使ってSDKを動かすことが多いですが、Rustは実行速度が速いので実行速度を上げてリソースを取得したい場合に有効かと思います。
ただ、RustのユーザーでかつAWSが扱える人となるとハードルがバチクソ上がるので組織やチームで使う場合はわりと難易度が高いかもしれません。(技術としては魅力的だけども!)