Điểm:1

CloudFront dường như không gọi hàm lambda@edge

lá cờ in

Tôi có bản phân phối CloudFront. Nguồn gốc là một bộ chứa S3 sử dụng OAI.

Tôi đã tạo một hàm lambda@edge theo hướng dẫn từ https://aws.amazon.com/blogs/compute/implementing-default-directory-indexes-in-amazon-s3-backed-amazon-cloudfront-origins-using-lambdaedge/

Về cơ bản, tôi muốn hàm lambda@edge chuyển hướng các URL kết thúc bằng / đến /index.html. Hoạt động như Apache Directroy Index.

Bản phân phối CloudFront hoạt động cho các URL không có yêu cầu chuyển hướng. Nhưng CloudFront dường như không gọi hàm lamba@edge của tôi.

Tôi đã đảm bảo rằng có sự liên kết chính xác giữa bản phân phối CloudFront và phiên bản chức năng labda@edge.

Tôi đã thực hiện một số yêu cầu kiểm tra:

cuộn tròn -tôi https://www.sudheer.net/blog/
HTTP/2 403 
loại nội dung: ứng dụng/xml
ngày: Thứ bảy, ngày 19 tháng 2 năm 2022 14:35:38 GMT
máy chủ: AmazonS3
x-cache: Lỗi từ cloudfront
qua: 1.1 5d840d432727e3561fd1a3de915212ca.cloudfront.net (CloudFront)
x-amz-cf-pop: EWR53-C2
x-amz-cf-id: leub-Kgu4Bh9xH4Rn5o7bxs62B1NBO4ViEu6hv-_xtGG7DSQlBFEXw=

Tôi nhận được 403.Tôi không tìm thấy bất kỳ nhật ký lambda@edge nào ở bất kỳ khu vực nào.

Điều gì có thể là vấn đề? Làm thế nào để tôi đi tìm nó?

Hàm Lambda@Edge có các nguyên tắc chính:

    "Phiên bản": "17-10-2012",
    "Bản tường trình": [
        {
            "Sid": "",
            "Hiệu ứng": "Cho phép",
            "Hiệu trưởng": {
                "Dịch vụ": [
                    "edgelambda.amazonaws.com",
                    "lambda.amazonaws.com"
                ]
            },
            "Hành động": "sts:AssumeRole"
        }
    ]
}

Điểm:0
lá cờ cn

Bạn thực sự có thể làm điều này với CloudFront Functions. Tự quảng cáo không biết xấu hổ, nhưng tôi đã gặp chính xác vấn đề này và đã viết về nó trên blog của tôi.

Có hiệu quả:

tôi đã tìm thấy bài SO này, điều này cho tôi thấy tôi cần tạo chức năng này:

hàm xử lý (sự kiện) {
    var request = event.request;
    var uri = request.uri;
    
    // Kiểm tra xem URI có thiếu tên tệp không.
    nếu (uri.endsWith('/')) {
        request.uri += 'index.html';
    } 
    // Kiểm tra xem URI có thiếu phần mở rộng tệp không.
    khác nếu (!uri.includes('.')) {
        request.uri += '/index.html';
    }

    Yêu cầu trả lại;
}

Sử dụng Chức năng trên menu bên trái trong dịch vụ CloudFront để lưu + xuất bản chức năng này, sau đó chỉnh sửa hành vi mặc định của bản phân phối của bạn và thay đổi liên kết chức năng yêu cầu Trình xem thành chức năng mới của bạn.

Sudheer Satyanarayana avatar
lá cờ in
Cảm ơn bạn @ shearn89. Trên thực tế, vấn đề của tôi là thứ tự hành vi bộ đệm không chính xác. Nhưng tôi đã đơn giản hóa việc thiết lập nhờ các chức năng của CloudFront. Tôi đã bỏ qua Lambda@Edge để chuyển sang giải pháp đơn giản hơn.
lá cờ cn
Vui lòng chia sẻ giải pháp của bạn và chấp nhận nó để nâng cấp!

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.