gpt4 book ai didi

amazon-web-services - 在 CloudFront 中即时调整图像大小并立即将它们放入相同的 URL : AWS CloudFront -> S3 -> Lambda -> CloudFront

转载 作者:行者123 更新时间:2023-12-03 12:59:45 27 4
gpt4 key购买 nike

TLDR:我们必须通过为来自 Lambda 函数的响应创建新的缓存行为来欺骗 CloudFront 307 重定向缓存。
你不会相信我们离实现这一目标有多近。我们在最后一步卡得太厉害了。
商业案例:
我们的应用程序将图像存储在 S3 中,并使用 CloudFront 为它们提供服务,以避免全局各地的任何地理减速。
现在,我们希望设计非常灵活,并且能够直接在 CanFront URL 中请求新的图像尺寸!
每个新的图像大小将按需创建,然后存储在 S3 中,因此第二次请求它时
服务非常快,因为它将存在于 S3 中,也将缓存在 CloudFront 中。
假设用户上传了图片chucknorris.jpg。
只有原始图像将存储在 S3 中,并将在我们的页面上提供,如下所示:
//xxxxx.cloudfront.net/chucknorris.jpg
我们已经计算出现在需要显示 200x200 像素的缩略图。
因此,我们将图像 src 放在我们的模板中:
//xxxxx.cloudfront.net/chucknorris-200x200.jpg
当请求此新大小时,亚马逊 Web 服务必须在同一个存储桶中使用请求的 key 即时提供它。
这样,图像将直接加载到 CloudFront 的相同 URL 中。
我用架构概述和工作流程绘制了一张丑陋的图,说明我们如何在 AWS 中执行此操作:
enter image description here
以下是 Python Lambda 的结束方式:

return {
'statusCode': '301',
'headers': {'location': redirect_url},
'body': ''
}
问题:
如果我们让 Lambda 函数重定向到 S3,它就像一个魅力。
如果我们重定向到 CloudFront,它会进入重定向循环,因为 CloudFront 缓存 307(以及 301、302 和 303)。
一旦我们的 Lambda 函数重定向到 CloudFront,CloudFront 就会调用 API Getaway URL 而不是从 S3 获取图像:
enter image description here
我想在 CloudFront 的 Behaviors 中创建新的缓存行为设置选项卡。
此行为不应缓存来自 Lambda 或 S3 的响应(不知道那里内部究竟发生了什么),但仍应缓存对相同大小的图像的任何后续请求。
我正在尝试设置路径模式 -\d+x\d+\..+$ , 在添加“Lambda 函数关联”中添加Lambda 函数的ARN
并设置事件类型 Origin Response .
接下来,我将“默认 TTL”设置为 0 .
但由于某些错误,我无法保存该行为:
enter image description here
我们是在正确的道路上,还是这个“Lambda 函数关联”的想法完全不同?

最佳答案

最后我能够解决它。虽然这不是真正的结构解决方案,但它满足了我们的需求。

首先,感谢迈克尔的回答,我使用了路径模式来匹配所有媒体类型。其次,缓存行为页面对我来说有点误导:实际上 Lambda 关联是针对 Lambda@Edge 的,尽管我在缓存行为的所有工具提示中都没有看到这一点:您看到的只是 Lambda。此功能无法帮助我们,因为我们不想仅仅因为这个特定问题而使用 Lambda@Edge 扩展我们的 AWS 服务范围。

下面是解决方法:
我定义了多种缓存行为,我们支持的每种媒体类型一种:

enter image description here

对于每个缓存行为,我设置了 Default TTL成为 0 .

最重要的部分:在 Lambda 函数中,我添加了一个 Cache-Control将它们放入 S3 时调整大小的图像的标题:

s3_resource.Bucket(BUCKET).put_object(Key=new_key, 
Body=edited_image_obj,
CacheControl='max-age=12312312',
ContentType=content_type)

为了验证一切正常,我现在看到新的图像维度与 CloudFront 中的缓存 header 一起提供:

enter image description here

关于amazon-web-services - 在 CloudFront 中即时调整图像大小并立即将它们放入相同的 URL : AWS CloudFront -> S3 -> Lambda -> CloudFront,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42308291/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com