Automatyczna konfiguracja aktualizacji w 5 minut
W porzadku chlopaki. Na razie najlepszym możliwym sposobem wykonania automatycznej aktualizacji CloudFront (unieważnienia) jest utworzenie funkcji Lambda, która będzie uruchamiana za każdym razem, gdy jakikolwiek plik zostanie załadowany do wiadra S3 (nowy lub przepisany).
Nawet jeśli nigdy wcześniej nie korzystałeś z funkcji lambda, jest to naprawdę łatwe - postępuj zgodnie z moimi instrukcjami krok po kroku, a zajmie to tylko 5 minut:
Krok 1
Wejdź na https://console.aws.amazon.com/lambda/home i kliknij Utwórz funkcję lambda
Krok 2
Kliknij opcję Pusta funkcja (niestandardowa)
Krok 3
Kliknij puste (obrysowane) pole i wybierz S3 z combo
Krok 4
Wybierz swój Bucket (tak samo jak w przypadku dystrybucji CloudFront)
Krok 5
Ustaw Typ zdarzenia na „Utworzono obiekt (wszystkie)”
Krok 6
Ustaw prefiks i sufiks lub pozostaw je puste, jeśli nie wiesz, co to jest.
Krok 7
Zaznacz pole wyboru Włącz wyzwalacz i kliknij Dalej
Krok 8
Nazwij swoją funkcję (na przykład: YourBucketNameS3ToCloudFrontOnCreateAll )
Krok 9
Wybierz Python 2.7 (lub nowszy) jako Runtime
Krok 10
Wklej następujący kod zamiast domyślnego kodu Pythona:
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())
})
Krok 11
Otwórz https://console.aws.amazon.com/cloudfront/home w nowej karcie przeglądarki i skopiuj swój identyfikator dystrybucji CloudFront do wykorzystania w następnym kroku.
Krok 12
Wróć do zakładki lambda i wklej swój identyfikator dystrybucji zamiast _YOUR_DISTRIBUTION_ID_ w kodzie Pythona. Zachowaj otaczające cytaty.
Krok 13
Ustaw obsługę : lambda_function.lambda_handler
Krok 14
Kliknij pole wyboru ról i wybierz opcję Utwórz rolę niestandardową . Otworzy się nowa karta w przeglądarce.
Krok 15
Kliknij wyświetl dokument zasad , kliknij edytuj , kliknij OK i zastąp definicję roli następującą (taką jaka jest):
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:*:*:*"
},
{
"Effect": "Allow",
"Action": [
"cloudfront:CreateInvalidation"
],
"Resource": [
"*"
]
}
]
}
Krok 16
Kliknij Zezwól . Spowoduje to powrót do lambda. Dokładnie sprawdź, czy nazwa roli, którą właśnie utworzyłeś, jest wybrana w polu kombinacji Istniejąca rola .
Krok 17
Ustaw pamięć (MB) na 128 i limit czasu na 5 sek.
Krok 18
Kliknij przycisk Dalej , a następnie kliknij opcję Utwórz funkcję
Krok 19
Możesz ruszać! Teraz za każdym razem, gdy prześlesz / ponownie załadujesz dowolny plik do S3, zostanie on oceniony we wszystkich lokalizacjach CloudFront Edge.
PS - Podczas testowania upewnij się, że Twoja przeglądarka ładuje obrazy z CloudFront, a nie z lokalnej pamięci podręcznej.
PSS - Należy pamiętać, że tylko pierwsze unieważnienie 1000 plików miesięcznie jest bezpłatne, a każde unieważnienie powyżej limitu kosztuje 0,005 USD. Mogą obowiązywać dodatkowe opłaty za funkcję Lambda, ale jest ona wyjątkowo tania.