ハローワールド
9970 ワード
AWSラムダRustランタイム
私は、ちょうどAを作成する速いチュートリアルを終えましたhello world ラムダを使うAWS Lambda Rust Runtime
チュートリアルのための
あなたが急いでいるならば..
ここで完成したソースコードを表示できます.rust_lambda_hello_world
概要
私はRustがServerlessのための大きい合うものであると思います、そして、私はラムダでさびを使う方法を文書化し始めたかったです.ラムダは、時間やリソースの面で巨大なコミットメントを行うことなく、新しい言語をテストする絶好の機会です.さらに、実行時間とコストの間の明示的な接続は、Rustの速度の利益を強調します.
ここで始める前に、あなたがすでに働く必要がある若干の前提条件.
必要条件
新しいさびバイナリーを作成する
新しいさびバイナリーを作り始めましょう
cargo new lambda_test
ここで私はcargo
“LambdaRank Test”という名前の新しいバイナリを作成します.これは、新しいディレクトリを作成し、錆プロジェクトの足場を作成します.始める
今、私たちは錆の最初のラムダを書き始める準備ができています.“hello world”ラムダを作成して、最初の名前を含むイベントを読み、“hello [ first name ]」で対応します途中でコードを書き、crateを追加し、ラムダ環境をクロスコンパイルし、配備し、最終的にコードをテストします.
始めましょう.
コードを加える
これを簡単にするために、私たちはAWS Lambda Rust Runtime ReadMeの例(注:バージョンのタグを選択したことを確認してください、v 0.5を書いた時点で、以下のコードスニペットをコピーし、プロジェクトの既存のコードを置き換えます
lambda_test/main.rs
ファイル.use lambda_runtime::{service_fn, LambdaEvent, Error};
use serde_json::{json, Value};
#[tokio::main]
async fn main() -> Result<(), Error> {
let func = service_fn(func);
lambda_runtime::run(func).await?;
Ok(())
}
async fn func(event: LambdaEvent<Value>) -> Result<Value, Error> {
let (event, _context) = event.into_parts();
let first_name = event["firstName"].as_str().unwrap_or("world");
Ok(json!({ "message": format!("Hello, {}!", first_name) }))
}
このコードには2つのメソッドがあります.The main()
は、ラムダ関連のスキャフォールドを初期化する.とfunc(event: LambdaEvent<Value>)
これは我々のコードのハンドラ関数です.これは、ラムダの生活のすべてのビジネスロジックが住んでいるところです.そのことに気づくだろうAWS Lambda Rust Runtime 用途tokio だから
main
関数には、tokioマクロとハンドラ関数func
必要性async
. tokioの詳細はこの記事の範囲外です.今のところ、いくつかの錆プロジェクトで使用されるasyncフレームワークを知っているだけで十分です.コピーパスタのエラーを修正
現在、ラムダがビルドされません、あなたのIDEは、見つけられないcratesに関連した若干のエラーを示すかもしれません.
更新する
Cargo.toml
必要なライブラリを使う.私の使用Cargo Edit 手動で編集することなく依存関係を管理するコマンドで貨物を拡張する
Cargo.toml
cargo add lambda_runtime
cargo add serde_json
cargo add tokio
ここではAWS Lambda Rust Runtime , Serde JSON , and tokio 最後に、プロジェクトを構築する準備が整いました.
ハウツービルド
ラムダ環境のバイナリを構築する必要があります.MacOSを使っているので、コンパイルをする必要があります.Linuxを使っているなら、これらの追加の手順なしでターゲットアーキテクチャを構築することができます.あなたはMacを使用している、あなたはラムダ環境のためのZigリンカと適切なターゲットを追加するに沿って従うことができます.
通常のローカルビルドをチェックし、必要に応じて依存関係の問題を修正します。
我々は、クロスコンパイル手順を開始する前に、通常のビルドなしで動作し、問題を確認することができます.
cargo build
成功し、コードと依存関係が正しいことを知らせてください.をインストールするためのx 86ターゲット
ラムダ環境のために「アマゾンlinux 2 x 86」をターゲットにします.MacOSからこれを達成するために、我々はクロスコンパイルする必要があります.The AWS Lambda Rust Runtime Githubレポは、我々がここに続くというクロスコンパイルのための指示をします.利用する
zig
と貨物バイナリzigbuild
ビルドプロセスを実行する.brew install zig
cargo install cargo-zigbuild
rustup target add x86_64-unknown-linux-gnu
cargo zigbuild --release --target x86_64-unknown-linux-gnu
パッケージとラムダの作成
では、AWSラムダのインフラストラクチャで動作するバイナリがあります.次のステップでは、バイナリをバンドルし、AWSアカウントにアップロードする必要があります.
アーカイブを作成する
私たちのラムダをインストールしてテストするために、バイナリでzipファイルを作成します.バイナリには名前が
"bootstrap"
, それで、以下のコマンドはそれを改名して、AWSにアップロードされる準備ができているZIPファイルを作成します.cp ./target/x86_64-unknown-linux-gnu/release/lambda_test ./bootstrap && zip lambda.zip bootstrap && rm bootstrap
新しい関数の作成
Note: Currently, I'm missing details about how to create the role and copy the ARN
「bootstrap」バイナリでzipファイルを持っているので、新しいラムダ関数を作成する準備ができました.以下のコマンドでaws
CLIという名前の新しいラムダ関数を作成する.aws lambda create-function --function-name rustTest \
--handler doesnt.matter \
--zip-file fileb://./lambda.zip \
--runtime provided.al2 \
--role arn:aws:iam::{PUT_AWS_ACCT}:role/lambda_basic_execution \
--environment Variables={RUST_BACKTRACE=1} \
--tracing-config Mode=Active
Note
このコマンドを自分で変更する必要があります"--role"
アカウント番号を含む名前.このコマンドを実行すると、新しいRustラムダ関数がAWSアカウントに存在し、テストを実行する準備ができています.
ログのテストとチェック
テスト呼び出し
このCLIコマンドを使用して、CLIから直接テストを呼び出すことができます.
aws lambda invoke \
--cli-binary-format raw-in-base64-out \
--function-name rustTest \
--payload '{"firstName": "James"}' \
output.json
出力をチェック
ラムダの出力は、“invoke”コマンドで指定されたファイルに書き込まれる.
> cat output.json
{"message":"Hello, James!"}%
チェックログ
Note: would be good to add how to check cloudwatch logs from cli
我々の「rusttest」ラムダを起動した後に、CloudWatchログをチェックして、実行時間を見たいです.START RequestId: 2b0a5ad0
Version: $LATEST
END RequestId: 2b0a5ad0
REPORT RequestId: 2b0a5ad0 Duration: 0.85 ms Billed Duration: 1 ms Memory Size: 128 MB Max Memory Used: 15 MB
XRAY TraceId: 1-6213be54 SegmentId: 282cd Sampled: true
「Hello World」ラムダはあまりやっていませんが、Aを見るのはまだ印象的ですBilled Duration: 1 ms
結論
我々は正常に錆を使用してラムダを作成することができた!使用AWS Lambda Rust Runtime これは簡単に、コードをまっすぐに前進した.そして、Zigを使用してコンパイルを容易にしました.最終的な結果は、超高速実行する小さなバイナリです.
最後にソースコード
完全なプロジェクトは、私のgithubレポでここにありますhttps://github.com/millerjam/rust_lambda_hello_world
次回
次回は、私たちは“Hello World”の過去を見ていきます.
Reference
この問題について(ハローワールド), 我々は、より多くの情報をここで見つけました https://dev.to/millerjam/rust-lambda-hello-world-23d6テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol