Fastly Compute SDK の機能と役割 (2) SDK を通して使える機能
この記事は 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 の特徴について紹介します。
-
例えばコンパイル後の .tar.gz パッケージサイズが 100MB まで利用可能 ↩︎
Discussion