目次
概要
こんにちは、テクニカルサポートの牛山です。
今回は、筆者がカスタマイズした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 ************.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 ************.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等のコンテナーレジストリにアップすることで、自分好みの境が即座にできるので良いと思いました。
プロフィール
AWSの設計・構築をメインにおこなっています。
運用・保守をおこなう部署におりましたが、最近、アーキテクト課に異動しました。
日々精進しております。
LINK
クラウドベリージャム:プロフィールページ