AWS Lambda: «Не удается прочитать свойство ‘0’ неопределенного»

#node.js #amazon-web-services #aws-lambda #amazon-dynamodb

#node.js #amazon-веб-сервисы #aws-lambda #amazon-dynamodb

Вопрос:

Вот моя функция AWS Lambda. Однако при его запуске я получаю Cannot read property '0' of undefined .

 const AWS = require('aws-sdk');
const SES = new AWS.SES();

const FROM_EMAIL_ADDRESS = process.env.FROM_EMAIL_ADDRESS;
const TO_EMAIL_ADDRESS = process.env.TO_EMAIL_ADDRESS;

function sendEmailToMe(formData) {

    const emailParams = {
        Source: FROM_EMAIL_ADDRESS, 
        ReplyToAddresses: ['keshijemi478@gmail.com'],
        Destination: {
          ToAddresses: [TO_EMAIL_ADDRESS], 
        },
        Message: {
          Body: {
            Text: {
              Charset: 'UTF-8',
              Data: `Thanks for subscribe: ${formData.message}nn Name: ${formData.name}n Email: ${formData.email}n I will reply as soon as possible`,
            },
          },
          Subject: {
            Charset: 'UTF-8',
            Data: 'New message from your_site.com',
          },
        },
    };

    console.log(emailParams);

    const promise =  SES.sendEmail(emailParams).promise();
    console.log(promise);
    return promise;
}


exports.handler = async(event) => {
    console.log('SendEmail called');

  
   const dynamodb = event.Records[0].dynamodb;
    console.log(dynamodb);

    const formData = {
        name : dynamodb.NewImage.name.S,
        message : dynamodb.NewImage.message.S,
        email : dynamodb.NewImage.email.S
    };
    console.log(formData);

    return sendEmailToMe(formData).then(data => {
        console.log(data);
    }).catch(error => {
        console.log(error);
    });
};
  

Комментарии:

1. Вы запустили событие вручную, не так ли?

2. Да, ммм, я сделал

3. Из-за этого ваш event файл еще не содержит ни Records одного, что event.Records[0] приведет к undefined . Вы должны попробовать заглушить полезную нагрузку события, которая содержится Records при запуске события.

4. Я не понял………….

5. Как я могу это решить

Ответ №1:

Похоже, что ваш код представляет собой функцию AWS Lambda.

При вызове лямбда-функции информация передается функции через event параметр. Информация, передаваемая через event , варьируется в зависимости от того, как была запущена функция. Например, если функция запускается событием Amazon S3, то S3 предоставляет информацию в event параметре, который описывает объект, вызвавший запуск события.

Однако, если вы запускаете это событие «вручную», то Amazon S3 не задействован, и event параметр содержит только ту информацию, которую вы предоставили при вызове функции.

Если вы тестируете функцию в консоли управления AWS Lambda, вы можете указать event параметр «Настроить тест». Событие, предусмотренное в этой конфигурации, затем будет передано тестируемой функции.

Комментарии:

1. Я предоставил событие с помощью теста Configure . Но появилась другая ошибка… Не удается прочитать свойство ‘S’ неопределенного

2. docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/…