Implementé mi aplicación React en s3 . Estoy usando Cloudfront para usar un certificado y llegar a mi s3 bucket a través de HTTPS . Después de luchar para configurarlo todo, logré configurarlo todo, ahora funciona bien.
Ahora actualicé mi proyecto, creé una nueva versión de bundle.js , lo subí a s3 .
Mi problema ahora es que mydomain.com apunta a la V1 de bundle.js
Entonces, traté de desenterrar un poco más, y esto es lo que encontré:
mydomain.com apunta a V1xxxxx.cloudfront.net apunta a V1mydomain.com.s3-website-eu-west-1.amazonaws.com apunta a V2 Entonces, supongo que, por alguna razón, el frente de la cloudfront apunta al V1, pero ¿por qué? ¿Hay algún caché en algún lugar allí?
Aquí está la configuración, en caso de que ayude:
Route53 Type A apunta a xxxxxx.cloudfront.netcloudfront es xxxxxx.cloudfront.netwww.mydomain.com a la CNAMES son mydomain.com y cloudfrontcloudfront origin domain name and path es mydomain.com.s3-website-eu-west-1.amazonaws.coms3 bucket es mydomain.com PD: solo para verificar que el problema no solo provenía de bundle.js , eliminé la imagen de fondo del depósito, pero de alguna manera, todavía se encuentra y se usa al acceder a mydomain.com (así que muestra el V1)
Como confirmó @Joe Clay, Cloudfront estaba almacenando todo en caché.
Para forzar el borrado del caché usando la AWS console (en algunos documentos encontré que se puede hacer usando su API ), estos son los pasos que seguí:
AWS consoleCloudfront y vea los detalles de su distribucióninvalidations y haga clic en Create invalidation* y guardarmydomain.com (es posible que deba limpiar el caché del navegador)¡Espero que esta respuesta pueda ayudar a cualquiera que tenga el mismo problema!
Sé que esta es una vieja pregunta. Pero encontré una manera de automatizar este proceso usando mi secuencia de comandos de implementación. Aquí hay una entrada de mi archivo package.json
"deploy": "npm run build && aws s3 sync --delete build/ s3://bucket-name && npm run invalidateCache", "invalidateCache": "aws cloudfront create-invalidation --distribution-id E23232323 --paths '/*'", Después de esto, todo lo que tiene que hacer es ejecutar npm run deploy .
Explicación de los comandos.
/* para que borre el caché de todas las rutas. 
Espero que esto ayude :)
Sé que esta es una vieja pregunta. Esto también se puede lograr con lambda fn, que invalidará la memoria caché de la nube para cualquier actualización en el depósito s3 de origen de origen.
El fragmento de código está aquí para lo mismo.
from __future__ import print_function import boto3 import time def lambda_handler(event, context): path = [] for items in event["Records"]: if items["s3"]["object"]["key"] == "index.html": path.append("/") else: path.append("/" + items["s3"]["object"]["key"]) print(path) client = boto3.client('cloudfront') invalidation = client.create_invalidation(DistributionId='cloudfrontdistribution id', InvalidationBatch={ 'Paths': { 'Quantity': 1, 'Items': path }, 'CallerReference': str(time.time()) })