Estou usando o CloudFront da Amazon para veicular arquivos estáticos dos meus aplicativos da web.
Não há como dizer a uma distribuição na nuvem que ele precisa atualizar seu arquivo ou apontar um único arquivo que deve ser atualizado?
A Amazon recomenda que você versão seus arquivos como logo_1.gif, logo_2.gif e assim por diante como uma solução alternativa para esse problema, mas isso parece uma solução bastante estúpida. Não existe absolutamente outra maneira?
Respostas:
Boas notícias. Finalmente, a Amazon adicionou um recurso de invalidação. Veja a Referência da API .
Esta é uma solicitação de amostra da Referência da API:
fonte
createInvalidation
solicitação de API , a atualização ainda está demorando de 5 a 10 minutos para invalidar. Observe que eu escrevo esse comentário 4 anos após o seu.A partir de 19 de março, a Amazon agora permite que o TTL do cache do Cloudfront seja de 0 segundos; portanto, teoricamente, você nunca deve ver objetos obsoletos. Portanto, se você possui seus ativos no S3, basta acessar o Painel da Web da AWS => S3 => Editar propriedades => Metadados e defina seu valor "Cache-Control" como "max-age = 0".
Isso é direto da documentação da API :
fonte
Com a API de invalidação, ela é atualizada em alguns minutos.
Confira PHP Invalidator .
fonte
Configuração de atualização automatizada em 5 minutos
Ok pessoal. A melhor maneira possível por enquanto de executar a atualização automática do CloudFront (invalidação) é criar a função Lambda que será acionada sempre que qualquer arquivo for carregado no bucket do S3 (um novo ou reescrito).
Mesmo se você nunca usou funções lambda antes, é realmente fácil - basta seguir minhas instruções passo a passo e levará apenas 5 minutos:
Passo 1
Acesse https://console.aws.amazon.com/lambda/home e clique em Criar uma função lambda
Passo 2
Clique em Função em branco (personalizada)
etapa 3
Clique na caixa vazia (com traços) e selecione S3 no combo
Passo 4
Selecione seu Balde (o mesmo da distribuição do CloudFront)
Etapa 5
Defina um tipo de evento para "Objeto criado (todos)"
Etapa 6
Defina Prefixo e Sufixo ou deixe em branco se não souber o que é.
Etapa 7
Marque a caixa de seleção Ativar gatilho e clique em Avançar
Etapa 8
Nomeie sua função (algo como: YourBucketNameS3ToCloudFrontOnCreateAll )
Etapa 9
Selecione Python 2.7 (ou posterior) como Runtime
Etapa 10
Cole o seguinte código em vez do código python padrão:
Etapa 11
Abra https://console.aws.amazon.com/cloudfront/home em uma nova guia do navegador e copie seu ID de distribuição do CloudFront para uso na próxima etapa.
Etapa 12
Retorne à guia lambda e cole seu ID de distribuição em vez de _YOUR_DISTRIBUTION_ID_ no código Python. Mantenha as aspas circundantes.
Etapa 13
Manipulador de conjunto : lambda_function.lambda_handler
Etapa 14
Clique na caixa de combinação de funções e selecione Criar uma função personalizada . Uma nova guia no navegador será aberta.
Etapa 15
Clique em exibir documento de política , clique em editar , clique em OK e substitua a definição de função pelo seguinte (como está):
Etapa 16
Clique em permitir . Isso o levará a uma lambda. Verifique novamente se o nome da função que você acabou de criar está selecionado na caixa de combinação Existente da função .
Etapa 17
Defina Memória (MB) para 128 e Timeout para 5 seg.
Etapa 18
Clique em Avançar e , em seguida, clique em Criar função
Etapa 19
Você está pronto para ir! A partir de agora, sempre que você carregar / recarregar qualquer arquivo no S3, ele será avaliado em todos os locais do CloudFront Edge.
PS - Ao fazer o teste, verifique se o navegador está carregando imagens do CloudFront, não do cache local.
PSS - Observe que apenas as primeiras 1000 invalidações de arquivo por mês são gratuitas, e cada invalidação acima do limite custa US $ 0,005. Também podem ser aplicadas cobranças adicionais pela função Lambda, mas é extremamente barato.
fonte
Explorador de balde tem uma interface do usuário que facilita bastante isso agora. Aqui está como:
Clique com o botão direito do mouse no seu balde. Selecione "Gerenciar distribuições".
Clique com o botão direito na sua distribuição. Selecione "Obter lista de invalidação do Cloudfront". Em seguida, selecione "Criar" para criar uma nova lista de invalidação. Selecione os arquivos para invalidar e clique em "Invalidar". Aguarde de 5 a 15 minutos.
fonte
Se você instalou o boto (que não é apenas para python, mas também instala um monte de utilitários de linha de comando úteis), ele oferece um utilitário de linha de comando especificamente chamado
cfadmin
ou 'cloud front admin' que oferece a seguinte funcionalidade:Você invalida as coisas executando:
fonte
Apenas postando para informar quem visita esta página (primeiro resultado em 'Cloudfront File Refresh') que existe um invalidador on-line fácil de usar e disponível, disponível no swook.net
Este novo invalidador é:
Divulgação completa: Eu fiz isso. Diverta-se!
fonte
Uma maneira muito fácil de fazer isso é a versão do FOLDER.
Portanto, se seus arquivos estáticos são centenas, por exemplo, basta colocá-los em uma pasta chamada por ano + versão.
por exemplo, eu uso uma pasta chamada 2014_v1, onde por dentro tenho todos os meus arquivos estáticos ...
Então, dentro do meu HTML, eu sempre coloco a referência na pasta. (é claro que eu tenho um PHP para incluir onde defini o nome da pasta.) Então, alterando um arquivo, ele realmente muda em todos os meus arquivos PHP.
Se eu quiser uma atualização completa, simplesmente renomeio a pasta para 2014_v2 no meu código-fonte e altero dentro do php include para 2014_v2
todo o HTML muda automaticamente e solicita o novo caminho, cache MISS na nuvem e solicita-o à fonte.
Exemplo: SOURCE.mydomain.com é minha fonte, cloudfront.mydomain.com é CNAME para distribuição em nuvem.
Então, o PHP chamou esse arquivo cloudfront.mydomain.com/2014_v1/javascript.js e quando eu quero uma atualização completa, simplesmente renomeio a pasta na fonte para "2014_v2" e altero o PHP incluindo definindo a pasta como "2014_v2" .
Assim, não há atraso para invalidação e SEM CUSTO!
Este é o meu primeiro post no stackoverflow, espero que tenha feito bem!
fonte
Defina TTL = 1 hora e substitua
http://developer.amazonwebservices.com/connect/ann.jspa?annID=655
fonte
Em rubi, usando a gema de nevoeiro
mesmo na invalidação, ainda leva de 5 a 10 minutos para a invalidação processar e atualizar em todos os servidores de borda da amazon
fonte
invalidação atual do suporte da CLI da AWS no modo de visualização. Execute o seguinte no seu console uma vez:
Eu implanto meu projeto da web usando o npm. Eu tenho os seguintes scripts no meu
package.json
:Com os scripts acima, você pode implantar seu site com:
fonte
--paths /
para--paths /*
. meu também era como a sua e não invalida a distribuição ...Se você estiver usando a AWS, provavelmente também usará sua ferramenta CLI oficial (mais cedo ou mais tarde). AWS CLI versão 1.9.12 ou superior suporta a invalidação de uma lista de nomes de arquivos.
Divulgação completa: Eu fiz isso. Diverta-se!
fonte
Vá para o CloudFront.
Clique no seu ID / Distribuições.
Clique em Invalidações.
Clique em criar Invalidação.
Na caixa de exemplo gigante, digite * e clique em invalidar
Feito
fonte