でこてっくろぐ ねお

でこてっくろぐ(http://dekokun.github.io/)から進化しました。でこらいふろぐ(http://dekolife.hatenablog.com/)の姉妹版。デコテックログ(deko tech log)である

Fastlyのedge computing環境、Terrarium(Rust LT #4登壇

rust.connpass.com での発表内容です。

自己紹介

  • id: dekokun (twitter, hatena)
    f:id:dekokun:20190423202756j:plain
    dekokun icon
  • SREやってます

CDNのDはdekokunのD

って最近ずっと言ってます。これからCDN周りに力を入れていくぞという思い。詳しくは以下エントリに書いてます。

dekotech.dekokun.info

Fastlyのedge computing環境 Terrariumの紹介

そもそもedge computingとは

コンピューティングリソースを利用者の端末に近いネットワークの周縁部(エッジ)に配置することにより、低遅延応答、分散処理、トラフィック最適化などを実現するものと言える (参照: https://www.icr.co.jp/newsletter/wtr348-20180329-sadaka.html )

この発表では、特にCDNの各edge上でユーザの書いたプログラムが動く環境を指して "edge computing" と言っています

Terrariumについて

www.fastly.com

ログインなしで触れる、最初から様々なアプリケーション例があり簡単にデプロイできる

Terrarium - Fastly Labs にアクセスすると、いろいろなサンプルが出てきて簡単にデプロイできる

  • DNS Over HTTPS by Rust
  • お天気アプリ by Rust
  • GraphQL by Rust

ポチポチでデプロイ完了デモ

Terrarium - Fastly Labs

コマンドラインツールでデプロイも可能

以下の私の作ったデモ画像を見ると、デプロイがCLIだけでできるのが分かる。 github.com

KVSも使える

lowreal.net 5分で中身が消え去る。キャッシュ的用途に使うことを想定されていると思う。

中の作り

Terrariumのruntimeはいくつかの関数を定義しており、Rustから使えるようにCのFFIを使用してそれらを宣言する必要がある(このあたりで行っている: https://wasm.fastlylabs.com/docs/rust/http_guest/hostcalls/raw/index.html ) それをこのまま使うとunsafeなので、fastlyの提供しているhttp_guest crate内にwrapperがありユーザは主にそれ経由でTerrariumとやり取りすることになる。 wasm.fastlylabs.com

また、私の書いたコードを見ると分かるように、 guest_app_kvs! というマクロが、Terrariumのruntimeとユーザの書いたコードとの橋渡しを行ってくれている。マクロ内部では、runという名前の関数が定義され、主にpanic handlerとメモリ管理関数の設定をしている。

https://github.com/dekokun/terrarium_demo/blob/240e5c198a2de1547e9f963cc6b24b7339eacbc6/src/lib.rs#L28

// 前略
pub fn user_entrypoint(kvs: &mut KVStore, req: &Request<Vec<u8>>) -> Response<Vec<u8>> {
// 中略
  Response::builder()
    .status(200)
    .header("Content-Type", "text/html")
    .body(body.as_bytes().to_owned())
    .unwrap()
}

guest_app_kvs!(user_entrypoint); # これ

今後も目が離せないedge computing

今回、Rust LTということでRustと親和性の高いTerrariumの話をしましたが、他にもedge computing環境はどんどんでてきており、目が離せません。 Terrarimu自体もまだサービスで使えるわけではないので、サービスで使う時はどんな感じになるかも大変楽しみです!

ありがとうございました

enjoy !