Rust製のコマンドをAWS CloudShellに入れてみよう

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

 

AWS CloudShellは、AWS マネジメントコンソールから実行可能なShellです。1 GB の永続ストレージがあるのが特徴のひとつであるため、ディスク容量を考慮する必要があります。

また、Rustは非常に高速でメモリ効率が高いプログラミング言語としてよく知られています。Rustで書かれたコマンドには色々な種類のものがあります。

exaはlsコマンドの代替のひとつとして、よく知られているコマンドです。以下のようにツリーや色彩表示など様々な表現ができることで知られています。

 

procsはpsコマンドの代替のひとつです。人が見て見やすいと感じるカラフルな出力をしてくれます。

他にもcrates.ioというリポジトリに色々なRust製のコマンドがあるので、よければ参照してください。

AWS CloudShellでも表現豊かなコマンドを実行してみたくなりまして、いくつかのRust製のコマンドをインストールして実行できるようにしてみました。

 

 

Rustのインストール

rustupのインストーラーを用いる

rustupを用いたインストールRustとしての推奨は、rustupを使ったインストールのようです。以下のコマンドを実行してみましょう。

 

ただ、defaultのままの設定でインストールスクリプトを実行してみたところ、以下のように出力されてしまいました。 rustup経由のインストールでは、/home/cloudshell-user/.rustupにファイルを生成するため、1GBの/homeでは容量が不足してしまうようです。

 

もう少しrustupで粘ってみます。フルインストールするからディスク容量が足りなくなるので、今度は設定をカスタマイズしてインストールしてみましょう。再度インストールのコマンドを実行します。

 

Rustのインストールに成功しました。さて、ここでディスク容量を確認してみましょう。

 

まだ半分くらい余力がありますね。ですが、ここでネタバレしますと、cargo installでインストールした場合、バイナリクレートはルートのbinフォルダ、つまり/home/cloudshell-user/.cargo/bin以下に保持されます。いくつかのコマンドで試したところ、ディスク容量が足りなくなってしまったのでrustup経由でのインストールは諦めました。

amazon-linux-extrasを用いる

AWS CloudShellのOSはAmazon Linux2ですので、Extras Libraryが利用できます。また、RustはExtras Libraryの対象のトピックとなっていますので、amazon-linux-extrasコマンドを使ってRustをインストールしてみましょう。

 

ただ、こうしてinstallした場合、rustcやcargoのオブジェクトは/home以下には保存されません。言い換えれば、インストールしたオブジェクトはセッションが切れてしまうと失われてしまうということです。とはいえ、Rust製のコマンド達はすでにビルドがなされている実行オブジェクトですので、rustcやcargoを必要としません。また必要になったら入れればよいという考えで、このようにしました。

 

exaのインストール

cargoを用いる

cargoを用いてインストールしていきます。exaはlibgit2に依存しています。ただ、必ずしもGitサポートの機能を使用しなくてもよい場合は、–no-default-featuresオプションを指定すればインストールに成功します。

 

配布されているバイナリを用いる

実はバイナリが配布されていましたので、単にバイナリを配置してしまいましょう。コチラから、以下画像の赤枠のバイナリをダウンロードします。zipを解凍するとexaのバイナリが取得できます。

 

AWS CloudShellにexaのバイナリをアップロードしましょう。Actions > Upload fileを選択して、exaを指定してアップロードしてください。

 

アップロードしたexaのバイナリは、/home/cloudshell-user配下にアップロードされます。

 

exaのバイナリをパスが通っている場所、今回は他のRustがインストールされている前提にて、他のコマンドと同じ場所に配置して、実行権限を付与しておきます。

 

お好きな方法でインストールしてみてください。以上で、exaのインストールは完了です。

 

procsのインストール

rpmを用いる

procsのリポジトリはコチラです。

rpmでのインストールもありました。cargo要りませんでした。procsのrpmは再配置不可なパッケージだったので、オプション指定で/home以下のパスを指定して配置するようにしました。

 

procsを実行

procsを実行してみましょう。人が見やすいような色彩で表示もできますし、ツリー表示のような出力もできます。

 

batのインストール

cargoを用いる(失敗)

リポジトリはコチラです。

何も考えずにcargo installしてみましたが、ダメでした。

 

確認したところ、現在のExtras LibraryでRustのStableは1.47.0のようでしたが、batはどうやら2015か2018(1.31.0)をサポートしているようです。

 

一方でbatをソースからビルドするにはRust1.51.0以降である必要があるようです。

If you want to build bat from source, you need Rust 1.51 or higher.

そこで、最新のbatをインストールすることは諦めて、ソースからビルドすることにしました。

 

ソースからビルドしてインストール

ソースをGithubからクローンして、ビルドするには1GBのストレージでは足りませんでした。ビルドに使用したソースは保存しておく必要もないので、永続しない場所に保存してしまいましょう。

また、RustのバージョンもStableから1.31.0に下げます。Extras Libraryを使用してRustをインストールしていたので、CloudShellのセッションが切れたら再度入れ直せばよいのが楽ですね。

 

batはバージョン0.9.0であれば、Rust 1.31.0には対応していたことがコミットログから読み取れましたので、このバージョンを採用しました。ソースからビルドしてインストールしましょう。なお、前述の通りcargo installで保存されるオブジェクトのパスは実行ユーザのルートになってしまうので、ビルド対象のソースのパーミッションを事前に変更しています。

 

以上でbatのインストールは完了です。

 

batの実行

batはcatの代替コマンドです。以下のように行数や枠も表示されているのがわかります。

 

まとめ

AWS CloudShellにamazon-linux-extras経由でRustをインストールし、Rust製のコマンドをインストールしてみました。

バイナリが配布されているexaと、rpmでインストールできるprocsのようなコマンドはお手軽にインストールできました。

一方で、batは大変でした。実行環境のストレージ容量だけでなく、Extra LibraryでサポートしているRustのバージョンにも影響されるので、通常とは少し違ったクレートのインストールが求められることが分かりました。

 

カジュアル面談も実施中!

ギークフィードではAWSエンジニアを募集しています。

弊社に興味を持っていただいたり、会社のことをカジュアルに聞いてみたいという場合でも、ご気軽にフォームからお問い合わせください。その場合はコメント欄に、カジュアルにお話したいです、と記載ください!

AWS・開発エンジニア募集

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

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

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

採用情報
ページトップへ