Рейтинг:1

CloudFront не вызывает функцию lambda@edge

флаг in

У меня есть дистрибутив CloudFront. Источником является сегмент S3, использующий OAI.

Я создал функцию 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.

Я сделал несколько тестовых запросов:

завиток-я https://www.sudheer.net/blog/
HTTP/2 403 
тип содержимого: приложение/xml
дата: суббота, 19 февраля 2022 г., 14:35:38 по Гринвичу
сервер: AmazonS3
x-cache: ошибка из облачного фронта
через: 1.1 5d840d432727e3561fd1a3de915212ca.cloudfront.net (CloudFront)
х-амз-кф-поп: EWR53-C2
x-amz-cf-id: leub-Kgu4Bh9xH4Rn5o7bxs62B1NBO4ViEu6hv-_xtGG7DSQlBFEXw=

Я получаю 403.Я не нашел журналов lambda@edge ни в одном регионе.

В чем может быть проблема? Как мне его найти?

Функция Lambda@Edge имеет следующие принципы:

    «Версия»: «2012-10-17»,
    "Заявление": [
        {
            "Сид": "",
            «Эффект»: «Разрешить»,
            "Главный": {
                "Оказание услуг": [
                    "edgelambda.amazonaws.com",
                    "lambda.amazonaws.com"
                ]
            },
            «Действие»: «sts:AssumeRole»
        }
    ]
}

Рейтинг:0
флаг cn

На самом деле вы можете сделать это с помощью CloudFront Functions. Бессовестная самореклама, но я столкнулся именно с этим вопросом и написал об этом на мой блог.

Эффективно:

я нашел этот ТАК пост, который показал мне, что мне нужно создать эту функцию:

обработчик функции (событие) {
    вар запрос = событие.запрос;
    var uri = запрос.uri;
    
    // Проверяем, отсутствует ли в URI имя файла.
    если (uri.endsWith('/')) {
        request.uri += 'index.html';
    } 
    // Проверяем, не отсутствует ли в URI расширение файла.
    иначе если (!uri.includes('.')) {
        request.uri += '/index.html';
    }

    запрос на возврат;
}

Использовать Функции в меню слева в сервисе CloudFront, чтобы сохранить и опубликовать эту функцию, затем отредактируйте поведение вашего дистрибутива по умолчанию и измените ассоциацию функции запроса средства просмотра на новую функцию.

Sudheer Satyanarayana avatar
флаг in
Спасибо, @shearn89. На самом деле, моя проблема заключалась в неправильном порядке поведения кеша. Но я упростил настройку благодаря функциям CloudFront. Я отказался от Lambda@Edge в пользу более простого решения.
флаг cn
Не стесняйтесь поделиться своим решением и принять его за голосование!

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.