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

Я пытаюсь настроить функцию Lambda, которая будет обрабатывать файл при его загрузке в ведро S3. Мне нужен способ увидеть вывод console.log при загрузке файла, но я не могу понять, как связать мою функцию Lambda с CloudWatch.

Я понял, посмотрев объект context, что моя группа журналов /aws/lambda/wavToMp3, а поток журнала - 2016/05/23/[$LATEST]hex_code_redacted. Поэтому я создал эту группу и поток в CloudWatch, но ничто не записывается в нее.

Ответы

Ответ 1

Для того чтобы lambda-функция создавала поток журналов и публиковала журналы в облачном режиме, роль выполнения lambda должна иметь следующие разрешения.

{
    "Statement": [
        {
            "Action": [
                "logs:CreateLogGroup",
                 "logs:CreateLogStream",
                 "logs:PutLogEvents"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:logs:*:*:*"
        }
    ]
} 

Для получения дополнительной информации обратитесь к следующей документации AWS http://docs.aws.amazon.com/lambda/latest/dg/intro-permission-model.html#lambda-intro-execution-role

Ответ 2

После обновления политики вам необходимо обновить параметры своей функции, чтобы обновить все экземпляры заданий, чтобы читать новые политики.

Итак, если вы просто нажмете кнопку "test" на консоли Lambda после обновления политики ролей в IAM, кэшированные экземпляры Lambda будут по-прежнему иметь старые разрешения на роль, поэтому вы не увидите никаких журналов, записываемых в журналы Cloudwatch.

Просто измените время ожидания на секунду и нажмите кнопку "сохранить и протестировать", и вы начнете просматривать журналы в Cloudwatch.

Ответ 3

Для того чтобы лямбда-функция создавала поток журналов и публиковала журналы в облачном режиме, роль выполнения лямбда должна иметь следующие разрешения

У меня уже были эти разрешения, но это не сработало.

Просто измените время ожидания на секунду и нажмите кнопку "сохранить и протестировать", и вы начнете просматривать журналы в Cloudwatch.

Я изменил тайм-аут, сохранил и журналы все еще не работали.

Я назначил другую роль, и журналы все еще не работали.

В итоге для меня работала кнопка "Создать пользовательскую роль", затем "Разрешить". Это было так, и журналы начали создаваться, но поскольку я не хотел использовать новую роль, но мою существующую роль, я просто назначил свою существующую роль впоследствии, и она сработала. Поэтому технически я должен был вернуться к первоначальной конфигурации, которая не сработала, но теперь она работает. Наведите указатель мыши.

Ответ 4

По-видимому, еще одна необходимость регистрации - это функция Лямбды, которая должна указывать на завершение; например, в контексте Python, обработчик должен возвращать что-то другое, кроме None.

Ответ 5

Убедитесь, что у вас есть полный путь к вашей "Существующей роли" в вашей лямбда-функции "Конфигурация":

Роль: выберите существующую роль Существующая роль: service-role/yourRoleName

По какой-то причине ввод только вашегоRoleName будет работать для некоторых служб (например, SES), но не для CloudWatch.

Кроме того, вы можете попробовать создать новую роль вместо существующей. Это создаст роль с надлежащей конфигурацией (надеюсь).

Ответ 6

В этом вопросе я пытался создать группу журналов в Cloudformation script с помощью: AWS:: Журналы:: LogGroup а затем попытаться нажать Лямбда-журнал в эту группу журналов.: P Новичок После тщательного чтения я обнаружил, что Lambda создает свой собственный журнал с вышеупомянутым форматом:  /AWS/ лямбда/ Нам просто нужно предоставить разрешение политики этой группе журналов или просто общее разрешение с ресурсом как: ARN: AWS: журналы: *

надеюсь, что это поможет

Ответ 7

Может быть, немного поздно, но для тех, кто все еще борется с тем, чтобы видеть лямбда-журналы в облачном свете. Я заметил это относительно роли выполнения лямбда-функции: "Вы можете использовать существующую роль с этой функцией. Обратите внимание, что роль должна быть допущена Lambda и должна иметь разрешения журнала Cloudwatch". Поэтому в IAM я предоставил "CloudWatchLogsFullAccess" роль, назначенную моей функции. то в cloudwatch, в журналах, вы увидите журналы для функций, назначенных этой роли.

Ответ 8

В других ответах говорится, что вам нужно предоставить разрешение лямбда для регистрации журналов в журналах облачных наблюдений. Для этого AWS предоставила AWSLambdaExecute политику. Это json -

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:*"
            ],
            "Resource": "arn:aws:logs:*:*:*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::*"
        }
    ]
}

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

ПРИМЕЧАНИЕ. Он также имеет доступ к чтению/записи S3. Если вы этого не хотите, вы можете создать настраиваемую политику только с частью журнала.

Ответ 9

Возможно, он уже регистрировался, мы просто не могли найти журналы, которые мы ожидаем...

например

app.use(function simpleLogger (req, res, next) {
  console.info('[Logger]', req.method, req.originalUrl)
  next()
})

После выполнения GET/hello?world=1,

Локальная консоль: (простая и понятная, приятная!)

[Logger] GET /hello?world=1

Журналы CloudWatch: (можете ли вы легко найти точный журнал ниже?)

START RequestId: a3552c34-f7a6-11e8-90ba-2fb886f31fb0 Version: $LATEST
2018-12-04T09:26:11.236Z  a3552c34-f7a6-11e8-90ba-2fb886f31fb0  [Logger] GET /hello?world=1
END RequestId: a3552c34-f7a6-11e8-90ba-2fb886f31fb0
REPORT RequestId: a3552c34-f7a6-11e8-90ba-2fb886f31fb0  Duration: 41.02 ms  Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 29 MB

Вывод: слишком подробный поиск исходных журналов.

Ответ 10

Я столкнулся с этой проблемой, но ни один из ответов выше не решил мою проблему. Оказывается, регион был каким-то образом настроен на Огайо, когда я впервые запустил CloudWatch. После того, как я изменил это на Восток США (Северная Вирджиния), все работает отлично.

Ответ 11

CloudWatch и CloudWatch Logs имеют разные разрешения. Вам необходимо добавить CloudWatch Logs в политику, CloudWatch Logs с вашей ролью.