не удается добавить поля в dynamodb друга с помощью lambda

#aws-lambda #amazon-dynamodb #amazon-iam

#aws-лямбда #amazon-dynamodb #amazon-iam #aws-lambda

Вопрос:

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

 "errorType": "Runtime.UserCodeSyntaxError",
"errorMessage": "SyntaxError: Cannot use import statement outside a module",
"trace": 
"Runtime.UserCodeSyntaxError: SyntaxError: Cannot use import statement outside a module",

"    at _loadUserApp (/var/runtime/UserFunction.js:98:13)",
"    at Object.module.exports.load (/var/runtime/UserFunction.js:140:17)",
"    at Object.<anonymous> (/var/runtime/index.js:43:30)",
"    at Module._compile (internal/modules/cjs/loader.js:1138:30)",
"    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1158:10)",
"    at Module.load (internal/modules/cjs/loader.js:986:32)",
"    at Function.Module._load (internal/modules/cjs/loader.js:879:14)",
"    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12)",
"    at internal/main/run_main_module.js:17:47"
  

Моя лямбда-функция:

 import * as AWS from 'aws-sdk';

AWS.config.update({
   accessKeyId: 'key',
   secretAccessKey: 'key',
   region: 'us-east-1'
});

const documentClient: AWS.DynamoDB.DocumentClient = new AWS.DynamoDB.DocumentClient();

interface IEvent {
    email: string;
    firstName: string;
    lastName: string;
}

exports.handler = async (event: IEvent): Promise<void> => {
    if (!event.email) {
        throw new Error('Candidate email is required.');
    }
    if (!event.firstName) {
        throw new Error('Candidate first name is required.');
    }
    if (!event.lastName) {
        throw new Error('Candidate last name is required.');
    }

    await documentClient.put({
        TableName: 'honeypot-interview-contacts',
        Item: event
    }).promise();
};
  

Ответ №1:

На самом деле у вас прямо здесь ошибка: SyntaxError: Cannot use import statement outside a module . Попробуйте переключиться на require ? И похоже, что вы используете TypeScript? Я не думаю, что среда выполнения узла по умолчанию имеет встроенную поддержку TS, возможно, вы захотите сначала запустить код через компилятор TS, который также должен обработать ошибку импорта.

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

1. Да, код работает на TypeScript. Я изменил на const AWS = require(‘aws-sdk’); Однако у меня все еще есть [IEvent интерфейса]. Я получаю новое сообщение об ошибке: «ErrorMessage»: «SyntaxError: Неожиданный идентификатор»

2. Да, среда выполнения узла на Lambda не может запускать Typescript напрямую… вам нужно будет либо сначала скомпилировать его, либо использовать только обычный Javascript.