CloudflareHono / SonikJavaScriptSaaS / FaaS

Cloudflare R2をHonoから利用する方法

CloudflareのオブジェクトストレージサービスR2を使用してVectorデータのストア先を試した結果、ストレージの作り方に手間取ったが、手順をまとめる。R2バケットはWraglerから作成可能。ローカル開発環境では2つのバケットが必要。プレビュー用のR2バケットを作成し、WranglerでアプリのBindingsに追加する。HonoからR2バケットを呼び出す方法についても解説。ただし、R2にJSONデータを配置する方法は効率的ではなく、Cloudflare Vectorizeなど他のベクターストアを使用することが推奨される。しかし、R2バケットの扱い方は覚えたので結果は良い。

広告ここから
広告ここまで

Cloudflareのオブジェクトストレージサービス R2 を、RAGなどに使うVectorデータのストア先に試していました。その際、ストレージの作り方などを思い出すのに手間取ったので、覚書として手順を簡単にまとめます。

R2バケットはWraglerから作成できる

ドキュメントに案内がないことがあるので、プレビュー・・・なのかもしれませんが、作成するコマンドは2023/10時点で存在します。

% wrangler r2 bucket create <BUCKET_NAME>

Creating bucket <BUCKET_NAME>.
Created bucket <BUCKET_NAME>.

wrangler devなどでローカル・開発環境からR2を使うには、2つバケットが必要な様子です。

✘ [ERROR] In development, you should use a separate r2 bucket than the one you'd use in production.

プレビュー用のR2バケットを作ります。作成自体の設定は同じで良い様子でしたので、previewとかdevとかのプレフィックス・サフィックスをつけると良いかと思います。

% wrangler r2 bucket create <YOUR_PREVIEW_BUCEKT_NAME>

Creating bucket <YOUR_PREVIEW_BUCEKT_NAME>.
Created bucket <YOUR_PREVIEW_BUCEKT_NAME>.

WranglerでアプリのBindingsに追加します。

wrangler.toml


[[r2_buckets]]
binding = 'BINDING_NAME'
bucket_name = '<YOUR_BUCKET_NAME>'
preview_bucket_name = '<YOUR_PREVIEW_BUCEKT_NAME>'

HonoからR2バケットを呼び出す方法

Honoでは、c.env[R2バケットのBinding名]からAPIを呼び出せます。ただしTypeScriptの場合は、次のように型定義を追加してやる必要があります。 npx create-honoを実行している場合は、R2Bucketの型情報をimportする必要はありません。

const app = new Hono<{
    Bindings: {
        <YOUR_BUCKET_NAME>: R2Bucket
    }
}>()

あとはgetで取得し、putで更新するだけです。

app.get('/', async (c) => {
    const jsonData = await c.env.LANGCHAIN_VC_STORE.get('demo.json')
    const parsedItems = jsonData ? await jsonData?.json() : []
    await  c.env.LANGCHAIN_VC_STORE.put('demo.json', JSON.stringify(parsedItems))
    return c.status(201)
})

おわりに

詳細は別ブログにするつもりですが、Vector StoreとしてR2にJSONデータを配置する方法はお勧めできない結果でした。JSONを読み込んで、LangChainのMemoryVectorStoreに入れてをリクエストの度にやるのはかなり非効率で、キャッシュするとかの方法を試すよりは、おとなしくCloudflare Vectorizeなどのベクターストアを使うほうが良さそうです。

とはいえ、R2バケットの扱い方を覚えることはできたので、結果オーライではあります。

ブックマークや限定記事(予定)など

WP Kyotoサポーター募集中

WordPressやフロントエンドアプリのホスティング、Algolia・AWSなどのサービス利用料を支援する「WP Kyotoサポーター」を募集しています。
月額または年額の有料プランを契約すると、ブックマーク機能などのサポーター限定機能がご利用いただけます。

14日間のトライアルも用意しておりますので、「このサイトよく見るな」という方はぜひご検討ください。

広告ここから
広告ここまで

Related Category posts