Ich streame S3-Bilder mit CloudFront, wollte aber beim Aktualisieren des Bildes den Cache (Cache auf dem Edgeserver) leeren, also habe ich untersucht, wie das geht.
Verwenden Sie zur Implementierung mit Golang die Funktionen rund um CloudFront in AWS SDK Go. Der Beamte ist hier: Cloudfront - Amazon Web Services - Go SDK
Verwenden Sie die Methode "CreateInvalidation" dieses SDK. Die Implementierung sieht wie folgt aus.
const (
//CloudFront ID
CloudFrontID = "HOGEHOGE"
//Pfad zum Löschen des Cache in der 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,
},
},
}
}
Es scheint, dass "CallerReference" ein eindeutiger Wert sein sollte, also habe ich einen Zeitstempel gesetzt. Geben Sie die Verteilungs-ID und den Pfad an, die mit "CreateInvalidationInput" gelöscht werden sollen.
Vergessen Sie nicht, CloudFront-Berechtigungen zu erteilen, wenn Sie auf Lambda ausgeführt werden.
Es scheint, dass der Cache selbst auf dem Edge-Server von CloudFront auch über die AWS-Webkonsole gelöscht werden kann. Wie in [AWS] Amazon CloudFront Invalidation gezeigt, wird es als "Invalidation" bezeichnet. Ist der Begriff zum Löschen des Caches.