Automatisches Update-Setup in 5 Minuten
Okay Leute. Die derzeit beste Möglichkeit, ein automatisches CloudFront-Update (Ungültigmachung) durchzuführen, besteht darin, eine Lambda-Funktion zu erstellen, die jedes Mal ausgelöst wird, wenn eine Datei in den S3-Bucket hochgeladen wird (eine neue oder neu geschriebene).
Selbst wenn Sie noch nie zuvor Lambda-Funktionen verwendet haben, ist dies ganz einfach. Befolgen Sie einfach meine Schritt-für-Schritt-Anweisungen, und es dauert nur 5 Minuten:
Schritt 1
Gehen Sie zu https://console.aws.amazon.com/lambda/home und klicken Sie auf Lambda-Funktion erstellen
Schritt 2
Klicken Sie auf Leere Funktion (benutzerdefiniert)
Schritt 3
Klicken Sie auf das leere Feld und streichen Sie S3 aus der Kombination
Schritt 4
Wählen Sie Ihren Bucket aus (wie bei der CloudFront-Distribution).
Schritt 5
Setzen Sie einen Ereignistyp auf "Objekt erstellt (alle)".
Schritt 6
Stellen Sie Präfix und Suffix ein oder lassen Sie es leer, wenn Sie nicht wissen, was es ist.
Schritt 7
Überprüfen Sie Trigger aktivieren Checkbox und klicken Sie auf Weiter
Schritt 8
Benennen Sie Ihre Funktion (etwa: YourBucketNameS3ToCloudFrontOnCreateAll )
Schritt 9
Wählen Sie Python 2.7 (oder höher) als Laufzeit aus
Schritt 10
Fügen Sie anstelle des Standard-Python-Codes folgenden Code ein:
from __future__ import print_function
import boto3
import time
def lambda_handler(event, context):
for items in event["Records"]:
path = "/" + items["s3"]["object"]["key"]
print(path)
client = boto3.client('cloudfront')
invalidation = client.create_invalidation(DistributionId='_YOUR_DISTRIBUTION_ID_',
InvalidationBatch={
'Paths': {
'Quantity': 1,
'Items': [path]
},
'CallerReference': str(time.time())
})
Schritt 11
Öffnen Sie https://console.aws.amazon.com/cloudfront/home in einem neuen Browser-Tab und kopieren Sie Ihre CloudFront-Verteilungs-ID, um sie im nächsten Schritt zu verwenden.
Schritt 12
Kehren Sie zur Registerkarte Lambda zurück und fügen Sie Ihre Verteilungs-ID anstelle von _YOUR_DISTRIBUTION_ID_ in den Python-Code ein. Halten Sie umgebende Anführungszeichen.
Schritt 13
Set - Handler : lambda_function.lambda_handler
Schritt 14
Klicken Sie auf die Rolle Combobox und wählen Sie eine benutzerdefinierte Rolle erstellen . Der neue Tab im Browser wird geöffnet.
Schritt 15
Klicken Sie auf Richtliniendokument anzeigen , klicken Sie auf Bearbeiten , klicken Sie auf OK und ersetzen Sie die Rollendefinition durch Folgendes (wie sie ist):
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:*:*:*"
},
{
"Effect": "Allow",
"Action": [
"cloudfront:CreateInvalidation"
],
"Resource": [
"*"
]
}
]
}
Schritt 16
Klicken Sie auf Zulassen . Dies bringt Sie zu einem Lambda zurück. Überprüfen Sie, ob der soeben erstellte Rollenname in der vorhandenen Rolle ausgewählt ist Combobox " .
Schritt 17
Stellen Sie den Speicher (MB) auf 128 und das Zeitlimit auf 5 Sekunden ein.
Schritt 18
Klicken Sie auf Weiter und dann auf Funktion erstellen
Schritt 19
Du bist startklar! Jedes Mal, wenn Sie eine Datei in S3 hochladen / erneut hochladen, wird sie an allen CloudFront Edge-Speicherorten ausgewertet.
PS - Stellen Sie beim Testen sicher, dass Ihr Browser Bilder aus CloudFront und nicht aus dem lokalen Cache lädt.
PSS - Bitte beachten Sie, dass nur die ersten 1000 Ungültigmachungen von Dateien pro Monat kostenlos sind. Jede Ungültigmachung über das Limit hinaus kostet 0,005 USD. Es können auch zusätzliche Gebühren für die Lambda-Funktion anfallen, diese sind jedoch äußerst günstig.