キャッシュクリアAPI
ベータ版
キャッシュクリアAPIはベータ版の機能です。リクエストやレスポンスの形式、制限などが変更される場合があります。
CI、CMS、運用スクリプトなどのプログラムから、LightFile Proxyのキャッシュクリアを依頼し、その結果を確認できます。管理画面のキャッシュ操作と同じ指定ができ、CloudFrontのキャッシュ削除も連携して実行できます。
機械可読な仕様(OpenAPI)は https://manage.lightfile-proxy.net/openapi/cache-clear-api.yaml で公開しています。
使い方の流れ
- マネジメントコンソールの 設定 › APIキー で、キーを発行します。
POSTでキャッシュクリアを依頼し、返ってきたidを保存します。- その
idでGETし、statusがcompletedかfailedになるまで、15〜30秒おきに確認します。
# 1. 依頼する(202 と id が返る)
curl -X POST https://manage.lightfile-proxy.net/api/v1/clusters/example-1/cache-clear-jobs \
-H 'Authorization: Bearer lfpk_...' \
-H 'Idempotency-Key: 6f1c2b0e-3d4a-4c1e-9a55-0b8e2f7d91aa' \
-H 'Content-Type: application/json' \
-d '{
"origin": "https://origin.example.com/",
"paths": ["/images/campaign/", "/css/"],
"cloudFront": { "distributionId": "E2ABCDEF123456" }
}'
# 2. 覚えておいた id で状態を尋ねる
curl https://manage.lightfile-proxy.net/api/v1/clusters/example-1/cache-clear-jobs/api-Xa9k... \
-H 'Authorization: Bearer lfpk_...'APIキー
APIキーは、いくつかの操作を管理画面を介さずにプログラムから指示するためのキーです。キャッシュクリアAPIも、このキーで使います。
- マネジメントコンソールの 設定 › APIキー で発行します。そのクラスタにアクセスできるユーザーなら、どなたでも発行・失効できます。
- キーは発行した直後の1回しか表示されません。 使う仕組みの設定に保存してください。
- 期限は既定で1年です。30日・90日・180日・1年・無期限から選べます。
- キーごとに、許可する操作を選べます。キャッシュクリアAPIで使うのは「キャッシュクリアの依頼」と「キャッシュクリアの状態の確認」です。状態を見るだけの仕組みには、確認だけを許可したキーを渡してください。
- キーはクラスタに属します。発行した人がクラスタの権限を外れても使え続けるので、使わなくなったキーは失効させてください。
- リクエストには
Authorization: Bearer <APIキー>のヘッダーを付けます。
ブラウザで使わない
ブラウザのコードにキーを埋め込まないでください。サーバーから呼び出す前提で、ブラウザからの呼び出し(CORS)には対応していません。
ベースURL
https://manage.lightfile-proxy.net/api/v1{clusterId} には、マネジメントコンソールの左上に表示されるクラスタIDを指定します。
キャッシュクリアを依頼する
POST /clusters/{clusterId}/cache-clear-jobs| フィールド | 必須 | 管理画面では | 説明 |
|---|---|---|---|
origin | — | オリジンの選択 | 画面に表示されるオリジンのURL、またはオリジンのID。指定すると paths をオリジンのルートからのパスとして扱い、URLを渡してもホスト部分は無視します |
paths | 必須 | パスの入力欄(1行が1要素) | キャッシュクリアする条件。前方一致です。末尾の * は取り除きます。origin を省くときは、オリジンの完全なURLを指定します。100件まで |
cloudFront.distributionId | — | ディストリビューションの選択 | 指定すると、LightFile Proxyのキャッシュクリアが終わった後にCloudFrontのキャッシュ削除も依頼します |
maxEntries | — | (画面にはありません) | 該当するキャッシュがこの件数を超えたら、何も消さずに失敗させます。省くと上限はありません |
ヘッダー Idempotency-Key(任意)を付けると、同じキーでの再送は新しいジョブを作らず、最初のジョブを返します。通信が途切れて再送したときに、二重にキャッシュクリアが走るのを防げます。値にはUUIDなどを使い、リクエストごとに変えてください。
- 成功すると
202 Acceptedと、作ったジョブを返します。同じIdempotency-Keyでの再送なら200 OKです。 - CloudFrontのキャッシュ削除は、指定したパスの末尾に
*を付けた前方一致で依頼します(例:/img/a.jpg→/img/a.jpg*)。CloudFrontのキャッシュが多めに削除されても、次のアクセスで取り直すだけで表示には影響しません。 - CloudFrontと連携するとき、
pathsは15件までです。 CloudFrontは*を含む削除の依頼を、1ディストリビューションあたり同時に15件までしか受け付けないためです。多いときは共通する親のパス(例:/img/)にまとめてください。 - 同じクラスタで終わっていないキャッシュクリアが5件あると、
429を返します。Retry-Afterの秒数待ってから再送してください。
状態を確認する
GET /clusters/{clusterId}/cache-clear-jobs/{id}{
"id": "api-Xa9kQ2mP7vR4tN8wB1cD-0c5e91f2a7b3d4e6f8a9b0c1",
"status": "invalidating",
"createdAt": "2026-09-14T05:12:03.120Z",
"updatedAt": "2026-09-14T05:13:41.002Z",
"requestedBy": { "type": "apiKey", "apiKeyId": "Xa9kQ2mP7vR4tN8wB1cD", "name": "CI(本番デプロイ後)" },
"target": {
"urlPrefixes": ["https://origin.example.com/images/campaign/", "https://origin.example.com/css/"],
"maxEntries": null
},
"proxy": {
"status": "done",
"progress": 100,
"message": "キャッシュを削除しました。",
"startedAt": "2026-09-14T05:12:09.884Z",
"result": {
"files": 1284,
"fileSize": 83123456,
"byCacheType": [{ "cacheType": "webp", "files": 1284, "fileSize": 83123456 }],
"examples": [{ "cacheType": "webp", "url": "https://origin.example.com/images/campaign/a.jpg", "fileSize": 48213 }]
}
},
"cloudFront": {
"status": "inProgress",
"distributionId": "E2ABCDEF123456",
"distributionName": "www.example.com",
"paths": ["/images/campaign/*", "/css/*"],
"invalidationId": "I2J0PQX7EXAMPLE",
"requestedAt": "2026-09-14T05:13:40.551Z",
"completedAt": null,
"message": "CloudFrontのキャッシュ削除 I2J0PQX7EXAMPLE をリクエストしました。数分で反映されます。"
}
}status(全体の状態)
| status | 意味 |
|---|---|
queued | 実行の順番を待っています |
clearing | LightFile Proxyのキャッシュを削除しています |
invalidating | LightFile Proxyのキャッシュは削除済みで、CloudFrontのキャッシュ削除を待っています |
completed | すべて終わりました |
failed | 失敗しました。proxy.message か cloudFront.message に理由があります |
completed か failed になったら、確認をやめてください。
cloudFront.status(CloudFrontの状態)
CloudFrontと連携しないジョブでは、cloudFront は null です。
| cloudFront.status | 意味 |
|---|---|
pending | LightFile Proxyのキャッシュ削除が終わるのを待っています |
requesting | CloudFrontにキャッシュ削除を依頼しています |
inProgress | CloudFrontがキャッシュを削除しています |
completed | CloudFrontのキャッシュ削除が完了しました |
untracked | CloudFrontは依頼を受け付けましたが、完了したかを確認できません |
failed | CloudFrontへの依頼に失敗しました |
skipped | LightFile Proxyのキャッシュ削除が失敗したため、CloudFrontには依頼していません |
untracked は完了を保証しません
全体の status は completed になりますが、CloudFront側の削除が終わっているとは限りません。CloudFrontの削除は通常数分で終わります。
untracked になる主な理由は、CloudFront連携設定で登録したIAMロールに cloudfront:GetInvalidation が許可されていないことです。許可すると、完了まで確認できるようになります。
CloudFrontの完了は、依頼を受けて定期的に確認しているほか、この GET のときにも確認し直します。15〜30秒おきに尋ねれば、完了してからほぼ遅れずに completed を受け取れます。
一覧を見る
GET /clusters/{clusterId}/cache-clear-jobs?limit=20&requestedBy=self- 新しい順に返します。管理画面や簡易サイト運用画面から依頼したキャッシュクリアも含みます。
requestedBy=selfを付けると、そのAPIキーで依頼したものだけに絞ります。limitは1〜100(既定20)です。続きがあるときはnextCursorが返るので、次のリクエストのcursorにそのまま指定してください。- 一覧ではCloudFrontに問い合わせ直さないので、最新の状態を知りたいときは個別に
GETしてください。
指定できる値を調べる
| リクエスト | 返すもの |
|---|---|
GET /clusters/{clusterId}/origins | origin に指定できるオリジン(id・name・url) |
GET /clusters/{clusterId}/cloudfront-distributions | cloudFront.distributionId に指定できるディストリビューション |
ディストリビューションの一覧は、マネジメントコンソールがCloudFrontから読み込んだものです。一覧に無いときは、管理画面の「キャッシュ操作」でCloudFrontのディストリビューションを選ぶ欄を開き、読み込み直してください。
エラー
{ "error": { "code": "paths_outside_origin", "message": "…", "details": ["https://other.example.com/img/"] } }| HTTP | code | 意味 |
|---|---|---|
| 400 | invalid_request | 本文やパラメータの形が違う・件数の上限を超えた |
| 401 | unauthorized | APIキーが無い・正しくない・別のクラスタのキー |
| 401 | api_key_expired | APIキーの期限が切れている |
| 401 | api_key_revoked | APIキーが失効している |
| 403 | insufficient_scope | APIキーにその操作が許可されていない |
| 404 | job_not_found | ジョブが無い |
| 405 | method_not_allowed | そのURLで使えないメソッド |
| 409 | idempotency_conflict | 同じ Idempotency-Key が、内容の違うリクエストですでに使われている |
| 422 | origin_not_found | origin がクラスタに設定されていない |
| 422 | paths_outside_origin | どのオリジンにも属さないURLがある |
| 422 | distribution_not_found | ディストリビューションがCloudFront連携に見つからない |
| 429 | too_many_running_jobs | 終わっていないキャッシュクリアが多い。Retry-After の秒数待って再送 |
| 500 | internal | 想定外の問題。時間をおいて再送してください |
本文がJSONとして読めないとき(壊れたJSONなど)は、この形ではなくHTMLの 400 Bad Request が返ります。APIが受け取る前の段階で弾かれるためです。