こんにちは、エンジニアの君島です。
先月、AWS SDK for RustがGAになりましたね。
Rustと言えば、以前から開発用のα版のSDKは提供されていて、AWS LambdaもRustで開発することもできていましたが、AWS SDKとしての本番利用は推奨されていませんでした。
これで晴れて、Rustも本番ワークロードに利用することができるようになるので需要も増えるのではないでしょうか。
私は、これまで過去にRust関連のブログを書いたこともあるので、実際に動作できるのか試してみました。
目次
はじめに
本記事の概要は、AWS CloudShell上で、AWS SDK for Rustを動作させてみることです。
OSがAmazon Linux2023になったことですし、コストを掛けずにCloudShell上でAWS SDK for Rustを試してみましょう。ドキュメントを参照しながら、s3のサンプルを実行してみることにしました。
AWS CloudShell上でAWS SDK for Rustを利用する
事前準備
Rustの環境構築とプロジェクトの作成と実行確認
Amazon Linux2はExtras Library(amazon-linux-extras)が搭載されていますが、Amazon Linux2023には搭載されていません。代わりにパッケージマネージャーで管理されているので、難しく考えずにインストールしてみましょう。
1 2 |
sudo dnf install -y cargo rustc -V |
サポートされているRustのバージョンは1.68.2のようです。インストールしていくcrateのバージョンに影響するので、メモしておきましょう。
続けてRustプロジェクトを作成して実行できるところまで確認しておきました。ただ、このまま進めていくとcrateをプロジェクト内に抱き込んでしまうので簡単に容量が1GBを超えてしまいました。そのため、永続的ストレージで作業するのは避けた方が良いと思います。
よって、永続しない場所で作業をしていきましょう。また、AWS SDK for Rust GitHubにサンプルコードもあるので取得して作業を開始しましょう。
1 2 3 |
cd /usr/local/share/ sudo git clone https://github.com/awslabs/aws-sdk-rust.git sudo chown -R cloudshell-user aws-sdk-rust |
ここで、s3のサンプルコードを実行してみることにしますが、エラーとなってしまいました。残念ながらRustのバージョンが1.70.0以降を要求するcrateが多いようです。
ちなみに以下にあるのはsrc/bin以下にあるlist-buckets.rsを実行するためのコマンド例となります。
1 2 |
cd /usr/local/share/aws-sdk-rust/examples/examples/s3 cargo run --bin list-buckets |
どうやら、いくつかのcrateのバージョンがRust1.68.2に対応していないようです。
解決策
バージョン要件を解決する
このような時は、crate.ioを確認してみましょう。
このページでは、各リリースにおけるRustのバージョン要件が確認できるようになっています。こちらを参考にしながら、crateのバージョンを指定していきましょう。
例えば、以下のanstyleの場合、最新のv1.0.4が入っていたのですが、このバージョンではRust1.70.0以上が必要となります。現行のRustは1.68.2ですので、要件を満たすバージョンであるv1.0.2にアップデートしてあげる必要があります。
こうして実行してみて問題のあったcrateについてcrate.ioで検索して、バージョンを指定してアップデートするということを繰り返していきます。
また、clapのバージョンについて、s3と同列のディレクトリに配置されている各サービス内のCargo.tomlも参照しているようなエラーが出てしまっていたので、各サービス配下のCargo.tomlもsedで一括で書き換えておきました。上位に置かれたCargo.tomlで各サービスを指定していたので、そのためだと思います。
1 2 3 4 5 6 |
cd /usr/local/share/aws-sdk-rust/examples/examples find ./ -name 'Cargo.toml' | xargs sed -i 's/version = "~4.4"/version = "~4.3"/g'; cargo update -p anstyle@1.0.4 --precise 1.0.2 cargo update -p anstyle-parse --precise 0.2.1 cargo update -p clap_lex --precise 0.5.0 cargo update -p anstyle-query --precise 1.0.0 |
これで、サンプルコードを実行することができるようになりました。
実行結果の確認
既に上記で記載したcargo runコマンドで実行することもできますし、ビルドしてオブジェクトを生成することもできます。
例えば、list-buckets.rsをリリースビルドしたオブジェクトは以下のように実行します。
1 2 |
cargo build --bin list-buckets --release /usr/local/share/aws-sdk-rust/target/release/list-buckets |
中にはm実行時にはオプションを指定するようなものがあります。ビルドしたオブジェクトを実行したい場合は、通常通りオプション指定すればよいです。
ただし、cargo runコマンドを利用する場合は、”– –オプション”というような指定をする必要があります。
言い換えれば、以下の2つのコマンドは同じ実行結果になります。
1 2 3 4 |
/usr/local/share/aws-sdk-rust/target/release/list-buckets -v # to pass '-v' as a value, use '-- -v' cargo run --bin list-buckets -- -v |
また、list-bucketsに限らず、他のコマンドについても実行することはできるようになりました。
例えばs3についは以下のコマンドがあります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Available bin targets: s3_getting_started list-objects get-object-presigned put-object-presigned list-buckets delete-object s3-multipart-upload client copy-object get-object put-object-progress create-bucket list-object-versions select-object-content s3-helloworld delete-objects if-modified-since |
EC2やLambdaなど他のサービスについてもビルド可能ですが、中にはビルドが通らないものがあるので個別に調整が必要となりますのでご注意ください。
まとめ
OSがAmazon Linux2023となったAWS CloudShell上でAWS SDK for Rustのサンプルコードを実行する環境を整えて実行してみました。OSでサポートしているRustのバージョンが若干古かったため、crateのバージョン指定が必要でした。
また、AWS CloudShellのホームディレクトリである永続的ストレージは1GBという容量の制限があります。一方でRustプロジェクトは、内部でcrateを追加していくことになるので、ホームディレクトリでRustプロジェクトを作成、管理するのは限界がありそうです。
なお、試しに、list-bucket.rsだけを実行するだけのミニマムなプロジェクトを作ってみましたが、それでも最終的には3GB程度のサイズになっていました。
あるいは、Rustのバージョンも1.70.0以上に上げてみようかと思いましたが、こちらもカレントの.cargo配下にインストールされるため、こちらも容量の制限に引っかかってしまったので対応策からは外しました。
告知
カジュアル面談も実施中
ギークフィードではAWSエンジニアなどの職種で一緒に働く仲間を募集しています。
弊社に興味を持っていただいたり、会社のことをカジュアルに聞いてみたいという場合でも、ご気軽にフォームからお問い合わせください。その場合はコメント欄に、カジュアルにお話したいです、と記載ください!
2023 Advent Calendar開催中です
ギークフィードでは今年もアドベントカレンダーを開催、及び参加します。
開催、あるいは社員が参加することが決まっているアドベントカレンダーを以下に列挙しておきます。
ギークフィード主催のアドベントカレンダーです。スカイアーチHRソリューションズさんもご参加いただきます。
Amazon Connect Advent Calendar 2023
Amazon Connectにフォーカスしたアドベントカレンダーです。昨年に引き続きクラスメソッドさんと共催です。スカイアーチHRソリューションズさんもご参加いただきます。
Japan AWS Ambassadors Advent Calendar 2023
Japan AWS Ambassadorsによるアドベントカレンダーです。
Japan AWS Jr. Champions Advent Calendar 2023
Japan AWS Jr.Championsによるアドベントカレンダーです。
- CLIでAmazon S3にあるファイル内の文字列検索をしてみる - 2024-02-01
- 不完全なマルチパートアップロードをCLIで確認してS3の無駄コストを無くそう - 2024-01-29
- AlmaLinux9.3にPHP8.3を入れてLaravel9から10にバージョンアップする - 2024-01-12
- AWS CloudShellの表現力を確認してみよう - 2024-01-01
- AWSのアーキテクチャーを学べるAWS Card Clash攻略Wiki - 2023-12-26