AWS Lambda で Rustを使ってみた話

この記事は、nacika.com Rust記事 アドベントカレンダー Advent Calendar 2018 – Adventar 二日目の記事です。

AWS LambdaでRustを使う方法はほぼ、<a href=”https://dev.classmethod.jp/cloud/aws/custom-runtime-rust/” title=”AWS LambdaのCustom RuntimeでRustを実行してみた #reinvent | DevelopersIO target=”_blank”>AWS LambdaのCustom RuntimeでRustを実行してみた #reinvent | DevelopersIO こちらや Rust Runtime for AWS Lambda | AWS Open Source Blog こちらの記事の通りに作ると簡単につくれます。

手順はもうあるので、作ってみた感想などを書いていこうと思います。

ランタイム is 何処

ランタイムは、AWSが用意しているというよりはcreateとして提供されているようです。
Cargo.toml にある lambda_runtime = "^0.1" というのがそれですね。

main.rsの編集だけで終わる

びっくりしたのが、main.rsに一通りの処理を書くだけですぐに使える所。内部的にはLambda用のリクエストを受け付ける処理があるようですが全てランタイムがやってくれます。便利。
そのため、こちらでやることはハンドラを書くことくらい。

必要なイベントを型で受け取る

#[derive(Deserialize, Clone)]
struct CustomEvent { #[serde(rename = "text")] text: String, #[serde(rename = "is_decode")] is_decode: bool
}

serde(rename = "text") が実際のイベント名、下にあるのが型のフィールド。
イベントがそのまま型で来るのでそこから取ってくればOK。falseやtrueがboolで処理してくれるのも地味に嬉しい。(オプション型は試せていない)

気をつける所

Cargo.tomlの

[[bin]]
name = "bootstrap"

この部分、buildされたバイナリのファイル名がbootstrapじゃないとエラーになる。

実行時間

最安プランになっている様子。これ以上高速化しても安くならない・・?

この開発によって作ったもの

モコあきさんが2001年にリリースしたWindowsアプリのロリコンバータをリメイクしたものを作りました
https://nacika.com/loliconv/

カテゴリー: Rust

actixを試す

この記事は nacika.com Rust記事 アドベントカレンダー Advent Calendar 2018 – Adventar の1日目の記事です。
日付跨いじゃってるけど・・・。

早速、actix/actix: Actor framework for Rust を試しました。

nacika-ins/actix-sample

使った感じ

現状だと、特に各アクターでスレッドを作ってくれるわけではないようで、どこかのアクターでloopを書いたりしてスレッドを専有してしまうと、他のアクターの処理が止まる。
panic!を書けばプロセスは落ちるし、エラーが発生してもプロセスごと落ちる。

impl Superviseddef restarting というメソッドがあり、エラーがあると呼ばれてリスタートするらしいんだけど、呼ばれない。。

メリットがありそうなところ

  • 耐障害性は、スレッドを作ってあげて処理すればなんとかなりそう。do_sendや、sendなどのメソッドは #[derive(Message)] をつけたものを送ればいいだけなので、複雑な所有権をあまり考えずに使えそうなところがよさそう。
  • スレッドループからもメッセージを送ることができるのでいい感じ。
  • アクターの変数も、メッセージ自体もミュータブルにすることができる。

今後使うか

正直、Rust言語の複雑な部分をActorでまとめることができてコード自体も簡潔にかける部分が良いので、今後使っていきたい。

カテゴリー: Rust