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:
from __future__ import print_function
import boto3
import time
def lambda_handler(event, context):
for items in event["Records"]:
path = "/" + items["s3"]["object"]["key"]
print(path)
client = boto3.client('cloudfront')
invalidation = client.create_invalidation(DistributionId='_YOUR_DISTRIBUTION_ID_',
InvalidationBatch={
'Paths': {
'Quantity': 1,
'Items': [path]
},
'CallerReference': str(time.time())
})
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á):
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:*:*:*"
},
{
"Effect": "Allow",
"Action": [
"cloudfront:CreateInvalidation"
],
"Resource": [
"*"
]
}
]
}
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.