Не удается импортировать пакет в AWS lambda с модулем Nodejs14.x ES
У меня есть слой, где путь node_modules
nodejs/node14/node_modules
.
Используя этот слой, я пытаюсь импортировать пакет в функцию Lambda, скажем, «aws-cloudfront-sign», например:
import cfsign from 'aws-cloudfront-sign'
Я получил сообщение об ошибке
Cannot find package 'aws-cloudfront-sign' imported from /var/task/signer.js\nDid you mean to import aws-cloudfront-sign/lib/cloudfrontUtil.js?
Но если я импортирую пакет следующим образом:
import cfsign from '/opt/nodejs/node14/node_modules/aws-cloudfront-sign/lib/cloudfrontUtil.js'
Это удается.
Ты знаешь почему? Как правильно импортировать пакет?
2 ответа
Похоже, это ошибка. Это происходит со слоями и SDK. На Github есть ряд похожих открытых вопросов:
Nodejs Lambda: не удается найти пакет «aws-sdk»
Не удается найти пакет при использовании модуля ES и лямбда-слоя
Импорт ES6 не работает в @aws-sdk/client-iotsitewise
Как вы уже поняли, единственным обходным решением в настоящее время является использование абсолютных путей. Например:
import { DynamoDB } from 'aws-sdk;'
терпит неудачу, тогда как
import AWS from '/var/runtime/node_modules/aws-sdk/lib/aws.js';
const { DynamoDB } = AWS;
заработает.
Я предлагаю вам добавить свой голос к существующему открытому вопросу, чтобы привлечь к нему внимание.
Я столкнулся с аналогичной проблемой. Мне не удалось импортировать Dynomdb в мою лямбда-функцию.
В итоге я сделал что-то вроде этого.
import { DynamoDBClient } from "@aws-sdk/client-dynamodb";
import {
DynamoDBDocumentClient,
PutCommand,
} from "@aws-sdk/lib-dynamodb";
const client = new DynamoDBClient({});
const dynamo = DynamoDBDocumentClient.from(client);
Это создаст новый клиент, который вы сможете использовать для запуска различных команд.
См. документацию здесь: AWS SDK для JavaScript DynamoDB.
Ознакомьтесь с клиентской документацией для DynamoDB, введите описание ссылки здесь.