AWS :: Lambda без локального сервера вызывает локальную функцию, не отражающую мой новый wcode - PullRequest
0 голосов
/ 02 октября 2018

Не уверен, что происходит с моим кодом.Он никогда не выполняет мой обновленный код на моем локальном компьютере.Если я обновляю свой код и запускаю sls, вызываю local, он все равно запускает старый код.Кроме того, он не отправляет SES EMail.

По какой-то причине он всегда выполняет код, который уже был развернут на платформе AWS, а не выполняет мой локальный код.Это смущает.

Ниже приведен мой serverless.yml:

    service: lambda-test  

provider:
  name: aws
  runtime: nodejs8.10
  stage: dev
  region: ap-southeast-1
  iamRoleStatements:
    - Effect: Allow
      Action:
        - lambda:InvokeFunction
        - lambda:InvokeAsync
      Resource: "*"

functions:
  hello:
    handler: handler.hello
    environment:
    events:
      - http:
          path: /
          method: get

  trulyYours:
    handler: handler.trulyYours
    environment:
    events:
      - http:
          path: /trulyYours
          method: get

  sendRegistrationEmail:
    handler: handler.sendRegistrationEmail
    environment:
    events:
      - http:
          path: /sendRegistrationEmail
          method: get
plugins:
  - serverless-offline

Я не уверен, стоит ли мне продолжать редактировать код в самой веб-консоли AWS или попытаться настроить локальную среду разработки.Связываю с последних двух дней, но бесполезно тратить время.

    'use strict';
    var aws = require("aws-sdk");
    var nodeMailer = require("nodemailer");

    //aws.config.loadFromPath('aws_config.json');

    var ses = new aws.SES();
    var s3 = new aws.S3();


    module.exports.hello = async (event, context) => {
        console.log("executing lambda function 'hello' XX...");
        // return {
        //   statusCode: 200,
        //   body: JSON.stringify({
        //     message: 'v1.0',
        //   }),
        // };
        // 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 };
    };

    //
    exports.trulyYours = async (event, context, callback) => {
        console.log('Lambda trulyYours Received event:', JSON.stringify(event, null, 2));
        //context.succeed('Hello from' + event.name);
        return {
            statusCode: 200,
            body: JSON.stringify({
                message: 'hello from trulyYours' + event.name,
            }),
        };
    }

    /*function trulyYours (foo, bar) {
        // MyLambdaFunction logic here
    }*/
    module.exports.sendRegistrationEmail = (event, context) => {
        console.log("Executing sendRegistrationEmail...");

        var lambda = new aws.Lambda({
            region: 'ap-southeast-1' //change to your region
        });

        var params = {
            FunctionName: 'lambda-test-dev-trulyYours', // the lambda function we are going to invoke
            InvocationType: 'RequestResponse',
            LogType: 'Tail',
            Payload: '{ "name" : "Alexa" }'
        };
        lambda.invoke(params, function (err, data) {
            if (err) {
                context.fail(err);
            } else if (data.Payload) {
                context.succeed('Lambda trulyYours  ' + data.Payload);
            }
        });

        //
        // return {
        //   statusCode: 200,
        //   body: JSON.stringify({
        //     message: 'sent email successfully',
        //   }),
        // };

        // 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 };
    };                                                                                                    

1 Ответ

0 голосов
/ 18 января 2019

Попробуйте создать serverless-local.yml, например:

config:
 region: eu-west-1

environment:
 VAR: local

database:
 hostname: localhost
 port: 8000
 username: root
 password: toor
 database: db
 url: http://localhost:3000

и в вашем serverless.yml в провайдере добавьте эту строку:

stage: ${opt:stage, 'dev'}

затем в вашем терминалепопробуйте это Cli:

sls invoke local -f functionName -s local

...