ローカルのCloudflare WorkersからリモートのR2に接続しようとしてちょっとハマった
1時間くらい悩んでいたので備忘録としてメモっておきます。
環境
Wrangler ^3.15.0
現象
CloudflareのWebコンソール上からR2に格納したオブジェクトを、Wranglerで立ち上げたWorkersからアクセスしようとしたところ、そのようなオブジェクトは存在しないといった現象に遭遇した
wrangler.tomlの記述やソースコード上でのR2からgetする際のオブジェクト名の指定などくまなく確認したが誤りはなかった
なにが起きていたか
きまぐれで.wrangler/配下のファイルを眺めたところ、r2というディレクトリが作成されており、どうやらずっとそこにアクセスしていたっぽい、、
(いろんな記事を参考にしたけどpreview用のバケットを追加して、wrangler.tomlにpreview_bucket_nameとして記載しておけば勝手にそのバケットにつながってくれると思い込んでた😢)
追記
ここにめちゃくちゃ書いてた
preview_bucket_name optional
The preview name of this R2 bucket used during wrangler dev --remote.
When using Wrangler in the default local development mode, files will be written to local storage instead of the preview or production bucket.
解決方法(?)
このようなコマンドでローカルサーバを立ち上げていた
wrangler dev src/index.ts
これを以下ページを参考に--remote
フラグを追加したところ、リモートのR2を見に行くようになった
wrangler dev src/index.ts --remote
でもこれだとD1もリモートのものを見に行くのでうーんってなったけどそういうものだと思うことにした
(今回の自分のケースがまれで、ふつうはローカル環境だけで完結するからうれしいのかも)
参考: https://developers.cloudflare.com/workers/observability/local-development-and-testing/
終わりに
ドキュメントに当たるのはやっぱり大事
Discussion