ハローワールド


AWSラムダRustランタイム


私は、ちょうどAを作成する速いチュートリアルを終えましたhello world ラムダを使うAWS Lambda Rust Runtime

チュートリアルのための


あなたが急いでいるならば..
ここで完成したソースコードを表示できます.rust_lambda_hello_world

概要


私はRustがServerlessのための大きい合うものであると思います、そして、私はラムダでさびを使う方法を文書化し始めたかったです.ラムダは、時間やリソースの面で巨大なコミットメントを行うことなく、新しい言語をテストする絶好の機会です.さらに、実行時間とコストの間の明示的な接続は、Rustの速度の利益を強調します.
ここで始める前に、あなたがすでに働く必要がある若干の前提条件.

必要条件

  • インストール錆/貨物
  • コードエディタ
  • AWSアカウント
  • 新しいさびバイナリーを作成する


    新しいさびバイナリーを作り始めましょう
    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 ビルドプロセスを実行する.
  • 最初のインストールZig
  • brew install zig
    
  • インストール貨物zigbuild
  • cargo install cargo-zigbuild
    
  • ターゲットをx 86に追加する
  • 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”の過去を見ていきます.