Автоматическая настройка обновления за 5 минут
Хорошо, парни. На данный момент лучший способ выполнить автоматическое обновление CloudFront (аннулирование) - создать функцию Lambda, которая будет запускаться каждый раз, когда какой-либо файл загружается в корзину S3 (новый или перезаписывается).
Даже если вы никогда раньше не использовали лямбда-функции, это действительно просто - просто следуйте моим пошаговым инструкциям, и это займет всего 5 минут:
Шаг 1
Перейдите на https://console.aws.amazon.com/lambda/home и нажмите « Создать лямбда-функцию».
Шаг 2
Нажмите на пустую функцию (на заказ)
Шаг 3
Нажмите на пустое (обведенное) поле и выберите S3 из списка
Шаг 4
Выберите ваш Bucket (так же, как для дистрибутива CloudFront)
Шаг 5
Установите тип события «Объект создан (все)»
Шаг 6
Установите Prefix и Suffix или оставьте его пустым, если вы не знаете, что это такое.
Шаг 7
Установите флажок Включить триггер и нажмите Далее
Шаг 8
Назовите свою функцию (что-то вроде: YourBucketNameS3ToCloudFrontOnCreateAll )
Шаг 9
Выберите Python 2.7 (или выше) в качестве среды выполнения
Шаг 10
Вставьте следующий код вместо кода Python по умолчанию:
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())
})
Шаг 11
Откройте https://console.aws.amazon.com/cloudfront/home на новой вкладке браузера и скопируйте свой идентификатор распространения CloudFront для использования на следующем шаге.
Шаг 12
Вернитесь на лямбда-вкладку и вставьте свой идентификатор распространения вместо _YOUR_DISTRIBUTION_ID_ в коде Python. Держите окружающие цитаты.
Шаг 13
Установить обработчик : lambda_function.lambda_handler
Шаг 14
Нажмите на поле со списком ролей и выберите « Создать пользовательскую роль» . Откроется новая вкладка в браузере.
Шаг 15
Щелкните « Просмотр документа политики» , нажмите « Изменить» , нажмите « ОК» и замените определение роли следующим (как есть):
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:*:*:*"
},
{
"Effect": "Allow",
"Action": [
"cloudfront:CreateInvalidation"
],
"Resource": [
"*"
]
}
]
}
Шаг 16
Нажмите разрешить . Это вернет вас к лямбде. Дважды проверьте, что только что созданное вами имя роли выбрано в поле со списком Существующие роли .
Шаг 17
Установите для памяти (МБ) значение 128, а для параметра Время ожидания - 5 секунд.
Шаг 18
Нажмите Далее , затем нажмите Создать функцию
Шаг 19
Вы хороши, чтобы пойти! Теперь каждый раз, когда вы будете загружать / перезагружать любой файл в S3, он будет оцениваться во всех местах CloudFront Edge.
PS - Когда вы тестируете, убедитесь, что ваш браузер загружает изображения из CloudFront, а не из локального кэша.
PSS - Обратите внимание, что только первые 1000 недействительных файлов в месяц являются бесплатными, каждая недействительность сверх лимита стоит $ 0,005. Также может взиматься дополнительная плата за функцию лямбда, но это очень дешево.