#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.