CloudflareはDNSだけじゃない！

こんにちは。扁桃腺を摘出して1週間くらいの私です。
この記事は点滴をつなぎながら書いています。
めちゃめちゃ喉が痛いですが、それ以外は暇なのでCloudflareについて調べてみました。

:::note info
この記事は[木更津高専 Advent Calendar 2024](https://qiita.com/advent-calendar/2024/nit_kisarazu)の8日目の投稿です :)

前→[teamsがあまりよろしくないので学食botを作る](https://qiita.com/yukipeti/items/8e555f12c7877c972de8) by @yukipeti san
次→[memalloc](https://hackmd.io/@tsuneki/BJBJhRbEJl) by [@tsuneki](https://hackmd.io/@tsuneki) san
:::

# dig qiita.com 1.1.1.1

Cloudflareといえば、以下のイメージを持っていました。
- 世界最速のDNSサーバー提供 (one.one.one.one)
- 世界中にサーバーを持っていて、そこからキャッシュを提供しているので早いアクセスを提供できる (CDN)
- 対botすごく安全

ですが、今日では「Cloudflare Workers」や「Cloudflare R2」など、「Cloudflare」の名前を冠するサービスをよく耳にします。

なんかすごいのはわかるのですが、それと同時に何もわからないのでこの記事で整理することにします。

# ls cloudflare/services/for-dev

[Cloudflareの製品](https://developers.cloudflare.com/products/)は~~AWSくらい~~多いので、抜粋して開発者向けの製品を見ていくことにします。
[開発者向けの製品の一例](https://www.cloudflare.com/ja-jp/developer-platform/products/)として、以下のものがあります。

## コンピューティング

### Cloudflare Pages

https://www.cloudflare.com/ja-jp/developer-platform/pages/

> サーバーレスのフルスタック開発プラットフォーム
> 
> Pagesを使用すると、信頼できるフルスタックアプリケーションをわずかな時間で構築、デプロイ、配信できます。最低限の設定で、開発者、デザイナー、製品がコラボし、デプロイできます。

なんだかんだ一番耳にするプロダクトだと思っています。私もよくお世話になっています。

### Cloudflare Workers

https://www.cloudflare.com/ja-jp/developer-platform/products/workers/

> 比類なきパフォーマンス、信頼性、スケールでサーバーレスコードを実行。
> 
> Cloudflareのグローバルネットワークの全世界330か所以上のデータセンターへのグローバルにデプロイ時にインフラの設定や保守は無用でサーバーレス機能やアプリケーションを構築。

私の開発経験的に馴染みがないのですが、「ゼロコールドスタート」とか「エッジコンピューティング」とか強そうな言葉が見えます。

## メディア

全然知らなかったのですが、Cloudflareってメディアも扱えるんですね…

### Cloudflare Images

https://www.cloudflare.com/ja-jp/developer-platform/cloudflare-images/

> 画像の保存、リサイズ、最適化、配信を一か所で簡単に
>
> Cloudflare Imagesは、拡張性に優れた費用対効果と信頼性の高い画像パイプラインを構築できるエンドツーエンドのソリューションです。単一のAPIで画像インフラを合理化しましょう。

同じ画像の複数バリアントも動的に配信できるらしいです。しかも自分に割当られたStorageまでならタダ…
faviconとかロゴとかにもってこいかも。

### Cloudflare Stream

https://www.cloudflare.com/ja-jp/products/cloudflare-stream/

> サーバーレスのライブおよびオンデマンド動画ストリーミング
>
> 単一のAPIで、ライブ動画やオンデマンド動画をアップロード、保存、エンコーディング、配信します。Streamは無制限の動画ストレージと低遅延配信を提供し、フォーマットやプロトコルが不要で、開発チームにエンコーディングの専門知識がなくても使用できます。

ライブ動画までもカバーしているとは…Cloudflare恐るべし…
P.S. 説明ページに埋まっている動画も、Cloudflare Streamで配信されているっぽいです

### Cloudflare Calls

https://www.cloudflare.com/ja-jp/developer-platform/products/cloudflare-calls/

> リアルタイムのオーディオおよび動画アプリを構築
>
> マネージドTURNサーバーとSFU（選択的転送ユニット）により、WebRTCサービスでサーバーの信頼性の高さを維持します。

こちら、Inbound無制限, Outbound 1,000GB/moまで無料で使えるみたいです。
身内Discordくらいなら確実に足りそうです。

## AI

### Cloudflare AI Gateway / Cloudflare Workers AI

> AIアプリケーションの監視、制御、最適化
>
> Cloudflare AI Gatewayは、お客様のAIアプリケーションに一元化された可視性と制御を提供します。コード1行でアプリを接続し、使用量、コスト、エラーを監視します。キャッシング、レート制限、リクエスト再試行、モデルのフォールバックにより、リスクと費用を削減します。最低限の手間で、信頼性、拡張性、生産性を確保します。

> 高速、低価格、グローバルなオープンソースAI推論
> 
> Workers AIで、エッジにおけるAIアプリケーションのスケーラブルな開発と展開をもっと容易に。AIをユーザーの近くで実行することによりユーザーエクスペリエンスと効率を高め、低遅延で高性能なAIアプリケーションを実現。Workers AIは、ベクターデータベースであるVectorizeやAIアプリケーションを集中的に監視・制御するAI Gatewayなどを含むCloudflare開発者向けプラットフォームとシームレスに統合されているため、ツールの乱立を避け、総所有コストを削減することができます。

CloudflareはAIにつながるようになっていたんですね…
OpenAIからHugging Faceなどなど、様々なプロバイダにたった1行でつながるようになっているみたいです。

https://developers.cloudflare.com/workers-ai/

しかも無料プレイグラウンドもありました。

https://playground.ai.cloudflare.com/

## Storage & Database

### Cloudflare D1

https://www.cloudflare.com/ja-jp/developer-platform/d1/

> サーバーレスSQLデータベースを作成
>
> D1を使って、サーバーレスのリレーショナルデータベースを数秒で作成しましょう。馴染みのあるSQLクエリー言語、ポイントインタイムリカバリー、費用対効果の高い料金設定によって、次のヒット商品の構築をサポートします。

なんとびっくり、SQLデータベースがあるみたいです…！
ちょっと調べてみると、DjangoやRust Cargoまで、結構幅広く対応しているんですね…

https://github.com/G4brym/django-cf

https://dev.classmethod.jp/articles/workers-rs-d1/

### Cloudflare Durable Objects

https://www.cloudflare.com/ja-jp/developer-platform/products/durable-objects/

> リアルタイムで低遅延のAPI調整と整合性のあるストレージ
>
> Durable Objectsは、複数のクライアントとユーザーを調整するための強力なAPIを提供し、状態の強整合性を維持しながらコラボレーションアプリを構築するのに役立ちます。

使い所を探していましたが、公式のkick-startコードがありました。

https://github.com/cloudflare/durable-objects-rollup-esm

中身はシンプルで、APIは数を記録していて、`/increment`にアクセスされたら数を増やす、`/decrement`にアクセスされたら減らす、という仕組みです。

で、数はアクセス時にDurable Objectsから取ってきて、変更した値をDurable Objectsに戻してあげる仕組みみたいです。
なので内容としては、変数の内容をメモリではなく永続ストレージに書き込んでいるような感じでしょうか。

### Cloudflare Hyperdrive

https://www.cloudflare.com/ja-jp/developer-platform/products/hyperdrive/

> Cloudflare Hyperdrive
>
> Hyperdriveは、お客様の既存データベースへのクエリをCloudflare Workersで高速化し、ユーザーがどこから接続しているかにかかわらず、遅延を低減します。

お〜〜〜〜〜〜〜〜……………？？？って感じですね、よくわかりませんでした :(
自分のDBに対してずっとコネクションを張っておくことで、接続のオーバーヘッドを下げられることがメリットみたいですね。
さらに読み込みのみならキャッシュが効いて早く読み込めたりするみたいです。

デモがありましたが、動かす環境がなかったのでおいておきます。気になる方は試してみてください。

https://github.com/cloudflare/hyperdrive-demo


### Cloudflare R2

https://www.cloudflare.com/ja-jp/developer-platform/r2/

> エグレス料金なしのグローバルなオブジェクトストレージ
>
> 当社のプログラム可能なグローバルネットワークで提供されるR2を使えば、S3互換オブジェクトストレージで柔軟なマルチクラウドアーキテクチャを作成できます。

エグレス料金…？と思ったら、転送量に比例して課金される的なやつですかね？そんな認識です。
ストレージサービスは保存データのみではなく、それを入れたり取り出したりするためにもお金がかかることがあるんですかね〜。実際AWSのS3には0.09$/GBとかかかるみたいですね。

https://www.cloudflare.com/ja-jp/learning/cloud/what-are-data-egress-fees/

S3互換APIなところも、AWSにベンダーロックイン状態の方々には嬉しいはずです！（しらんけど）

### Workers KV

https://www.cloudflare.com/ja-jp/developer-platform/workers-kv/

> Cloudflareのアプリケーション向けサーバーレス Key-Value ストレージ
>
> サーバーレスのKey-Valueストアで、アプリケーションの機能を拡張しましょう。Workers KVは、330か所以上のグローバル拠点で安全かつ低遅延のKey-Valueストアを提供します。アプリケーションの配信先ユーザーが数十人であろうと数百万人であろうと、自動拡張機能で対応します。
> 
> 結果整合性を確保すべく設計されたKVは、データをグローバルにキャッシュし、参照データや頻繁に変更されない資産に最適です。

セッションストレージとかキャッシュなんかにもっとこいなKVストレージがタダで…

### Cloudflare Queues

https://www.cloudflare.com/ja-jp/developer-platform/products/cloudflare-queues/

> 信頼性の高いメッセージキューをアプリケーションに簡単に追加
>
> 非同期でタスクを処理し、信頼性とパフォーマンスを向上

しっかりキューなので、ユースケースとしては動画の投稿処理とエンコーディング処理とかを一斉にキューに入れたりとかでしょうかね。

# Cloudflare、すごすぎ。

ここまでで Cloudflare 製品を軽くまとめてみました。
この記事に書いた製品は Cloudflare 製品のほんの一部にすぎません。

Cloudflare 開発者向け製品を見ていると、[Browser Rendering](https://developers.cloudflare.com/browser-rendering/)とか未来を感じさせてくれるプロダクトがありました。気になっています。

さて、開発者向けの Cloudflare Products は他にも色々あるみたいですが、診察に呼ばれたので今日はこれまで。良い冬を。