Effacer le cache CloudFront avec Golang

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.

Implémenter en Go

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.

En plus (Comment supprimer de la console Web AWS)

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.

Recommended Posts

Effacer le cache CloudFront avec Golang
Utiliser le cache HTTP en Python
Installez GoLang dans goenv de anyenv
Éléments csv entre guillemets doubles dans Golang