ответ ручки java aws лямбда-функция nodejs - PullRequest
0 голосов
/ 04 мая 2020

Я создал java функцию для aws лямбда

public class AWSHandler implements RequestHandler<Map<String,String>, String>{

    Gson gson = new GsonBuilder().setPrettyPrinting().create();

    @Override
    public String handleRequest(Map<String,String> event, Context context)
    {

        String input = event.get("input");
        if(input == null) throw new RuntimeException("Payload should have an input");

        // handle video and upload to s3

        Map<String, String> result = new HashMap<>();
        result.put("bucket", "myS3Bucket");
        result.put("key", "myS3Key");

        return gson.toJson(result);
    }
}

Затем я запускаю свой код с nodejs

const AWS = require('aws-sdk');
const fs = require('fs');

const video = fs.readFileSync('test.mp4');

const payload = {
    input: video.toString('base64')
};

var lambda = new AWS.Lambda({region: 'eu-central-1'});
var params = {
  FunctionName: 'my-function',
  Payload: JSON.stringify(payload)
};
lambda.invoke(params).promise()
.then(result => {
    console.log(result);
})
.catch(err => {
    console.log('catch');
    console.error(err)
})

Если я запускаю свой код с нет input У меня будет успех

{ StatusCode: 200,
  FunctionError: 'Unhandled',
  ExecutedVersion: '$LATEST',
  Payload:
   '{"errorMessage":"Payload should have an input","errorType":"java.lang.RuntimeException","stackTrace":["AWSHandler.handleRequest(AWSHandler.java:35)","sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)","sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)","sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)","java.lang.reflect.Method.invoke(Method.java:498)"]}' }

Я не понимаю, почему, когда мой код java выдает ошибку, ответ на запрос вызова успешен, ввод, а затем перехват

Если я запускаю его со входом

{ StatusCode: 200,
  ExecutedVersion: '$LATEST',
  Payload:
   '"{\\n  \\"bucket\\": \\"myBucket\\",\\n  \\"key\\": \\"myKey\\"\\n}"' }

Полезная нагрузка кодируется дважды.

Так почему вызов не отклоняется в случае исключения или, по крайней мере, не возвращает StatusCode 200 и почему мой json кодируется дважды

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...