Je diffuse des images S3 sur CloudFront, mais je voulais vider le cache (cache sur le serveur de périphérie) lors de la mise à jour des images, j'ai donc étudié comment le faire.
Pour implémenter avec Golang, utilisez les fonctionnalités autour de CloudFront dans AWS SDK Go. Officiel ici: cloudfront --Amazon Web Services --Go SDK
Utilisez la méthode CreateInvalidation
de ce SDK.
La mise en œuvre ressemble à ce qui suit.
const (
//ID CloudFront
CloudFrontID = "HOGEHOGE"
//Chemin pour supprimer le cache dans cloudfront
ClearTargetPath := "/*"
)
func ClearCache() error {
svc := cloudfront.New(session.New())
jstNow := time.Now().UTC().In(time.FixedZone("Asia/Tokyo", 9*60*60))
callerReference := jstNow.Format("200601021504")
_, err := svc.CreateInvalidation(createInvalidationInput(callerReference))
if err != nil {
return err
}
return nil
}
func createInvalidationInput(callerReference string) *cloudfront.CreateInvalidationInput {
pathItems := []*string{&ClearTargetPath}
return &cloudfront.CreateInvalidationInput{
DistributionId: aws.String(CloudFrontID),
InvalidationBatch: &cloudfront.InvalidationBatch{
CallerReference: &callerReference,
Paths: &cloudfront.Paths{
Quantity: aws.Int64(1),
Items: pathItems,
},
},
}
}
Il semble que CallerReference
devrait être une valeur unique, donc j'ai mis un horodatage.
Spécifiez le DistributionId et le chemin à supprimer avec CreateInvalidationInput
.
N'oubliez pas d'accorder des autorisations CloudFront lors de l'exécution sur Lambda.
Il semble que le cache lui-même sur le serveur de périphérie de CloudFront puisse également être effacé de la console Web AWS. Comme indiqué dans [AWS] Amazon CloudFront Invalidation, cela s'appelle ʻInvalidation`. Est le terme pour supprimer le cache.