🍫

Fastly Compute SDK の機能と役割 (2) SDK を通して使える機能

2023/12/10に公開

この記事は Fastly Compute (旧 Compute@Edge) 一人アドベントカレンダー 9 日目の記事です。

Fastly Compute での開発に欠かせない SDK について少し深掘りして見ていくシリーズ(Fastly Compute SDKの機能と役割)の第二回目です。本稿では SDK を通して使える機能と題して、機能概要について紹介します。

SDK の種類 (公式 or 非公式)

  • 公式 SDK: Fastly の Engineering チームが開発・メンテナンスを行う SDK
    • Rust (2019 年のリリース当時から利用可能)
    • JavaScript (2021 年にβリリース、2022 年より正式リリース)
    • Go (2022 年に TinyGo 版がリリース、2023 年に Go 版がリリース)
  • 非公式 SDK: コミュニティやサードパーティによって開発される SDK
    • Zig (2020 年に公開・開発開始)
    • Swift (2022 年に公開・開発開始)
    • Ruby (2022 年に公開・開発開始)

補足: SDK のバージョニングについて

以前は SDK が Beta でローンチされる等のアナウンスがされていましたが、今年 2023 年の初期にバージョニングがセマンティックバージョニングで統一される旨の方針が決まっており、今後は Beta 等の呼び方はされずに開発が進んでいく予定です。

公式 SDK でサポートされている機能

HTTP クライアントから受け付けた HTTP のリクエストを処理するための基本機能(バックエンドのオリジンサーバへの接続を含む)に加えて、ロギングや Cache/DataStore といった API がサポートされています。

  • HTTP Request/Response ※1
    • Cache override
    • Geolocation
    • Auto decompression
    • Dynamic compression
    • Dynamic backends (Beta)
  • Logging
    • Real time logging
  • Cache API
    • Simple cache
    • Readthough cache
  • DataStore API
    • Config stores
    • Secret stores (Beta)
    • KV stores
  • Others
    • Environment variables
    • Fanout

※1 HTTP クライアントからのリクエストを処理したり、オリジンサーバに接続する際に使える各種機能。本アドベントカレンダー内の別記事(来週を予定)で別途解説予定

バックエンドで普通に Web サーバを立てて開発をする(例: Nginx や apache と何かしらのアプリケーションサーバを組み合わせる等)、といった時の開発体験との差分としては、当たり前のように HTTP Request に Geolocation 情報が紐づいてて地域判別(GeoIPを使ったような処理)がデフォルトでできるとか、高速に読み書き可能な Cache API にアクセスが可能などエッジでのサーバレス開発ならではの機能が利用可能になっています。

主に Rust SDK でのみサポートされている機能

上記以外にも以下のような機能が Rust SDK では利用可能です。前述の基本的な機能に加えて、Rust SDK であればより応用的な機能も利用可能になるイメージです。

  • WebSockets passthrough
  • Mutual TLS for origin fetch
  • Core cache interface ※ Go SDK でも利用可能
  • Purging
  • Backend health ※ JavaScript SDK でも利用可能

なお、Core cache や purging, Backend health など各機能の詳細については本アドベントカレンダーの後日の記事で別途取り上げたいと思います。

余談: 非公式 SDK で使える機能

実際に動かした経験談ではないので観測できる限りになりますが、ソースコードを見る限り、例えば Swift SDK はかなりの量の API をサポートしていそうな雰囲気で、KVStore や Cache API といった比較的新しい API まで実装があるようです。Zig SDK についても今年登場した最新の Cache API はありませんが以前から存在する API である KVStore の API はサポートされていたり、基本的なオリジンとの通信ができそうに見えます。一番最近登場した Ruby SDK はまだ多くの API の実装が存在していないものの、ビルド後の Package サイズが大きくなりがちな Ruby の Wasm ビルドも Fastly Compute のリソース制限[1]であれば比較的できることも多くなりますので、その点含めてこれからの進化が楽しみな SDK です。個人的にも機会を見て Pull Request など作成していきたいと考えています。

まとめ

本稿ではSDK を通して使える機能の概要について紹介しました。明日は各言語 SDK の特徴について紹介します。

脚注
  1. 例えばコンパイル後の .tar.gz パッケージサイズが 100MB まで利用可能 ↩︎

Discussion