コンテンツを削除するために、Amazon CloudFront ディストリビューションのファイルを無効化しようとしたところ、"TooManyInvalidationsInProgress" エラーが発生しました。
簡単な説明
ディストリビューションごとに、個別の各ファイルに対し、最大 3,000 件の無効化リクエストを行えます。
上記のクォータを超えている場合、次のようなエラーメッセージが表示される可能性があります。
"An error occurred (TooManyInvalidationsInProgress) when calling the CreateInvalidation operation: Processing your request will cause you to exceed the maximum number of in-progress invalidations." (リクエストを処理すると、進行中の無効化操作数の制限を超過する可能性があります)
この問題を解決するには、バージョニングされたファイル名やワイルドカードを指定するか、ファイルをキャッシュする時間を制御するか、エクスポネンシャルバックオフを備えた再試行メカニズムを実装します。
解決策
バージョニングされたファイル名を指定する
ディストリビューションのファイルを頻繁に更新する場合は、バージョニングされたファイル名を指定することをおすすめします。ファイルをバージョニングすると、過剰にキャッシュされたファイルの制御を改善し、ファイルの無効化よりもコストを低く抑えられます。詳細については、「ファイルの無効化と、バージョニングされたファイル名の指定の比較」を参照してください。
ワイルドカードを使用する
無効化パスにはワイルドカードを使用できます。ただし、最大 15 の無効化パスが同時進行可能で、ファイルクォータは適用されません。ワイルドカード (*) は、無効化パスの末尾に配置する必要があります (例: /images/image.jpg*)。
CloudFront がファイルをキャッシュする期間を制御する
オリジンまたはディストリビューションの構成を変更すると、CloudFront がファイルをキャッシュする期間を指定できます。キャッシュポリシーとオリジンリクエストポリシーにより、キャッシュキーとオリジンリクエストを制御することをおすすめします。
コンテンツをキャッシュする必要がない場合は、CachingDisabled ポリシーを使用すると、キャッシュは無効になります。詳細については、「CloudFront の設定を変更し、特定のファイルをキャッシュしないようにする方法を教えてください」を参照してください。
エクスポネンシャルバックオフを備えた再試行メカニズムを実装する
エラーを返すリクエストを再試行するには、再試行ロジックをアプリケーションに組み込むことをおすすめします。すべての AWS SDK には、エクスポネンシャルバックオフを使用するアルゴリズムを備えた再試行メカニズムが組み込まれています。このアルゴリズムの実装では、連続的なエラー応答に対する再試行を待機する時間が増加していきます。エクスポネンシャルバックオフアルゴリズムでは、多くの場合、ジッターにより連続的な衝突を防いでいます。詳細については、「再試行の動作」を参照してください。
関連情報
ファイルを無効化する際の考慮事項
無効化に対するクォータ
CreateInvalidation