Не удается импортировать пакет в 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, введите описание ссылки здесь.

Другие вопросы по тегам