Tentei invalidar arquivos para minha distribuição do Amazon CloudFront para remover conteúdo e recebi um erro “TooManyInvalidationsInProgress”.
Breve descrição
Para arquivos individuais, é possível realizar até 3.000 solicitações de invalidação para cada distribuição.
Se você exceder essa cota, poderá receber uma mensagem de erro semelhante à seguinte:
“Ocorreu um erro (TooManyInvalidationsInProgress) ao chamar a operação CreateInvalidation: O processamento de sua solicitação fará com que você exceda o número máximo de invalidações em andamento.”
Para solucionar esse problema, use nomes de arquivos com versão ou curingas, controle o tempo do arquivo de cache ou implemente um mecanismo de nova tentativa com recuo exponencial.
Resolução
Use nomes de arquivo com versão
Se você atualiza frequentemente seus arquivos a partir da sua distribuição, é uma prática recomendada usar nomes de arquivos com versão. Os arquivos com versão permitem que você controle melhor os arquivos armazenados em cache e são mais baratos do que a invalidação de arquivos. Para obter mais informações, consulte Escolher entre invalidar arquivos e usar nomes de arquivo com controle versionamento.
Use curingas
É possível usar curingas no caminho de invalidação com no máximo 15 caminhos de invalidação em andamento ao mesmo tempo, sem cotas de arquivo. Você deve colocar o curinga (*) no final do caminho de invalidação, como por exemplo: /images/image.jpg*.
Controle a quantidade de tempo em que o CloudFront armazena os arquivos em cache
É possível alterar a configuração na origem ou na distribuição para especificar por quanto tempo o CloudFront armazena objetos em cache. É uma prática recomendada usar uma política de cache e uma política de solicitação de origem para controlar a chave de cache e as solicitações de origem.
Se você não precisar armazenar seu conteúdo em cache, use a política CachingDisabled para desativar o armazenamento em cache. Para obter mais informações, consulte Como altero minhas configurações para que o CloudFront não armazene determinados arquivos em cache?
Implemente o mecanismo de repetição com recuo exponencial
É uma prática recomendada criar uma lógica de repetição em suas aplicações para repetir solicitações que retornam um erro. Todos os AWS SDKs têm um mecanismo de repetição integrado com um algoritmo que usa recuo exponencial. Esse algoritmo implementa tempos de espera cada vez maiores entre novas tentativas para respostas de erro consecutivas. Muitos dos algoritmos de recuo exponencial usa jitter (aleatoriedade) para evitar colisões sucessivas. Para obter mais informações, consulte Comportamento de repetição.
Informações relacionadas
O que você precisa saber ao invalidar arquivos
Cotas para invalidações
CreateInvalidation