Как импортировать DynamoDB в функцию Lambda? - PullRequest
0 голосов
/ 17 апреля 2020

В настоящее время я пытаюсь протестировать AWS лямбда-функцию, где я пытаюсь импортировать DynamoDB. Однако, когда я пытаюсь проверить это, я получаю эту ошибку

{
  "errorType": "Runtime.ImportModuleError",
  "errorMessage": "Error: Cannot find module 'dynamodb'\nRequire stack:\n- /var/task/index.js\n- /var/runtime/UserFunction.js\n- /var/runtime/index.js",
  "trace": [
    "Runtime.ImportModuleError: Error: Cannot find module 'dynamodb'",
    "Require stack:",
    "- /var/task/index.js",
    "- /var/runtime/UserFunction.js",
    "- /var/runtime/index.js",
    "    at _loadUserApp (/var/runtime/UserFunction.js:100: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:1158:30)",
    "    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1178:10)",
    "    at Module.load (internal/modules/cjs/loader.js:1002:32)",
    "    at Function.Module._load (internal/modules/cjs/loader.js:901:14)",
    "    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:74:12)",
    "    at internal/main/run_main_module.js:18:47"
  ]
}

Это всего лишь мой второй опыт работы с лямбда-функциями, и я все еще много о них узнаю. Вот мой код от лямбда веселья c

var doc = require('dynamodb-doc');
    exports.handler = function(event, context, callback) {

        if (event.eventType !=='syncTrigger'){

            callback(JSON.stringify(event));
        }
        if (!(('name' in event.datasetRecords) && ('email' in event.datasetRecords))){
            callback(JSON.stringify(event));
        }
        var name = event.datasetRecords.name.newValue;
        var email = event.datasetRecords.email.newValue;

        var shouldDeleteRecord = (event.datasetRecords.name.op === 'remove') || (event.datasetRecords.email.op === 'remove');

        if (shouldDeleteRecord === true) {
            // do not delete from dynamo DB
            callback(null, event);
        }
        var db = new doc.DynamoDB();

        var params = {'TableName' : 'User', 'Item': {'id' : event.identityId, 'username' : name, 'email_address': email}};

        db.putItem(params,function(err, data) {
            if (err) {
                console.log('User insert failure', err);
                callback(err);
            } else {
                console.log('User insert success', data);
                callback(null, event);
            }
        });
    }

Ответы [ 2 ]

1 голос
/ 17 апреля 2020

Проблема заключается в том, что вы импортируете сторонний пакет DynamoDB с именем dynamodb-do c. Этот пакет, как и другие сторонние пакеты, по умолчанию недоступен в среде выполнения Lambda.

Вы можете продолжать использовать этот пакет, связывая его со своей загрузкой .

Или вы можете переключиться на поддерживаемый и предварительно установленный AWS Клиент документов .

1 голос
/ 17 апреля 2020

Я думаю, вам может понадобиться импортировать правильный модуль:

// Load the AWS SDK for Node.js
var AWS = require('aws-sdk');
// Set the region 
AWS.config.update({region: 'REGION'});

// Create the DynamoDB service object
var db = new AWS.DynamoDB({apiVersion: '2012-08-10'});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...