5 分钟内自动更新设置
好的,伙计们。目前执行自动 CloudFront 更新(失效)的最佳方法是创建 Lambda 函数,每次将任何文件上传到 S3 存储桶(新文件或重写)时都会触发该函数。
即使您以前从未使用过 lambda 函数,它也非常简单——只需按照我的分步说明操作,只需 5 分钟:
第 1 步
转到https://console.aws.amazon.com/lambda/home 并点击创建 lambda 函数
第 2 步
点击空白函数(自定义)
第 3 步
点击空白(描边)框并从组合中选择S3
第 4 步
选择您的存储桶(与 CloudFront 分配相同)
第 5 步
将事件类型设置为“对象已创建(全部)”
第 6 步
设置前缀和后缀,如果您不知道它是什么,则将其留空。
第 7 步
选中启用触发器复选框并点击下一步
第 8 步
为您的函数命名(例如:YourBucketNameS3ToCloudFrontOnCreateAll)
第 9 步
选择Python 2.7(或更高版本)作为Runtime
第 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 分配 ID 以供下一步使用。
第 12 步
返回 lambda 选项卡并在 Python 代码中粘贴您的分发 ID,而不是 _YOUR_DISTRIBUTION_ID_。保留周围的引号。
第 13 步
设置handler:lambda_function.lambda_handler
第 14 步
点击角色组合框并选择创建自定义角色。将打开浏览器中的新标签页。
第 15 步
点击view policy document,点击edit,点击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 步
点击允许。这将使您返回一个 lambda。仔细检查您刚刚创建的角色名称是否已在 Existing role 组合框中选择。
第 17 步
将 内存 (MB) 设置为 128 并将 超时 设置为 5 秒。
第 18 步
点击下一步,然后点击创建函数
第 19 步
你可以走了!现在,每次您将任何文件上传/重新上传到 S3 时,都会在所有 CloudFront 边缘位置对其进行评估。
PS - 当您进行测试时,请确保您的浏览器正在从 CloudFront 加载图像,而不是从本地缓存。
PSS - 请注意,每月只有前 1000 个文件失效是免费的,每个超出限制的失效费用为 0.005 美元。 Lambda 函数也可能会收取额外费用,但非常便宜。