AWS SDK for RustがGAになったのでAWS CloudShell上で実行する

こんにちは、エンジニアの君島です。

 

先月、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には搭載されていません。代わりにパッケージマネージャーで管理されているので、難しく考えずにインストールしてみましょう。

 

サポートされているRustのバージョンは1.68.2のようです。インストールしていくcrateのバージョンに影響するので、メモしておきましょう。

続けてRustプロジェクトを作成して実行できるところまで確認しておきました。ただ、このまま進めていくとcrateをプロジェクト内に抱き込んでしまうので簡単に容量が1GBを超えてしまいました。そのため、永続的ストレージで作業するのは避けた方が良いと思います。

 

よって、永続しない場所で作業をしていきましょう。また、AWS SDK for Rust GitHubにサンプルコードもあるので取得して作業を開始しましょう。

 

ここで、s3のサンプルコードを実行してみることにしますが、エラーとなってしまいました。残念ながらRustのバージョンが1.70.0以降を要求するcrateが多いようです。

ちなみに以下にあるのはsrc/bin以下にあるlist-buckets.rsを実行するためのコマンド例となります。

 

どうやら、いくつかの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で各サービスを指定していたので、そのためだと思います。

 

これで、サンプルコードを実行することができるようになりました。

 

実行結果の確認

既に上記で記載したcargo runコマンドで実行することもできますし、ビルドしてオブジェクトを生成することもできます。

例えば、list-buckets.rsをリリースビルドしたオブジェクトは以下のように実行します。

 

中にはm実行時にはオプションを指定するようなものがあります。ビルドしたオブジェクトを実行したい場合は、通常通りオプション指定すればよいです。

ただし、cargo runコマンドを利用する場合は、”– –オプション”というような指定をする必要があります。

言い換えれば、以下の2つのコマンドは同じ実行結果になります。

 

また、list-bucketsに限らず、他のコマンドについても実行することはできるようになりました。

例えばs3についは以下のコマンドがあります。

 

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開催中です

ギークフィードでは今年もアドベントカレンダーを開催、及び参加します。

開催、あるいは社員が参加することが決まっているアドベントカレンダーを以下に列挙しておきます。

 

ギークフィード Advent Calendar 2023

ギークフィード主催のアドベントカレンダーです。スカイアーチ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によるアドベントカレンダーです。

この記事が気に入ったら
いいね ! しよう

Twitter で
The following two tabs change content below.
君島翔
君島翔
AI事業部事業部長株式会社ギークフィード
Java, .NET系の言語が得意。Laravelも使います。 エディタはvim派。 自分が楽するためにテストやビルド、デプロイを自動化させたい。 2022-2023 AWS Ambassador / 2022-2023 Japan AWS Top Engineer / 2022-2023 Japan AWS ALL Certifications Engineer

【採用情報】一緒に働く仲間を募集しています

採用情報
ページトップへ