AWS CloudFront возвращает значение 503 для регионов, отличных от us-east-1

Я пытаюсь настроить распределение облачного интерфейса с помощью функции лямбда @ Edge, связанной с событием запроса источника. Край лямбда возвращает очень простую html-страницу (код основан на этом примере: Обслуживание статического содержимого (сгенерированный ответ)). После развертывания дистрибутив работает должным образом в местах, близких к региону Северная Вирджиния, но не работает в других местах, возвращая следующую ошибку:

503: функция лямбда, связанная с распределением CloudFront, была ограничена. В настоящее время мы не можем подключиться к серверу этого приложения или веб-сайта. Возможно, слишком большой трафик или ошибка конфигурации. Повторите попытку позже или обратитесь к владельцу приложения или веб-сайта. Если вы предоставляете контент клиентам через CloudFront, вы можете найти шаги по устранению неполадок и помочь предотвратить эту ошибку, просмотрев документацию CloudFront.

Я уже пробовал просматривать журналы, но в cloudwatch ничего не регистрируется, когда выдается ошибка 503, а журналы из распределения CF показывают ошибку lambdalimitExceeded.

Я прыгал между разными местами с помощью VPN, и мне кажется странным, что он работает только для мест, близких к региону us-east-1. Я создаю все ресурсы, используя федеративную учетную запись, я не знаю, может ли это быть связано с разрешениями IAM.

Также следует отметить, что все работает, как ожидалось, если я воспроизведу тот же сценарий, используя другую учетную запись aws и обычного пользователя.


person Oscar    schedule 07.07.2020    source источник


Ответы (1)


Если вы видите lambdalimitExceeded, вам необходимо проверить следующее для своей функции Lambda @ Edge:

  • Количество выполнений функций превысило одну из квот (ранее известных как пределы), которые Lambda устанавливает для ограничения выполнения в регионе AWS (одновременное выполнение или частота вызовов).
  • Функция превысила квоту тайм-аута лямбда-функции.

Помните, что Lambda @ Edge выполняется ближе к пользователю, если вы попытаетесь получить внешние ресурсы (в регион), тогда у вас может быть тайм-аут из-за географической задержки, можете ли вы увеличить время ожидания, чтобы учесть это?

Есть ли у вас другие лямбды в регионах, где они работают? Если вы просмотрите журналы CloudWatch для одного из регионов, расположенных ближе к периферийному расположению пользователей, вы увидите эти журналы Lambda и, надеюсь, сможете определить основную причину. Если нет, добавьте дополнительную отладку.

person Chris Williams    schedule 07.07.2020
comment
Спасибо за ваш ответ. Функция пока возвращает только статический текст, чтобы убедиться, что он не связан с тайм-аутами или другими ошибками. Когда страница отображается должным образом, журналы показывают, что для завершения потребовалось менее 150 мс и около 60 МБ, поэтому я не думаю, что это причина. Я также искал журналы в других регионах, но не смог их найти. Я беру в качестве ссылки код, который возвращается в заголовке x-amz-cf-pop, чтобы узнать, какое краевое расположение пыталось обслуживать контент. - person Oscar; 07.07.2020
comment
Можете ли вы увидеть какие-либо показатели в регионах, в которых возникают эти проблемы? - person Chris Williams; 07.07.2020
comment
Я могу видеть журналы в cloudwatch, когда все работает нормально, но я ничего не могу найти (в любом регионе), когда возвращается ошибка 503. Однако я включил журналы в облачном интерфейсе и вижу ошибку в журналах, хранящихся в S3. - person Oscar; 07.07.2020
comment
В интерфейсе CloudFront, если вы получаете доступ к мониторингу, найдите свой Lambda @ Edge и нажмите «Просмотр показателей функции». Предоставляет ли он какие-либо данные для определенных регионов? - person Chris Williams; 07.07.2020
comment
Он предоставляет количество вызовов, но они регистрируются только при успешных вызовах. График ошибок всегда пуст. Кроме того, если я посмотрю на метрики распределения, total5xxErrors показывает некоторые значения, но 5xxErrorsByLambdaEdge остается равным 0. - person Oscar; 07.07.2020
comment
Это действительно странно, у вас был пример лога с lambdalimitExceeded в нем? - person Chris Williams; 07.07.2020
comment
Сейчас у меня их нет, но я постараюсь их собрать. Однако я обнаружил, что проблема возникает с этой конкретной учетной записью. Учетная запись принадлежит организации, я протестировал тот же код в другой учетной записи той же организации, и все работало так, как ожидалось. Может ли это быть связано с политикой на уровне учетной записи? - person Oscar; 07.07.2020
comment
Это возможно, если бы что-то было в SCP. Звучит так, как будто вы уже достигли цели, хотя и очень странно. Извините, я больше ничем не помог в этом сценарии :) - person Chris Williams; 07.07.2020
comment
SCP можно использовать для отключения действий в определенных регионах. Обычно вы ожидаете исключений для глобальных сервисов, таких как cloudfront и cloudwatch, но, возможно, в этом случае их нет. Например, этот scp показывает, как заблокировать регионы, но разрешить облачным службам продолжать работу docs.aws.amazon.com/organizations/latest/userguide/ - person mhbrooks; 08.07.2020
comment
SCP также объяснил бы, почему метрики облачных наблюдений не публикуются. - person mhbrooks; 08.07.2020
comment
Действительно могло :) - person Chris Williams; 08.07.2020
comment
Спасибо за помощь. Я последовал вашим предложениям, и в учетной записи не установлены правила SCP. Я также воссоздал роли AWSServiceRoleForLambdaReplicator и AWSServiceRoleForCloudFrontLogger, но это не сработало. Постараюсь обратиться в службу поддержки. Благодарность! - person Oscar; 08.07.2020