无法使用AWS无服务器离线从另一个Lambda调用Lambda

我想从serverless-offline内部的另一个lambda调用一个lambda。我想制作一个无服务器的离线Web应用程序。但是我遇到了这个错误:

  

{UnknownError:不支持的媒体类型       在Object.extractError(C:\ Users \ gourabkonar \ Desktop \ sls-demo \ node_modules \ aws-sdk \ lib \ protocol \ json.js:51:27)       在Request.extractError(C:\ Users \ gourabkonar \ Desktop \ sls-demo \ node_modules \ aws-sdk \ lib \ protocol \ rest_json.js:55:8)       在Request.callListeners(C:\ Users \ gourabkonar \ Desktop \ sls-demo \ node_modules \ aws-sdk \ lib \ sequential_executor.js:106:20)       在Request.emit(C:\ Users \ gourabkonar \ Desktop \ sls-demo \ node_modules \ aws-sdk \ lib \ sequential_executor.js:78:10)       在Request.emit(C:\ Users \ gourabkonar \ Desktop \ sls-demo \ node_modules \ aws-sdk \ lib \ request.js:683:14)       在Request.transition(C:\ Users \ gourabkonar \ Desktop \ sls-demo \ node_modules \ aws-sdk \ lib \ request.js:22:10)       在acceptorStateMachine.runTo(C:\ Users \ gourabkonar \ Desktop \ sls-demo \ node_modules \ aws-sdk \ lib \ state_machine.js:14:12)       在C:\ Users \ gourabkonar \ Desktop \ sls-demo \ node_modules \ aws-sdk \ lib \ state_machine.js:26:10       应要求。 (C:\ Users \ gourabkonar \ Desktop \ sls-demo \ node_modules \ aws-sdk \ lib \ request.js:38:9)       应要求。 (C:\ Users \ gourabkonar \ Desktop \ sls-demo \ node_modules \ aws-sdk \ lib \ request.js:685:12)       在Request.callListeners(C:\ Users \ gourabkonar \ Desktop \ sls-demo \ node_modules \ aws-sdk \ lib \ sequential_executor.js:116:18)       在Request.emit(C:\ Users \ gourabkonar \ Desktop \ sls-demo \ node_modules \ aws-sdk \ lib \ sequential_executor.js:78:10)       在Request.emit(C:\ Users \ gourabkonar \ Desktop \ sls-demo \ node_modules \ aws-sdk \ lib \ request.js:683:14)       在Request.transition(C:\ Users \ gourabkonar \ Desktop \ sls-demo \ node_modules \ aws-sdk \ lib \ request.js:22:10)       在acceptorStateMachine.runTo(C:\ Users \ gourabkonar \ Desktop \ sls-demo \ node_modules \ aws-sdk \ lib \ state_machine.js:14:12)       在C:\ Users \ gourabkonar \ Desktop \ sls-demo \ node_modules \ aws-sdk \ lib \ state_machine.js:26:10       应要求。 (C:\ Users \ gourabkonar \ Desktop \ sls-demo \ node_modules \ aws-sdk \ lib \ request.js:38:9)       应要求。 (C:\ Users \ gourabkonar \ Desktop \ sls-demo \ node_modules \ aws-sdk \ lib \ request.js:685:12)       在Request.callListeners(C:\ Users \ gourabkonar \ Desktop \ sls-demo \ node_modules \ aws-sdk \ lib \ sequential_executor.js:116:18)       在callNextListener(C:\ Users \ gourabkonar \ Desktop \ sls-demo \ node_modules \ aws-sdk \ lib \ sequential_executor.js:96:12)       在IncomingMessage.onEnd(C:\ Users \ gourabkonar \ Desktop \ sls-demo \ node_modules \ aws-sdk \ lib \ event_listeners.js:307:13)       在IncomingMessage.emit(events.js:203:15)       在IncomingMessage.EventEmitter.emit(domain.js:448:20)       在endReadableNT(_stream_visible.js:1129:12)       在process._tickCallback(内部/进程/next_tick.js:63:19)     消息:“不支持的媒体类型”,     代码:“ UnknownError”,     时间:2019-11-06T17:02:27.641Z,     requestId:未定义,     statusCode:415,     可重试:错误,     retryDelay:6.643720301281952}


sls-api-dev-create

   const jobs=[
    { id: 1,title: 'NodeJS Developer'},{id: 2,title:'Angular Developer'}
];


var AWS = require('aws-sdk');
AWS.config.region = 'ap-southeast-2';

let lambda = new AWS.Lambda({
    region: 'ap-south-1',endpoint: 'http://localhost:3000/jobs'
})
module.exports.handler=async(evt,ctx)=>{

    console.log(evt.body);
    jobs.push(JSON.parse(evt.body));

    lambda.invoke({
        FunctionName: 'sls-api-dev-hello',invocationType: 'Event',Payload:null    
    },function(err,data){
        console.log('No error');
        if(!err)
        console.log(data);
        else
        console.log(err);

    })
    //console.log(response);
    return {
        statusCode :200,body:JSON.stringify({
            jobs
        })
    }
}

sls-api-dev-hello

'use strict';

module.exports.hello = async event => {
  return {
    statusCode: 200,body: JSON.stringify(
      {
        message: 'Welcome to Serverless',input: event,},null,2
    ),};

  // Use this code if you don't use the http event with the LAMbda-Proxy integration
  // return { message: 'Go Serverless v1.0! Your function executed successfully!',event };
};

serverless.yml

service: sls-api



provider:
  name: aws
  runtime: nodejs10.x
  region: ap-south-1
  iamRoleStatements:
    - Effect: Allow
      action:
        - lambda: InvokeFunction
        - lambda: InvokeAysnc
      Resource: "*"

plugins:
  - serverless-offline
  - serverless-offline-lambda

functions:
  hello:
    handler: handler.hello
  jobs:
    handler: src/jobs/handler.handler
  listJobs:
    handler: src/jobs/list.handler
    events:
      - http:
          method: GET
          path: /jobs
  createJobs:
    handler: src/jobs/create.handler
    environment:
      SOME_VARIABLE: http://localhost:3000/jobs
    events:
      - http:
          method: POST
          path: /jobs
  getJob:
    handler: src/jobs/findOne.handler
    events:
      - http:
          method: GET
          path: /jobs/{id}
          request:
            parameters:
              id: true

请帮助,任何帮助都将非常有用,因为我是无服务器新手。谢谢。

zytzwlj 回答:无法使用AWS无服务器离线从另一个Lambda调用Lambda

您仅需在此处更改的是lambda实例配置中的 endpoint ,以指向基本的 serverless-offline 网址。 另外,您根本不需要使用 serverless-offline-lambda 粘贴。

将Lambda选项更改为以下内容:

const lambda = new AWS.Lambda({
  region: "ap-south-1",endpoint: process.env.IS_OFFLINE ? "http://localhost:3000" : "https://lambda.ap-south-1.amazonaws.com",});

另外,这是什么意思

  

process.env.IS_OFFLINE

? 意味着您正在使用 serverless-offline 插件在本地运行lambda,该插件实际上设置了这个env变量。

本文链接:https://www.f2er.com/3150174.html

大家都在问