AWS Lambda @ Edge не входит - PullRequest
1 голос
/ 11 июля 2019

У меня есть функции лямбда-просмотра и исходный-ответ, развернутые в дистрибутиве CloudFront, которые запускаются, но не регистрируются в CloudWatch. Я потратил значительное количество времени на изучение этой темы и пробежался по всем советам из других постов, включая:

  • Проверка журналов во всех регионах, так как я знаю, что они будут создавать журналы CloudWatch в регионе, в котором работает функция labmda @ edge. Ни в одном из них нет логов.
  • Я проверил, существует ли роль AWSServiceRoleForCloudFrontLogger.

Интересно, что когда я целенаправленно кодирую ошибку в одной из функций Lambda, я получаю журналы, созданные в группе с именем /aws/cloudfront/LambdaEdge/<cloudfront distribution id>, содержащие журналы ошибок, однако здесь нет выходных данных из операторов console.log.

Я не могу понять, как включить ведение журнала ВСЕХ запросов, как успешных, так и неудачных, в CloudWatch, содержащий мои операторы отладки с помощью console.log ().

AWSServiceRoleForCloudFrontLogger содержит одну политику AWSCloudFrontLogger:

    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "arn:aws:logs:*:*:/aws/cloudfront/*"
        }
    ]
}

1 Ответ

1 голос
/ 12 июля 2019

Скорее всего, проблема в том, что у Lambda нет прав на вывод журналов в CloudWatch.

Можете ли вы дважды проверить разрешения роли для выполнения функции Lambda?

Ссылки по теме: Не удается получить функцию AWS Lambda для регистрации (вывода текста) в CloudWatch

Объяснение

Итак, здесь есть два вида журналов, поэтому вы должны предоставить разрешения CloudWatch в двух разных местах.

  1. Журналы, которые вывставьте в свою функцию Lambda (используя console.log), поскольку эти журналы должны публиковаться функцией в CloudWatch, роль выполнения функции должна иметь разрешение для CloudWatch.Это верно независимо от того, кто запускает лямбда-функцию.
  2. Теперь идет L @ E, иногда вы можете изменить запрос / ответ таким образом, что недопустимо в соответствии с CloudFront .В этих сценариях только ClodFront обладает информацией, которую вы испортили (ваша функция Lambda этого не знает), и публикует эти знания в виде журналов в CloudWatch.Теперь, поскольку это другой объект, ему нужны собственные права доступа для отправки журналов в CloudWatch (который вы предоставили через AWSServiceRoleForCloudFrontLogger).
...