【问题标题】:How to add and execute my own lambda function within the serverless-framework?如何在无服务器框架中添加和执行我自己的 lambda 函数?
【发布时间】:2021-01-09 14:03:26
【问题描述】:

如何在不手动进入 AWS 控制台的情况下添加自己的 lambda,最重要的是,如何从我的 React 应用程序中调用它?

目前,如果我想执行自己的 lambda 函数,我会转到 AWS 控制台并在那里手动创建它。显然,有一种方法可以在 VS Code 中本地执行此操作,因为 serverless-framework 已经使用 fullstack-app 部署创建了它的功能。

这是我当前使用控制台在 AWS 中创建的 Lambda 函数(使用 Amazon SES 从联系表发送电子邮件)。

var aws = require('aws-sdk');
var ses = new aws.SES({region: 'us-east-1'});
exports.handler = (event, context, callback) => {
    
     var params = {
        Destination: {
            ToAddresses: [`${event.toEmail}`]
        },
        Message: {
            Body: {Html: { Data: `${event.body}`}
            },
            Subject: { Data: `${event.subject}`}
        },
        Source: `${event.fromEmail}`
    };

     ses.sendEmail(params, function (err, data) {
        callback(null, {err: err, data: data});
        if (err) {
            console.log(err);
            context.fail(err);
        } else {
            console.log(data);
            context.succeed(event);
        }
    });
};

我在 AWS 中为它创建了一个 REST API,并使用 axios 从我的 React 应用程序中调用它:

  axios.post(`https://xxxxxxxx.execute-api.us-east-1.amazonaws.com/default/contactFormSend`, email)
  .then(res => {console.log(res)})

我的目标是不在 AWS 控制台中手动创建 lambda 函数,而是使用无服务器框架架构在本地编写它并找到调用它的方法。

我到处寻找,但在学习无服务器框架架构的过程中,我觉得我错过了一些非常重要的东西。

【问题讨论】:

    标签: javascript reactjs aws-lambda serverless-framework aws-serverless


    【解决方案1】:

    如何在不手动进入 AWS 控制台的情况下添加自己的 lambda 以及, 最重要的是?

    我希望你的函数配置中有 serverless.yml 文件。这是一个带有可能配置的模板https://www.serverless.com/framework/docs/providers/aws/guide/serverless.yml/

    如果一切都设置好了,部署非常简单,只需使用serverless deploy

    https://www.serverless.com/framework/docs/providers/aws/guide/deploying/

    这是一个非常简单的无服务器示例 - https://github.com/serverless/examples/tree/master/aws-node-rest-api

    如何从我的 React 应用中调用它?

    您需要一个公开的公共端点,要么直接采用由API Gateway 生成的端点,要么创建自定义域并将其映射到现有域。

    【讨论】:

    • 感谢您提供所有链接,但我仍然不明白如何在使用无服务器框架将自定义 Lambda 上传到 AWS 后从我的 React 应用程序中调用它。我可以弄清楚如何调用我在 AWS 控制台中自己创建的单独 Lambda 函数(根据我的示例),但不知道如何仅调用由无服务器框架上传的函数的一部分。我错过了什么?我对 serverless 如何准确调用 lambda 函数的理解肯定存在差距。
    • 如果您计划通过 API Gateway 调用 AWS Lambda,您只需要一个简单的 http 调用。确保您的设置是否正确,打开 API Gateway 并在通过反应后首先尝试调用。注意:可以为您的案例启用额外的 CORS。
    • 非常感谢您的解释,但是否有代码示例说明如何从 React 等应用程序中准确调用无服务器创建的函数?我是一名前端开发人员,目前只涉足后端工作。一个关于如何从 React 调用无服务器函数的简单示例将非常有帮助。
    • 您可以像在示例代码中显示的那样调用它 - 使用 fetchaxios 或您选择的其他库。您应该在serverless.yml 文件中的函数中描述http event,该文件创建一个API 端点,您可以从前端调用它 - 像这样 - github.com/serverless/examples/blob/master/aws-node-rest-api/…。然后使用示例在这里 - github.com/serverless/examples/tree/master/aws-node-rest-api 除非您使用 fetch or axios 而不是 curl
    猜你喜欢
    • 2023-03-16
    • 2021-03-10
    • 1970-01-01
    • 2019-01-28
    • 2019-11-24
    • 2022-09-02
    • 2019-07-23
    • 2017-12-02
    • 2020-03-07
    相关资源
    最近更新 更多