0

J'essaye de tester la fonctionnalité CRUD sur une fonction aws lambda en utilisant le Framework Serverless.Erreur de lancement de la fonction lambda sans serveur lors de la tentative d'insertion de données dans dynamoDB Tableau

est la commande Ici, je suis en cours d'exécution:

sudo serverless invoke local -f createArticle -p articles/event.json 

Lorsque je tente de créer un enregistrement d'une erreur est renvoyée. Voici l'erreur dans la console:

Syntax Error ------------------------------------------- 

Unexpected token u in JSON at position 0 

For debugging logs, run again after setting the "SLS_DEBUG=*" environment variable. 
Get Support -------------------------------------------- 
Docs:   docs.serverless.com 
Bugs:   github.com/serverless/serverless/issues 
Forums:  forum.serverless.com 
Chat:   gitter.im/serverless/serverless 

Your Environment Information ----------------------------- 
OS:     darwin 
Node Version:  6.10.3 
Serverless Version: 1.13.1 

Maintenant j'ai allumé mon javascript et validé mon fichier event.json.

Voici mon javascript:

'use strict'; 
 

 
const AWS = require('aws-sdk'); 
 
const dynamo = new AWS.DynamoDB.DocumentClient(); 
 
const uuid = require('uuid'); 
 

 
module.exports.handler = (event, context, callback) => { 
 
    const data = JSON.parse(event.body); 
 
    if (data.text && typeof data.text !== 'string') { 
 
    console.log('Validation Failed'); 
 
    callback(new Error('Body did not contain a text property.')); 
 
    return; 
 
    } 
 

 
    const params = { 
 
    TableName: 'BlogTable', 
 
    Item: { 
 
     article_id: "1", 
 
     text: data.text 
 
    } 
 
    }; 
 

 
    const putCallback = (error, result) => { 
 
    if (error) { 
 
     console.log(error); 
 
     callback(new Error('Could not save record.')); 
 
     return; 
 
    } 
 
    //console.log(result); 
 
    const response = { 
 
     statusCode: 200, 
 
     body: JSON.stringify(result.Item) 
 
    }; 
 
    callback(null, response); 
 
    } 
 
    dynamo.put(params, putCallback); 
 
};

Voici mon fichier event.json:

{"text":"Hello World"} 

Pourquoi l'erreur se faire jeter? Et comment puis-je définir cette variable d'environnement que j'ai essayé dans mon fichier serverless.yml mais je n'ai pas eu de sortie.

Répondre

1

Si vous utilisez l'intégration « proxy Lambda », vous devez utiliser un format spécifique pour les événements http que vous appelez directement Fonction Lambda (par exemple, si vous utilisez "invocation sans serveur" et non AWS API Gateway Management Console, où vous pouvez appeler la fonction Lambda via votre API à l'aide du bouton "Test")

Avec le proxy Lambda, dans cet exemple, vous besoin de créer un fichier json avec une propriété "body" et d'en stringifier la valeur, comme ceci:

{ 
    "body": "{\"text\":\"hello\"}" 
} 

La raison en est: « Avec l'intégration proxy Lambda, passerelle API mappe toute la demande du client au paramètre d'événement d'entrée de la fonction Lambda back-end » http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-set-up-simple-proxy.html#api-gateway-simple-proxy-for-lambda-input-format

+0

Pourquoi les 'body' doivent avoir une propriété 'text'? Y a-t-il un moyen de contourner cela? –

0

Dans mes fichiers event.json je devais mettre mon JSON comme ceci:

{"body": "{\"text\": \"Hello World\"}"