Автоматизована установка оновлення за 5 хв
Гаразд, хлопці. Найкращий на даний момент спосіб автоматичного оновлення CloudFront (вимкнення) - це створити функцію Lambda, яка буде спрацьовувати кожного разу, коли будь-який файл завантажується у відро S3 (новий або переписаний).
Навіть якщо ви ніколи раніше не використовували лямбда-функції, це дуже просто - просто дотримуйтесь моїх покрокових інструкцій, і це займе всього 5 хвилин:
Крок 1
Перейдіть на сторінку https://console.aws.amazon.com/lambda/home і натисніть Створити функцію лямбда.
Крок 2
Клацніть на пусту функцію (спеціальна)
Крок 3
Клацніть на порожньому (погладженому) полі і виберіть S3 з комбо
Крок 4
Виберіть відро (те саме, що і для розповсюдження CloudFront)
Крок 5
Встановіть тип події на "Об'єкт створено (усі)"
Крок 6
Встановіть префікс і суфікс або залиште його порожніми, якщо ви не знаєте, що це таке.
Крок 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
Клацніть перегляд документа про політику , натисніть кнопку " Редагувати" , натисніть " OK" та замініть визначення ролі наступним (як є):
{
"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
Встановіть пам'ять (MB) на 128, а час очікування - 5 секунд.
Крок 18
Натисніть Далі , потім натисніть кнопку Створити функцію
Крок 19
Вам добре піти! Тепер, кожен раз, коли ви завантажуєте / перезавантажуєте будь-який файл на S3, він буде оцінюватися у всіх місцях CloudFront Edge.
PS - Коли ви тестуєте, переконайтеся, що ваш браузер завантажує зображення з CloudFront, а не з локального кешу.
PSS - Зауважте, що лише перші 1000 недійсних файлів на місяць є безкоштовними, кожна інвалідація понад ліміт коштує 0,005 доларів США. Також можливі додаткові збори за функцію лямбда, але це надзвичайно дешево.