我正在将静态网站从 IIS 迁移到 Amazon S3,并使用 CloudFront 进行 https。旧网站使用了 URL 重写模块,并有 301 个重定向映射,其中包含 200 多个条目。以下是示例:
example.com?pageID=1234 => example.com/about/history
我想确保所有重定向都随网站一起迁移。许多输入键包含查询字符串,因此我认为 S3 XML 重定向规则或对象元数据重定向对它们不起作用(如果我错了,请纠正我)。
我想使用 CloudFront 用户请求事件触发器和 Lambda@Edge 函数来创建键值对的重写映射(类似于本指南)。该函数将获取请求 URI,如果它与映射中的任何键匹配,则更改请求以反映相应的值。
我可以将重写映射硬编码到 Lambda 函数中,但随着时间的推移,新条目将添加到映射中。我不希望创建新版本的函数,然后编辑 CloudFront 行为以在需要新的虚荣 URL 时使用此新版本。这感觉有点危险,而且容易出错,可能会扰乱 CloudFront。
有谁知道怎样创建一个重写映射(JSON 文件或其他文件?),该映射可以附加到 Lambda 函数并进行编辑,而无需更改 Lambda 函数本身?谢谢!
答案1
我会保存JSON 配置文件在一个S3 存储桶并做出了Lambda@Edge在启动时读取它(但不是针对每个请求!仅在 Lambda 启动时读取一次)。
授予 Lambda 适当的 IAM 权限以从 S3 读取文件,您就完成了。
- 你将把配置与代码分开
- 无需重新部署 Lambda 或重新配置 CloudFront
- 配置更改将在几分钟内在全球范围内传播(如果您想每隔几分钟重新下载一次,您可以在 Lambda 中配置配置过期时间)
希望有帮助:)