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バケットの扱い方を覚えることはできたので、結果オーライではあります。

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark