[Cloudflare Pages] デプロイが多すぎてCloudflare Pagesプロジェクトが削除できないときの対処手順
Cloudflare PagesからWorkersに移行したあと、不要になったPagesプロジェクトを削除しようとしたところ、デプロイ数が多すぎて削除できない状態になった。
削除ボタンを押せば終わる想定だったため、最初は少し詰まった。
本記事では、実際に解決した手順をまとめる。
背景
- Cloudflare Pagesを運用していた
- Workersへ移行したため、Pagesプロジェクトが不要になった
- Dashboardから削除しようとしたが失敗した
症状:Pagesプロジェクトが削除できない
Cloudflare Pagesには既知の制限があり、デプロイ数が多いプロジェクトは削除できないことがある。
公式Known Issuesにも明記されている。
解決方針
削除できない場合は以下の順序になる。
- デプロイを先に削除する
- デプロイ数が減ったらPagesプロジェクトを削除する
Cloudflareが公式に提供しているNode.jsスクリプトで一括削除できる。
手順まとめ(全体像)
やることは大きく分けて以下。
- スクリプトを取得する
- API Tokenを作成する(Pages Edit権限が必要)
- Account IDを正しく取得する(ここが一番ハマる)
- デプロイを一括削除する
- Dashboardからプロジェクト削除する
実行手順
1. 公式スクリプトを取得する
今回は、CloudflareのKnown Issuesページから直接zipファイルをダウンロードした。
ページ内に delete-all-deployments.zip へのリンクがあり、そこから取得できる。
curl でも直接ダウンロードできるらしい。
curl -O https://pub-505c82ba1c844ba788b97b1ed9415e75.r2.dev/delete-all-deployments.zip
unzip delete-all-deployments.zip
cd delete-all-deployments2. 依存関係をインストールする
npm install3. 必要な環境変数を準備する
スクリプト実行には以下の環境変数が必要。
-
CF_API_TOKEN:Cloudflare API Token(Pagesを操作するための認証情報) -
CF_ACCOUNT_ID:CloudflareのAccount ID(32桁の英数字文字列) -
CF_PAGES_PROJECT_NAME:削除対象のPagesプロジェクト名(slug) -
(任意)
CF_DELETE_ALIASED_DEPLOYMENTS:alias付きデプロイも削除するかどうか(trueで有効)- aliasとは、ブランチ名などに紐づいたプレビュー用URLの別名が付いているデプロイのこと
- 例:通常のpreview URLが
https://abcd1234.example.pages.devのとき、aliasが付くとhttps://feature-login.example.pages.devのようなURLでも参照できる
4. CF_API_TOKENを作成する
Cloudflare Dashboardから作成する。
- My Profile
- API Tokens
- Create Token
- Custom Token
必須権限
最低限これが必要。
- Account → Pages → Edit
WorkersのEditやDNSのEditでは代替できない。
注意:Tokenは漏洩したら即失効する。記事に貼らない。
5. CF_ACCOUNT_ID を取得する
CF_ACCOUNT_ID はアカウント名ではない。ここで一度ハマった。
最初、私は次のように自分のアカウント名をそのまま入れてしまった。
CF_ACCOUNT_ID="onidazo"しかしこれは誤りで、名前を入れると失敗する。この状態で実行すると Failed to list deployments エラーになる。
正しくはDashboard URLに含まれる 32桁の ID。
https://dash.cloudflare.com/<ACCOUNT_ID>/workers-and-pagesこの <ACCOUNT_ID> をコピーする。
例:
CF_ACCOUNT_ID="1234567890abcdef1234567890abcdef"6. CF_PAGES_PROJECT_NAME を確認する
Pagesのプロジェクト一覧に表示されるslugをそのまま使う。
例:
CF_PAGES_PROJECT_NAME="ofurousagi"7. デプロイを一括削除する
エイリアス付きも含めて削除する場合
Previewデプロイが多い場合、aliasが付いていることが多い。
完全削除するなら true を付ける。
CF_API_TOKEN="xxxxx" \
CF_ACCOUNT_ID="1234567890abcdef1234567890abcdef" \
CF_PAGES_PROJECT_NAME="ofurousagi" \
CF_DELETE_ALIASED_DEPLOYMENTS="true" \
npm start実行すると以下のようにページングしながら削除が進む。
Listing next 30 deployments, this may take a while...
Deleting deployment ...
Deleting deployment ...よくあるエラーと原因
Failed to list deployments...
Failed to list deployments on page 1...
Error: Could not fetch deployments原因はだいたい次のどれか。
1. CF_ACCOUNT_ID が間違っている
アカウント名を入れてしまっているケースが多い。
- ❌
onidazo - ✅
32桁の Account ID
2. API Tokenの権限不足
Account → Pages → Edit がないとlist / deleteが通らない。
3. Project名が違う
別アカウントに存在している可能性もあるので再確認する。
デプロイ削除後:Pagesプロジェクトを削除する
デプロイが減ったらDashboardから削除できるようになる。
- Workers & Pages → Pages → 対象プロジェクト
- Settings → Delete project
まとめ
- Pagesプロジェクトが削除できない場合は、まずデプロイを減らす
- 公式スクリプトで一括削除できる
CF_ACCOUNT_IDはアカウント名ではなく32桁のID- デプロイ削除後にDashboardからプロジェクトを削除する