Configuración de actualización automatizada en 5 minutos
Ok muchachos. La mejor manera posible por ahora de realizar una actualización automática de CloudFront (invalidación) es crear la función Lambda que se activará cada vez que se cargue cualquier archivo en el depósito S3 (uno nuevo o reescrito).
Incluso si nunca antes usó las funciones lambda, es realmente fácil: solo siga mis instrucciones paso a paso y tomará solo 5 minutos:
Paso 1
Vaya a https://console.aws.amazon.com/lambda/home y haga clic en Crear una función lambda
Paso 2
Haga clic en Función en blanco (personalizada)
Paso 3
Haga clic en el cuadro vacío (con trazos) y seleccione S3 del combo
Paso 4
Seleccione su Bucket (igual que para la distribución CloudFront)
Paso 5
Establezca un Tipo de evento en "Objeto creado (todo)"
Paso 6
Establezca Prefijo y Sufijo o déjelo vacío si no sabe qué es.
Paso 7
Marque la casilla de verificación Activar activador y haga clic en Siguiente
Paso 8
Asigne un nombre a su función (algo así como: YourBucketNameS3ToCloudFrontOnCreateAll )
Paso 9
Seleccione Python 2.7 (o posterior) como tiempo de ejecución
Paso 10
Pegue el siguiente código en lugar del código predeterminado de Python:
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())
})
Paso 11
Abra https://console.aws.amazon.com/cloudfront/home en una nueva pestaña del navegador y copie su ID de distribución de CloudFront para usar en el siguiente paso.
Paso 12
Regrese a la pestaña lambda y pegue su identificación de distribución en lugar de _YOUR_DISTRIBUTION_ID_ en el código de Python. Mantenga las citas circundantes.
Paso 13
Establecer controlador : lambda_function.lambda_handler
Paso 14
Haga clic en el cuadro combinado de roles y seleccione Crear un rol personalizado . Se abrirá una nueva pestaña en el navegador.
Paso 15
Haga clic en ver documento de política , haga clic en editar , haga clic en Aceptar y reemplace la definición de rol con lo siguiente (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": [
"*"
]
}
]
}
Paso 16
Haga clic en permitir . Esto te devolverá a una lambda. Verifique que el nombre del rol que acaba de crear esté seleccionado en el cuadro combinado de roles existentes .
Paso 17
Establezca Memoria (MB) en 128 y Tiempo de espera en 5 segundos.
Paso 18
Haga clic en Siguiente , luego haga clic en Crear función
Paso 19
tú eres bueno para irte. Ahora, cada vez que cargue / vuelva a cargar cualquier archivo en S3, se evaluará en todas las ubicaciones de CloudFront Edge.
PD: cuando esté probando, asegúrese de que su navegador esté cargando imágenes desde CloudFront, no desde la memoria caché local.
PSS: tenga en cuenta que solo los primeros 1000 archivos de invalidación por mes son gratuitos, cada invalidación por encima del límite cuesta $ 0.005 USD. También se pueden aplicar cargos adicionales por la función Lambda, pero es extremadamente barato.