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.