rustでServerless Framework使用してaws lambda関数をデプロイし実行してみた
Contents
概要
今回は、rust言語で、Serverless Frameworkを用いてAWS Lambda上にデプロイ(サンプルプログラム)し、Hello World!というお決まりのワードを表示してみたいと思います。
前提条件
- awsコマンドインストール済で、aws configure認証情報設定済であること。
- dockerがインストール済で、dockerサービスが起動していること。
Rustについて
Rustはシステムプログラミングや、コマンドラインプログラム、Webサーバ等、さまざまな用途に使用できるプログラミング言語です。
スピードとメモリー使用の観点で効率的で信頼性の高いコードへと自然に導くよう設計されており、C言語で問題となっているメモリー関連で弱かった部分をカバーしています。
また、コンパイラー型言語なのでコンパイル時、コードに問題のある箇所を確実に補足してくれます。
今回は、そのような特徴をもったRustがAWSからAWS SDK for RustというSDKがαリリースされましたので実際に使用していきたいと思います。
- ※ AWS SDK を使用した、連携は第2回目の記事で記載します。
- ※ 今回は、ただRustをLambda上で動かしてみるという内容になります。
Serverless Frameworkのセットアップ
Node.jsのインストール
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
. ~/.nvm/nvm.sh
→nvmの有効化
nvm install --lts --latest-npm
→nodeのインストール
nvm alias default 'lts/*'
→デフォルトにする。
- ※nvm(Node Version Manager)を使ってNode.jsをインストールする手順
LTSバージョンインストールについて
node -e "console.log('Running Node.js ' + process.version)"
Running Node.js v14.17.1
→Node.jsがインストールされたことを確認。
Serverless Frameworkのインストール
mkdir sls
→ディレクトリ作成
cd sls
npm init
→いくつか質問されるがすべてEnterで、最後の質問は、yesでOk。
npm install --save serverless
→Serverless Framework本体をインストール。
npm bin serverless
/root/sls/node_modules/.bin
echo 'export PATH="$HOME/sls/node_modules/.bin/:$PATH"' >> ~/.bash_profile
→パスを通す。
source ~/.bash_profile
→適用する。
serverless -v
Framework Core: 2.48.0 (local)
Plugin: 5.4.1
SDK: 4.2.3
Components: 3.12.0
→Serverless Frameworkがインストールされたことを確認。
- ※Serverless FrameworkでAWS Lambda関数を作成する
こちらの記事に書かれている内容となります。
プロジェクトの作成
cd ~
→ホームディレクトリ直下へ移動。
serverless install \
--url https://github.com/softprops/serverless-aws-rust \
--name rust-first-lambda-app \
&& cd rust-first-lambda-app \
&& npm install --silent
Need to install the following packages:
serverless
Ok to proceed? (y) y
・
・
・
Serverless: Downloading and installing "serverless-aws-rust"...
Serverless: Successfully installed "serverless-aws-rust" as "rust-first-lambda-app"
→serverless AWS Rust templateが用意されているのでありがたく使わせてもらいます。
AWS上にデプロイ
npx serverless deploy
Serverless: Building Rust hello func...
Serverless: Running containerized build
Unable to find image 'softprops/lambda-rust:0.2.7-rust-1.43.1' locally
0.2.7-rust-1.43.1: Pulling from softprops/lambda-rust
・
・
・
Compiling hello v0.1.0 (/code)
Finished release [optimized] target(s) in 2m 58s
adding: bootstrap (deflated 61%)
Serverless: Packaging service...
Serverless: Creating Stack...
Serverless: Checking Stack create progress...
・
・
・
Serverless: Stack update finished...
Service Information
service: rust-first-lambda-app
stage: dev
region: us-east-1
stack: rust-first-lambda-app-dev
resources: 6
api keys:
None
endpoints:
None
functions:
hello: rust-first-lambda-app-dev-hello
layers:
None
→Serverless Frameworkの標準的なデプロイコマンドで実施、AWS Lambda上に提供されるrustカスタムランタイムでビルドされ、その後、CloudFormationスタックが作成されデプロイされます。
AWS上にデプロイされたLambda関数の実行
npx serverless invoke -f hello -d '{"Hello":"World!"}’
{
"Hello": "World!"
}
→正常に渡した値が返ってきていることが確認できました。
AWS上での確認
node.jsとrustで比較するのは、酷かもしてれませんが、メモリ効率、実行速度ともに良いですね。
CloudFormation
Lambda(rust)
Lambda(node.js)
まとめ
Serverless Frameworkを使用すると簡単にAWS上へLambda関数をデプロイすることができ、ビルド環境もコンテナー上で処理されるのでいいことだらけですね。
ディスカッション
コメント一覧
まだ、コメントがありません