创建 Lambda 函数 - Amazon SDK for JavaScript
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

帮助我们改进Amazon SDK for JavaScript版本 3 (V3) 文档,方法是使用反馈链接,或者在上创建议题或拉取请求GitHub.

这些区域有:Amazon SDK for JavaScriptV3 API 参考指南详细描述了Amazon SDK for JavaScript版本 3 (V3)。

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

创建 Lambda 函数

本主题是本教程的一部分,该教程将演示如何调用 Lambda 函数Amazon Step Functions. 要开始使用本教程,请参阅创建Amazon使用无服务器工作流Amazon SDK for JavaScript

使用 Lambda 运行时 API 创建 Lambda 函数。在此示例中,有三个工作流步骤对应于每个 Lambda 函数。

按照以下部分所述,创建这些 Lambda 函数:

  • GetId Lambda 函数-用作处理票证 ID 值的工作流程的第一步。

  • addItem Lambda 类-用作工作流程中的第二步,将票证分配给员工并将数据存储在 DynamoDB 数据库中。

  • 发送电子邮件 Lambda 类-用作工作流程中的第三步,即使用 Amazon SES 向员工发送电子邮件,通知他们有关票证的情况。

GetId Lambda 函数

创建一个 Lambda 函数,该函数返回传递给工作流程第二步的票证 ID 值。

exports.handler = async (event) => { // Create a support case using the input as the case ID, then return a confirmation message try{ const myCaseID = event.inputCaseID; var myMessage = "Case " + myCaseID + ": opened..."; var result = { Case: myCaseID, Message: myMessage }; } catch(err){ console.log('Error', err); } };

在命令行中输入以下内容以使用 webpack 将文件捆绑到名为的文件中index.js.

webpack getid.js --mode development --target node --devtool false --output-library-target umd -o index.js

然后压缩index.js变成ZIP文件名称getid.js.zip.上传ZIP将文件转到您在本示例主题中创建的 Amazon S3 存储桶中。

此代码示例可用此处GitHub.

addItem Lambda 类

创建一个 Lambda 函数,用于选择员工来分配票证,然后将票证数据存储在名为的 DynamoDB 表中案例.

"use strict"; // Load the required clients and commands. const { DynamoDBClient, PutItemCommand } = require("@aws-sdk/client-dynamodb"); const REGION = "eu-west-1"; //e.g. "us-east-1" // Create the client service objects. const dbclient = new DynamoDBClient({ region: REGION }); exports.handler = async (event) => { try{ // Helper function to send message using Amazon SNS. const val = event; //PersistCase adds an item to a DynamoDB table const tmp = (Math.random() <= 0.5) ? 1 : 2; console.log(tmp); if (tmp == 1) { const params = { TableName: "Case", Item: { id: {N: val.Case}, empEmail: {S: "brmur@amazon.com"}, name: {S: "Tom Blue"} }, } console.log('adding item for tom'); try { const data = await dbclient.send(new PutItemCommand(params)); console.log(data); } catch (err) { console.error(err); } var result = { Email: params.Item.empEmail }; return result; } else { const params = { TableName: "Case", Item: { id: {N: val.Case}, empEmail: {S: "brmur@amazon.com"}, name: {S: "Sarah White"} }, } console.log('adding item for sarah'); try { const data = await dbclient.send(new PutItemCommand(params)); console.log(data); } catch (err) { console.error(err); } return params.Item.empEmail; var result = { Email: params.Item.empEmail }; } } catch(err){ console.log("Error" , err) } }

在命令行中输入以下内容以使用 webpack 将文件捆绑到名为的文件中index.js.

webpack additem.js --mode development --target node --devtool false --output-library-target umd -o index.js

然后压缩index.js变成ZIP文件名称additem.js.zip.上传ZIP将文件转到您在本示例主题中创建的 Amazon S3 存储桶中。

此代码示例可用此处GitHub.

发送电子邮件 Lambda 类

创建一个发送电子邮件以通知他们有关新票证的 Lambda 函数。使用从第二步传递的电子邮件地址。

// Load the required clients and commands. const { SESClient, SendEmailCommand } = require("@aws-sdk/client-ses"); // Set the AWS Region. const REGION = "eu-west-1"; //e.g. "us-east-1" // Create the client service objects. const sesclient = new SESClient({ region: REGION }); exports.handler = async (event) => { // Enter a sender email address. This address must be verified. const sender = "Sender Name <briangermurray@gmail.com>"; // Amazon Step Functions passes the employee's email to the event. // This address must be verified. const recepient = event.S; // The subject line for the email. const subject = "New case"; // The email body for recipients with non-HTML email clients. const body_text = "Hello,\r\n" + "Please check the database for new ticket assigned to you."; // The HTML body of the email. const body_html = `<html><head></head><body><h1>Hello!</h1><p>Please check the database for new ticket assigned to you.</p></body></html>`; // The character encoding for the email. const charset = "UTF-8"; var params = { Source: sender, Destination: { ToAddresses: [ recepient ], }, Message: { Subject: { Data: subject, Charset: charset }, Body: { Text: { Data: body_text, Charset: charset }, Html: { Data: body_html, Charset: charset } } } }; try { const data = await sesclient.send(new SendEmailCommand(params)); console.log(data); } catch (err) { console.error(err); } };

在命令行中输入以下内容以使用 webpack 将文件捆绑到名为的文件中index.js.

webpack sendemail.js --mode development --target node --devtool false --output-library-target umd -o index.js

然后压缩index.js变成ZIP文件名称sendemail.js.zip.上传ZIP将文件转到您在本示例主题中创建的 Amazon S3 存储桶中。

此代码示例可用此处GitHub.

部署 Lambda 函数

部署getidLambda 函数:

  1. 在以下位置打开 Lambda 控制台Amazon Web Services 控制台.

  2. 选择 Create Function (创建函数)

  3. 选择 Author from scratch (从头开始创作)

  4. 基本信息部分,输入Getid作为名字。

  5. 运行时,选择Node.js 14x.

  6. 选择使用现有角色,然后选择lambda 支持(您在中创建的 IAM 角色)。

  7. 选择 Create function(创建函数)。

  8. 选择上传到-Amazon S3 位置.

  9. 选择上传,选择上传到-Amazon S3 位置,然后输入Amazon S3 链接 URL.

  10. 请选择保存

  11. 重复此过程,以便添加 .js.zipsendemail .js.zip转换到新的 Lambda 函数。完成后,您将拥有三个 Lambda 函数,您可以在亚马逊州语言文档中参考这些函数。