CloudFront 似乎没有调用 lambda@edge 函数

CloudFront 似乎没有调用 lambda@edge 函数

我有一个 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;
}

使用FunctionsCloudFront 服务左侧菜单上的项保存 + 发布此功能,然后编辑分发的默认行为,并将查看器请求功能关联更改为新功能。

相关内容