2024DevWeek

2.6K Views

April 09, 24

スライド概要

profile-image

Cloudflare エバンジェリスト

Docswellを使いましょう

(ダウンロード不可)

関連スライド

各ページのテキスト
1.

Developer Week 2024 #CloudflareUG_KIX

2.

Cloudflare D1 GA 10 GB のデータベース、およびアカウントごとに 50,000 のデータベースをサポート。 新しいデータ エクスポート機能 (Beta時に存在していた機能の拡張版が復活) D1 Insights:強化されたクエリ デバッグ 予告;グローバルリードレプリカ、タイムトラベルクエリ https://zenn.dev/kameoncloud/articles/6264967e5fd1da

3.
[beta]
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);

4.

Workers Connect () (in 2023) OutboundのTCPソケット通信が可能に(従来はHTTP のみ)(QUIC未対応) SSH, MQTT, SMTP, FTP, IRC, SQL 等 Pgに対応済、mysql, mysql2は開発中 mTLS, StartTLS, RTT-0に対応 インバウンドTCP,UDP, アウトバウンドUDPは開発中

5.

Workers Smart Placement (in 2023)

6.
[beta]
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

7.
[beta]
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

8.

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

9.

Web GPU API (in 2023) Durable Objectを介して構成される 仮想化されたGPU ブラウザからGPU低レイヤへのアクセスを可能に https://zenn.dev/kameoncloud/articles/707b3b623bdb87

10.

Workers AI Playground ブラウザベースでデプロイ不要でモデルのテストが可能

11.
[beta]
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 モデルに対応中

12.

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

13.

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

14.
[beta]
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

15.

Super Slurper Google Cloud Storage サポート S3 に加えてGoogle object Storageをサポート S3モードはGA。差分移行にも対応

16.

Cloudflare Data Pipeline ( 2024 2h 公開予定 ) Apache BeamやFlinkのようなデータストリームパイプラインをCloudflareで実現可能

17.

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

18.

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

19.

Workers 段階的デプロイメント カナリアリリースをサポート ログ、メトリクスなどをバージョンごとに管理

20.

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

21.

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 を自動で作成してくれる

22.

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 }

23.
[beta]
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を利用することで休止時の課金を除外可能に

24.

Cloudflare SDK 従来 Cloudflare の API は HTTPベース (原則 Curl で操作) 新しくTypeScript、Python、Goをサポート 今後多くの言語をサポート予定

25.

Cloudflare Call Update What is Cloudflare Call ? (beta) 2022/9 にアナウンスされた WebRTCのピアツーピアネットワークをCloudflareが支えるサービス 1テラバイトの送受信移行が有償に

26.

Cloudflare Call SFU (open beta) SFU: Service Forwarding Unit ピアツーピアの増え続けるコネクションを集中管理し適切にルーティングする機能

27.

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

28.

Cloudflare Images Upload Widget (private beta) 従来画像アップロード用ワンタイムURLの生成は可能であったが、コーディングが必要だった。 https://zenn.dev/kameoncloud/articles/7db419dbedc59d ブラウザからすぐ使えるアップロード用インターフェースを提供予定

29.

Cloudflare Images Auto Facial Recognition (private beta) Imagesの画像リサイズ機能に、顔を認識してフォーカスする機能が加わった https://zenn.dev/kameoncloud/articles/15c86450a4979c

30.

Baselime の買収と無償提供 オブサーバビリティツールのBaselime買収を発表。Cloudflareユーザーは無償で利用可能に Open Telemetryにネイティブ対応しているため、 Cloudflareに限定せず利用可能 (2024年末に新プラン発表予定) 予告:workerd にOpen Telemetry の実装

31.

Workers Browser Rendering API GA import puppeteer from "@cloudflare/puppeteer"; const browser = await puppeteer.launch(env.MYBROWSER); HARファイル作成機能は未実装 ブラウザDevToolの情報を JSON化したもの

32.

CDN SWR (closed beta) SWR: Stale While Revalidate クライアントにはキャッシュを返しつつ、オリジンに新しいコンテンツがあるかを非同期に確認する方式 つまりExpiredによる配信遅延を減らすことができる https://blog.jxck.io/entries/2016-04-16/stale-while-revalidate.html

33.

Cloudflare Snippets 段階的ロールアウト ユーザー定義簡易版Workres ヘッダーやCookie等簡易的な操作を意図した再利用可能なコード WAFルールなどからの利用を想定 今後5%のCloudflareユーザーのコンソールで利用可能に

34.

Workers for Platforms 価格変更 Entepriseプラン限定であったものが、25$/月の従量課金制に変更 What is Workers for Platforms? 任意のサービス/APIを呼び出す独自の関数を実装可能 以下のような要件に対応が可能に 「Xさえカスタマイズしていただければ、御社の製品を使えるようになります」

35.

Cloudflare C3 C3: create-cloudflareCLI 対応するWebフレームワークごとに、 Cloudflareの呼び出すコードを自動で生成(スキャルホールド)する機能 CloudflareCLIとWebフレームワークを行ったり来たりする必要がなくなるため 統一した開発体験を実現 対応フレームワーク: Angular Astro Docusaurus Gatsby Hono Next Nuxt Qwik React Remix Solid Svelte Vue

36.

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レイヤの実装など

37.

最後に 人生で夏は80回しかこない

38.

最後に

39.

Cloud in the Camp 北海道