Developer Week 2024 #CloudflareUG_KIX
Cloudflare D1 GA 10 GB のデータベース、およびアカウントごとに 50,000 のデータベースをサポート。 新しいデータ エクスポート機能 (Beta時に存在していた機能の拡張版が復活) D1 Insights:強化されたクエリ デバッグ 予告;グローバルリードレプリカ、タイムトラベルクエリ https://zenn.dev/kameoncloud/articles/6264967e5fd1da
Cloudflare Hyperdrive GA
SQL Proxy for PostgreSQL
Connection Pooling
実行結果のキャッシュ
予告:MYSQLサポート、
Cloudflare Tunnel or Magic WAN経由
プライベートDBへのアクセス
// Use the popular 'pg' driver? Easy. Hyperdrive just exposes a connection string
// to your Worker.
const client = new Client({ connectionString: env.HYPERDRIVE.connectionString });
await client.connect();
// Prefer using an ORM like Drizzle? Use it with Hyperdrive too.
// https://orm.drizzle.team/docs/get-started-postgresql#node-postgres
const client = new Client({ connectionString: env.HYPERDRIVE.connectionString });
await client.connect();
https://zenn.dev/kameoncloud/articles/217263d6c87815
const db = drizzle(client);
Workers Connect () (in 2023) OutboundのTCPソケット通信が可能に(従来はHTTP のみ)(QUIC未対応) SSH, MQTT, SMTP, FTP, IRC, SQL 等 Pgに対応済、mysql, mysql2は開発中 mTLS, StartTLS, RTT-0に対応 インバウンドTCP,UDP, アウトバウンドUDPは開発中
Workers Smart Placement (in 2023)
Cloudflare Queues Updates (still Beta)
HTTPクライアント経由のPULL/ACKに対応
// Pull and acknowledge messages from a Queue using any HTTP client
$ curl "https://api.cloudflare.com/client/v4/accounts/${CF_ACCOUNT_ID}/queues/${QUEUE_ID}/messages/pull" -X POST --data
'{"visibilityTimeout":10000,"batchSize":100}}' \
-H "Authorization: Bearer ${QUEUES_TOKEN}" \
-H "Content-Type:application/json"
// Ack the messages you processed successfully; mark others to be retried.
$ curl "https://api.cloudflare.com/client/v4/accounts/${CF_ACCOUNT_ID}/queues/${QUEUE_ID}/messages/ack" -X POST --data
'{"acks":["lease-id-1", "lease-id-2"],"retries":["lease-id-100"]}' \
-H "Authorization: Bearer ${QUEUES_TOKEN}" \
-H "Content-Type:application/json"
遅延キューに対応(コンシューマの処理能力調整)
// Apply a delay to a message when sending it
await env.YOUR_QUEUE.send(msg, { delaySeconds: 3600 })
// Delay a message (or a batch of messages) when marking it
for retry
for (const msg of batch.messages) {
msg.retry({delaySeconds: 300})
}
予告:処理能力の向上、GA
Workers Analytics Engine GA
Workers から作成不要で利用可能な
固定スキーマSQLデータベース
Workersアプリケーションの
実行ログの保存に利用
export default {
async fetch(request, env, ctx) {
env.testanalytics.writeDataPoint({
'blobs': [
request.cf.colo,
request.cf.country,
request.cf.city,
request.cf.region,
request.cf.timezone
],
'doubles': [
request.cf.metroCode,
request.cf.longitude,
request.cf.latitude
],
'indexes': [
request.cf.postalCode
]
});
return new Response("Hello World!");
},
};
https://zenn.dev/kameoncloud/articles/c7cca0e572ee7e
Workers AI GA 1分当たり50→300リクエストに拡張 24時間当たり10,000ニューロンまで無料 対応モデル有償と見積もりツール ベータモデルは引き続き無償 (モデル一覧)(46モデル) https://developers.cloudflare.com/workers-ai/models/ 150以上の都市でGPUを実行 https://zenn.dev/kameoncloud/articles/707b3b623bdb87
Web GPU API (in 2023) Durable Objectを介して構成される 仮想化されたGPU ブラウザからGPU低レイヤへのアクセスを可能に https://zenn.dev/kameoncloud/articles/707b3b623bdb87
Workers AI Playground ブラウザベースでデプロイ不要でモデルのテストが可能
Workers AI with LoRAs (beta)
ブラウザベースでデプロイ不要でモデルのテストが可能
LoRA: Low-Rank Adaptation of Large Language Models
トレーニング済大規模言語モデルのパラメータを一部書き換え、ワークロードに適応させる手法
既存モデルのアウトプット微調整が可能
const response = await ai.run(
"@cf/mistralai/mistral-7b-instruct-v0.2-lora", //the model supporting LoRAs
{
messages: [{"role": "user", "content": "Hello world"],
raw: true, //skip applying the default chat template
lora: "00000000-0000-0000-0000-000000000", //the finetune id OR name
}
);
Gemma 2B および 7B、Llama 2 7B、および Mistral 7B モデルに対応中
Workers Python サポート WASM不要のNative Pythonサポート 実行環境はworkersランタイムにインクルードされる (Pyodide) from js import Response async def on_fetch(request, env): return Response.new("Hello world!") wrangler.tomlの指定で従来のjs/tsと使い分け name = "hello-world-python-worker" main = "src/entry.py" compatibility_date = "2024-03-18" compatibility_flags = ["python_workers"] https://zenn.dev/kameoncloud/articles/e8d266f5477016
AI Gateway Updates (open beta) LLM エンドポイントへのプロキシー トークンの一括管理、権限管理、回答結果のキャッシュ、やり取りのログ出力 https://api.openai.com/v1 ↓ https://gateway.ai.cloudflare.com/v1/<accountID>/<gateway name>/openai OpenAI、Azure AI、Hugging Face、Workers AIに加え以下をサポート Anthropic、Amazon Bedrock、Google Vertex、Perplexity 予告:ログの外部長期保存、カスタムメタデータ(呼び出し元IDの付与等)、シークレットキーの管理 https://zenn.dev/kameoncloud/articles/ee68d54bcadf90
Cloudflare R2 Event notification (open beta)
オブジェクトの作成及び上書き(put,copy,multipart-upload)、削除(delete)
でイベントをQueueに送出
npx wrangler r2 bucket notification create <BUCKET_NAME> --event-type <EVENT_TYPE> --queue <QUEUE_NAME>
{
"account": "3f4b7e3dcab231cbfdaa90a6a28bd548",
"action": "PutObject",
"bucket": "my-bucket",
"object": {
"key": "my-new-object",
"size": 65536,
"eTag": "c846ff7a18f28c2e262116d6e8719ef0"
}
}
https://zenn.dev/kameoncloud/articles/e15ba5307cce2f
Super Slurper Google Cloud Storage サポート S3 に加えてGoogle object Storageをサポート S3モードはGA。差分移行にも対応
Cloudflare Data Pipeline ( 2024 2h 公開予定 ) Apache BeamやFlinkのようなデータストリームパイプラインをCloudflareで実現可能
Prisma ORM D1サポート ORM:Object Relation Mapper Workresは従来Prisma ORMは利用可能(外部データベースアクセス用)であったが https://zenn.dev/kameoncloud/articles/5de3ad5f68a220 今回D1を正式にNative Support (Accelarateを利用) npm install prisma@latest @prisma/client@latest @prisma/adapter-d1 npx prisma init --datasource-provider sqlite // 0001_init.sql -- Migration number: 0001 2024-03-21T22:15:50.184Z -- CreateTable CREATE TABLE "Visit" ( "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, "visitTime" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
Cloudflare Pages Updates モノレポサポート 従来は1プロジェクト1レポジトリだったが、複数レポジトリの統合が可能 Workers 用 wrangler.tomlサポート 従来はGUI経由での設定のみが可能であったが、構成をソースで管理可能に 環境間の設定共有も容易になり、管理者画面へのアクセスが不要に DB Nativeサポート D1、Hyperdriveに加え、Neon、PlanetScale、Supabase、Turso、Upstash、およびXataをサポート https://zenn.dev/kameoncloud/articles/61d25010e3f5a3
Workers 段階的デプロイメント カナリアリリースをサポート ログ、メトリクスなどをバージョンごとに管理
Tail Workers の Source Map と Stack Trace What is Tail Workers ? export default { async tail(events) { fetch("https://example.com/endpoint", { method: "POST", body: JSON.stringify(events), }) } } 特定のWorkersの実行を追跡するWorker Producer(追跡元)起動時に自動で起動され、実行終了後のイベントをキャプチャ デバッグ目的で使用 https://zenn.dev/kameoncloud/articles/ebfca1da73a083 https://zenn.dev/kameoncloud/articles/a7c8073a2ada65
Tail Workers の Source Map Stack Trace What is Stack Trace ? DBX.Utils.stackTrace@http://localhost:49573/assets/js/scripts.js:44 DBX.Console.Debug@http://localhost:49573/assets/js/scripts.js:9 .success@http://localhost:49573/:462 x.Callbacks/c@http://localhost:49573/assets/js/jquery-1.10.2.min.js:4 x.Callbacks/p.fireWith@http://localhost:49573/assets/js/jquery-1.10.2.min.js:4 k@http://localhost:49573/assets/js/jquery-1.10.2.min.js:6 .send/r@http://localhost:49573/assets/js/jquery-1.10.2.min.js:6 エラー箇所は把握できるが原因がよくわからない What is source map ? Unexpected input value: null at parseBytes (src/down.ts:30:8) at down_default (src/down.ts:10:19) at Object.fetch (src/index.ts:11:12) 30行名にnullが投入されたことが原因であることがわかる Wrangler.toml upload_source_maps = true Source map を自動で作成してくれる
Workers Rate Limit (Open Beta) 従来CDN側でのRate Limitが機能として提供されており、Workersからの制御はできなかった (管理の分離) 新しくWorkersからRate Limit APIの呼び出しが可能 [[unsafe.bindings]] name = "RATE_LIMITER" type = "ratelimit" namespace_id = "1001" # An identifier unique to your Cloudflare account # Limit: the number of tokens allowed within a given period, in a single Cloudflare location # Period: the duration of the period, in seconds. Must be either 60 or 10 simple = { limit = 100, period = 60 }
Durable Object WebSocket Hibernation GA
What is Durable Object?
データの永続性を持つシングルトンWorkers 課金は永続化されている間発生
WebSocketに対応
https://zenn.dev/kameoncloud/articles/abffdea40ffa50
export class Counter {
constructor(state, env) {
this.state = state;
}
async function handleRequest(request, env) {
let id = env.COUNTER.idFromName("A");
let obj = env.COUNTER.get(id);
let resp = await obj.fetch(request.url);
let count = await resp.text();
WorkersからClassで宣言し呼び出す形式で利用
return new Response("Durable Object 'A' count: " + count);
}
Hibernationを利用することで休止時の課金を除外可能に
Cloudflare SDK 従来 Cloudflare の API は HTTPベース (原則 Curl で操作) 新しくTypeScript、Python、Goをサポート 今後多くの言語をサポート予定
Cloudflare Call Update What is Cloudflare Call ? (beta) 2022/9 にアナウンスされた WebRTCのピアツーピアネットワークをCloudflareが支えるサービス 1テラバイトの送受信移行が有償に
Cloudflare Call SFU (open beta) SFU: Service Forwarding Unit ピアツーピアの増え続けるコネクションを集中管理し適切にルーティングする機能
Cloudflare Stream Live Instant Clipping (beta) What is Cloudflare Stream ? オンデマンド、ライブ配信を簡単に実現させるサービス https://zenn.dev/kameoncloud/articles/0d95a5eb8eda91 https://zenn.dev/kameoncloud/articles/793c2a39d582e3 ライブ視聴中にユーザーがエンコード不要で任意の期間をクリッピング可能に クリップリクエスト https://customer-<CODE>.cloudflarestream.com/<VIDEO_ID>/manifest/clip.m3u8?time=600s&duration=30s クリップされた動画(mp4)のダウンロード https://customer-<CODE>.cloudflarestream.com/<VIDEO_ID>/clip.mp4?time=600s&duration=30s&filename=clip.mp4
Cloudflare Images Upload Widget (private beta) 従来画像アップロード用ワンタイムURLの生成は可能であったが、コーディングが必要だった。 https://zenn.dev/kameoncloud/articles/7db419dbedc59d ブラウザからすぐ使えるアップロード用インターフェースを提供予定
Cloudflare Images Auto Facial Recognition (private beta) Imagesの画像リサイズ機能に、顔を認識してフォーカスする機能が加わった https://zenn.dev/kameoncloud/articles/15c86450a4979c
Baselime の買収と無償提供 オブサーバビリティツールのBaselime買収を発表。Cloudflareユーザーは無償で利用可能に Open Telemetryにネイティブ対応しているため、 Cloudflareに限定せず利用可能 (2024年末に新プラン発表予定) 予告:workerd にOpen Telemetry の実装
Workers Browser Rendering API GA import puppeteer from "@cloudflare/puppeteer"; const browser = await puppeteer.launch(env.MYBROWSER); HARファイル作成機能は未実装 ブラウザDevToolの情報を JSON化したもの
CDN SWR (closed beta) SWR: Stale While Revalidate クライアントにはキャッシュを返しつつ、オリジンに新しいコンテンツがあるかを非同期に確認する方式 つまりExpiredによる配信遅延を減らすことができる https://blog.jxck.io/entries/2016-04-16/stale-while-revalidate.html
Cloudflare Snippets 段階的ロールアウト ユーザー定義簡易版Workres ヘッダーやCookie等簡易的な操作を意図した再利用可能なコード WAFルールなどからの利用を想定 今後5%のCloudflareユーザーのコンソールで利用可能に
Workers for Platforms 価格変更 Entepriseプラン限定であったものが、25$/月の従量課金制に変更 What is Workers for Platforms? 任意のサービス/APIを呼び出す独自の関数を実装可能 以下のような要件に対応が可能に 「Xさえカスタマイズしていただければ、御社の製品を使えるようになります」
Cloudflare C3 C3: create-cloudflareCLI 対応するWebフレームワークごとに、 Cloudflareの呼び出すコードを自動で生成(スキャルホールド)する機能 CloudflareCLIとWebフレームワークを行ったり来たりする必要がなくなるため 統一した開発体験を実現 対応フレームワーク: Angular Astro Docusaurus Gatsby Hono Next Nuxt Qwik React Remix Solid Svelte Vue
JavaScript Native RPC Worker – Worker / Worker – Durable Object でライブラリのインポート不要で 利用可能なRPC 宣言 export class MyService extends WorkerEntrypoint { sum(a, b) { return a + b; } } 呼び出し let three = await env.MY_SERVICE.sum(1, 2); 利用例:多段Workersがより現実的に フロントエンドとバックエンド、BFFレイヤの実装など
最後に 人生で夏は80回しかこない
最後に
Cloud in the Camp 北海道