我有一个 CloudFront 发行版。源是使用 OAI 的 S3 存储桶。
我已经按照以下说明创建了 lambda@edge 函数https://aws.amazon.com/blogs/compute/implementing-default-directory-indexes-in-amazon-s3-backed-amazon-cloudfront-origins-using-lambdaedge/
基本上,我希望 lambda@edge 函数将以 / 结尾的 URL 重定向到 /index.html。就像 Apache DirectroyIndex 一样。
CloudFront 分发适用于没有重定向要求的 URL。但 CloudFront 似乎没有调用我的 lamba@edge 函数。
我已经确保 CloudFront 分布和 labda@edge 函数版本之间存在正确的关联。
我提出了几个测试请求:
curl -I https://www.sudheer.net/blog/
HTTP/2 403
content-type: application/xml
date: Sat, 19 Feb 2022 14:35:38 GMT
server: AmazonS3
x-cache: Error from cloudfront
via: 1.1 5d840d432727e3561fd1a3de915212ca.cloudfront.net (CloudFront)
x-amz-cf-pop: EWR53-C2
x-amz-cf-id: leub-Kgu4Bh9xH4Rn5o7bxs62B1NBO4ViEu6hv-_xtGG7DSQlBFEXw=
我得到 403。我在任何区域都找不到任何 lambda@edge 日志。
这可能是什么问题?我该如何找到它?
Lambda@Edge 函数具有以下原则:
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": [
"edgelambda.amazonaws.com",
"lambda.amazonaws.com"
]
},
"Action": "sts:AssumeRole"
}
]
}
答案1
实际上,您可以使用 CloudFront Functions 来实现这一点。我无耻地自我推销,但我确实遇到了这个问题,并在我的博客。
有效地:
我发现这篇文章,这表明我需要创建这个函数:
function handler(event) {
var request = event.request;
var uri = request.uri;
// Check whether the URI is missing a file name.
if (uri.endsWith('/')) {
request.uri += 'index.html';
}
// Check whether the URI is missing a file extension.
else if (!uri.includes('.')) {
request.uri += '/index.html';
}
return request;
}
使用Functions
CloudFront 服务左侧菜单上的项保存 + 发布此功能,然后编辑分发的默认行为,并将查看器请求功能关联更改为新功能。