AWS

dockerでrust開発環境構築してみた

概要

こんにちは、テクニカルサポートの牛山です。

今回は、筆者がカスタマイズしたamazonlinux2のdockerイメージへrustをインストールし、Amazon Elastic Container Registryにアップロードしたいと思います。

アップロードしたイメージをプルすれば、rustの開発環境が揃っているので、すぐに開発することが可能になります。

前提条件

  • awsコマンドインストール済で、aws configure認証情報設定済であること。
  • dockerがインストール済で、dockerサービスが起動していること。

Dockerコンテナーにログイン

Dockerコンテナー起動

docker run -d -h rust.amazonlinux2.container --name my_rust --privileged --restart=always -p 2220:22 -it public.ecr.aws/z2y2i6b2/container.amazonlinux2.planeimage:latest /sbin/init
→筆者が作成したdockerイメージをプルし起動します。

コンテナーにログイン

docker cp my_rust:/root/.ssh/id_rsa .
→起動したコンテナーから秘密鍵をホストにコピーします。

ssh -i ./id_rsa root@127.0.0.1 -p 2220
→sshログイン

rustのセットアップ

rustインストール

yum install gcc
→gccが必要になるのでインストールします。

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile default --component rls rust-analysis

・・・
Rust is installed now. Great!

To get started you may need to restart your current shell.
This would reload your PATH environment variable to include
Cargo's bin directory ($HOME/.cargo/bin).

To configure your current shell, run:
source $HOME/.cargo/env

→デフォルトプロファイルでツールチェイン、rlsとrust-analysisをインストールします。

source $HOME/.cargo/env
→初回のみ、次回ログイン時からは自動的にパスが読み込まれます。

rustc --version

rustc 1.53.0 (53cb7b09b 2021-06-17)

→rustコンパイラのバージョンを確認できます。

クロスコンパイルインストール

cargo install cross

・・・
    Finished release [optimized] target(s) in 42.12s
  Installing /root/.cargo/bin/cross
   Installed package `cross v0.2.1` (executable `cross`)

→クロスコンパイルパッケージをインストールします。
→Cargoは、Rustのビルドシステム兼、パッケージマネージャです。

rustup target add x86_64-unknown-linux-musl
→AWS Lambda向けのビルドターゲットをインストールします。(なくても可)

rustup target list | grep installed

x86_64-unknown-linux-gnu (installed)
x86_64-unknown-linux-musl (installed)

→x86_64-unknown-linux-muslがインストールされました。

exit
→コンテナーからログアウトします。

Amazon Elastic Container Registryにアップロード

Dockerコンテナーをコミットしイメージを作成・アップロード

docker commit my_rust custom_rust:1.53.0

sha256:7a9d760a9bd959cff53f70450ae8b6371eab751dd36791b9a9dad31465d8f1c1

→先ほど作業したコンテナー名を別イメージ名で作成します。

aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin **********.dkr.ecr.ap-northeast-1.amazonaws.com
→ECRにログインします。

docker tag custom_rust:1.53.0 **********.dkr.ecr.ap-northeast-1.amazonaws.com/rust:1.53.0
→ECRアップロード用にタグを付与します。

docker push **********.dkr.ecr.ap-northeast-1.amazonaws.com/rust:1.53.0
→ECRへアップロードします。

プルしたイメージからHelloWorld

イメージにログイン

docker pull 391166971562.dkr.ecr.ap-northeast-1.amazonaws.com/rust:1.53.0
→先ほどアップロードしたECRからプルします。

docker run -d -h rust.amazonlinux2.container --name my_rust --privileged --restart=always -p 2221:22 -it -v /home/dev_user/rust:/root/rust 391166971562.dkr.ecr.ap-northeast-1.amazonaws.com/rust:1.53.0 /sbin/init
→プルしたイメージを指定し起動します。(sshポートを2221に変更しています。)

ssh -i ./id_rsa root@127.0.0.1 -p 2221
→冒頭で置いた秘密鍵を指定してログインします。(sshポート2221を指定しています。)

rustコンパイルして実行してみる

mkdir hello_world && cd hello_world
→プロジェクト作成。

vim main.rs

fn main( ) {
    println!( "Hello, World! Rustacean" )
}

→ソースファイルを作成します。

rustc main.rs
→ビルドします。

./main
→Hello, World! Rustaceanと表示されればOkです。

まとめ

自分でコンテナーイメージをカスタマイズし開発環境を構築しECR等のコンテナーレジストリにアップすることで、自分好みの境が即座にできるので良いと思いました。

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA