Я пытаюсь отправить данные, введенные в различные поля формы HTML на веб-странице в виде строки JSON, в AWS Lambda, чтобы Lambda могла ввести их в таблицу DynamoDB. Так как это для проекта класса, я решил отказаться от использования API шлюза, я просто хочу вызвать функцию Lambda из javascript веб-страницы и передать JSON в качестве параметра функции Lambda. У меня есть веб-страница, успешно вызывающая функцию Lambda, которую я жестко запрограммировал для ввода предварительно определенной записи в таблицу «Динамо». У меня также есть web js, создающий строку JSON из формы. Моя цель - отправить строку JSON в качестве параметра функции Lambda при ее вызове, но я не уверен, как мне это сделать, поскольку я впервые работаю с AWS. Я знаю, что должен что-то сделать с параметром полезной нагрузки, но не могу найти четкого примера того, что именно. Я убедился, что у меня есть правильные учетные данные и импорт SDK в HTML. Ниже мой код:
Веб-страница JS:
var lambda = new AWS.Lambda();
function makeJSON(){
var userID = "";
var name = document.forms["characterForm"]["characterName"].value;
//alert(name);
//alert(typeof name);
var race = document.forms["characterForm"]["race"].value;
var playerClass = document.forms["characterForm"]["class"].value;
var strength = document.forms["characterForm"]["strength"].value;
var dexterity = document.forms["characterForm"]["dexterity"].value;
var constitution = document.forms["characterForm"]["constitution"].value;
var intelligence = document.forms["characterForm"]["intelligence"].value;
var wisdom = document.forms["characterForm"]["wisdom"].value;
var charisma = document.forms["characterForm"]["charisma"].value;
//alert(name + race + playerClass + strength, dexterity, constitution, intelligence, wisdom, charisma);
characterSheetObj = {userID: userID, name: name, race: race, class: playerClass, strength: strength, dexterity: dexterity, constitution: constitution, intelligence: intelligence, wisdom: wisdom, charisma: charisma}
characterSheetJSON = JSON.stringify(characterSheetObj);
var myParams = {
FunctionName : 'addCharacterSheet',
InvocationType : 'RequestResponse',
LogType : 'None',
//Payload : {"userID": userID, "name": name, "race": race, "class": playerClass, "strength": strength, "dexterity": dexterity, "constitution": constitution, "intelligence": intelligence, "wisdom": wisdom, "charisma" : charisma}
}
lambda.invoke(myParams, function(err, data){
//if it errors, prompts an error message
if (err) {
alert("Error");
prompt(err);
}
//otherwise puts up a message that it didnt error. the lambda function presently doesnt do anything
//in the future the lambda function should produce a json file for the JavaScript here to do something with
else {
alert("Invoked Lambda function without erroring!");
}
});
}
Узел Лямбда-функция:
const AWS = require('aws-sdk');
const db = new AWS.DynamoDB.DocumentClient({region: 'us-east-1'});
exports.handler = async (event) => {
// exports.handler = function(e, ctx, callback) {
let scanningParameters = {
TableName : 'characterTable',
Limit:100
};
db.scan(scanningParameters, function(err, data){
if(err){
callback(err,null);
}else{
callback(null,data);
}
});
const params = {
TableName : 'characterTable',
Item: {
name : 'Alan'
}
};
const userID = '12345';
params.Item.userID = userID;
return await db.put(params).promise();
};
//}
Я думаю, что это связано с events.body в Узле. JS код, но, опять же, я не очень ясен по этому поводу, и я не могу много узнать из документации Amazon. Буду очень признателен за любые предложения, советы или ресурсы!