waka.dev

2020-11-07 WranglerでCloudflare Workers KVの全てのキーを削除する

Cloudflare Workersの既存のキャッシュ(KV)を全てクリアしたい場合。

単体のコマンドでは全てのkeyを削除することは出来ないので、 kv:key listkv:bulk delete を組み合わせて使う。
このときlistで返ってくるJSONをそのままbulk deleteで使えないので、jq等を使って加工してやる必要がある。
といっても value: "" を追加してあげるだけだけど。

以下はNode.jsのワンライナーで加工している例

# 全てのkeyを取ってbulk deleteで使える形式に加工
$ wrangler kv:key list --binding=NAMESPACE | xargs -0 -i node -pe 'JSON.stringify({}.map(a => { return {"key": a.name, "value": ""}; }))' > cache.json
# 加工した結果で全てのkeyをbulk delete(yes/no聞かれるのでyesを自動入力)
$ echo "y"|wrangler kv:bulk delete --binding=NAMESPACE cache.json

このブログでは新しくissueを追加した際にキャッシュをクリアしたいので、GitHub ActionsのpostCommandでキャッシュを全てクリアした後に、curlでトップ画面を叩いて一覧系のキャッシュを作り直すということをやっている。
wrangler-actionのコンテナ内ではjqが使えなくてどうしようか悩んだが、Node.jsのイメージがベースになっていたので、Node.jsのワンライナーで加工することにした。