【问题标题】:Receive data from website then trigger lambda send email and backup to DynamoDB从网站接收数据然后触发 lambda 发送电子邮件和备份到 DynamoDB
【发布时间】:2021-10-14 08:28:09
【问题描述】:

我是初学者,我在互联网上找到了两条指令来获取数据(联系我们 - 电子邮件、电话等)到 AWS - Lambda 然后发送到我的电子邮件

https://aws.amazon.com/blogs/architecture/create-dynamic-contact-forms-for-s3-static-websites-using-aws-lambda-amazon-api-gateway-and-amazon-ses/

另外一个是创建一个 AWS - Lambda 函数发送到 Dynamo 进行备份。

https://www.vairix.com/tech-blog/get-and-put-data-using-lambda-and-dynamodb-simple-and-clear

我把它们放在一起,但它们没有连接。例如,Lamba 触发将信息从网站发送到我的电子邮件,但其他功能不会收集项目以将其发送到 Dynamo

Lambda 发送电子邮件:

var AWS = require('aws-sdk');
var ses = new AWS.SES();
 
var RECEIVER = 'contactus@example.com';
var SENDER = 'contactus@example.com';

var response = {
 "isBase64Encoded": false,
 "headers": { 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': 'example.com'},
 "statusCode": 200,
 "body": "{\"result\": \"Success.\"}"
 };

exports.handler = function (event, context) {
    console.log('Received event:', event);
    sendEmail(event, function (err, data) {
        context.done(err, null);
    });
};
 
function sendEmail (event, done) {
    var params = {
        Destination: {
            ToAddresses: [
                RECEIVER
            ]
        },
        Message: {
            Body: {
                Text: {
                    Data: 'name: ' + event.name + '\nphone: ' + event.phone + '\nemail: ' + event.email + '\ndesc: ' + event.desc,
                    Charset: 'UTF-8'
                }
            },
            Subject: {
                Data: 'Website Referral Form: ' + event.name,
                Charset: 'UTF-8'
            }
        },
        Source: SENDER
    };
    ses.sendEmail(params, done);
}

Lambda 在 DynamoDB 中存储信息:

"use strict";

AWS.config.update({ region: "us-east-1" });


exports.handler = async() => {

const documentCilent = new AWS.DynamoDB.DocumentClient({region: "us-east-1"});

const params = {
    TableName: "Users",
    
    //  This part, I need the variable connect with the top part. 
    Item:{
      id : "test",     
      name: "name",
      phone: "phone",
      desc: "desc",
      email: "email"
      
      
    }
  
};

try {
    const data = await documentCilent.put(params).promise();
    console.log(data);

} catch (err) {
    console.log(err);
}
};

【问题讨论】:

  • console.log('Received event:', event); 的输出是什么 - 您在 CloudWatch 中看到了什么?
  • 还要让它们连接起来——您需要发送电子邮件,然后一次性存储在 DynamoDB 中;除非您有一个 SNS 主题、一个 SQS 队列等来触发它,否则其他功能不会“收集它”。

标签: javascript node.js amazon-web-services aws-lambda amazon-dynamodb


【解决方案1】:

Lambda 彼此独立,仅在收到事件时才会触发。此事件可以是几件事 - 它可以是从 API 网关发送到 lambda 的事件(这就是将您的 Api 连接到您的 Lambda 所做的事情 - 为 Api 事件提供了一个目标)。它可以是您的 SDK 生成的事件(使用您的语言 SDK 调用另一个 lambda)。它可以来自 DynamoDB 流或 S3 put_object 事件。

AWS 资源中发生的几乎任何事情都会输出某种事件,并且通过正确的命令/设置,您可以让 Lambda 监听该事件。

然而,在这种情况下,由于它们的重量都很轻,将它们组合在一个 lambda 下会更具成本效益。 API 获取信息,将其发送到 lambda,后者会触发电子邮件 将其添加到 Dynamodb。在这种情况下,其他任何事情都有些矫枉过正,会增加您的成本。

【讨论】:

    猜你喜欢
    • 2019-01-28
    • 1970-01-01
    • 2014-11-15
    • 2010-10-18
    • 1970-01-01
    • 2011-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多