AWS Lambda
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

示例函数代码

示例代码具有以下语言。

Node.js

以下示例处理来自 DynamoDB 的消息并记录其内容。

例 ProcessDynamoDBStream.js

console.log('Loading function'); exports.lambda_handler = function(event, context, callback) { console.log(JSON.stringify(event, null, 2)); event.Records.forEach(function(record) { console.log(record.eventID); console.log(record.eventName); console.log('DynamoDB Record: %j', record.dynamodb); }); callback(null, "message"); };

压缩示例代码以创建部署程序包。有关说明,请参阅Node.js 中的 AWS Lambda 部署程序包

Java 8

以下示例处理来自 DynamoDB 的消息,并记录其内容。handleRequest 是 AWS Lambda 调用并提供事件数据的处理程序。该处理程序使用了预定义的 DynamodbEvent 类(在 aws-lambda-java-events 库中定义)。

例 DDBEventProcessor.java

package example; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.LambdaLogger; import com.amazonaws.services.lambda.runtime.RequestHandler; import com.amazonaws.services.lambda.runtime.events.DynamodbEvent; import com.amazonaws.services.lambda.runtime.events.DynamodbEvent.DynamodbStreamRecord; public class DDBEventProcessor implements RequestHandler<DynamodbEvent, String> { public String handleRequest(DynamodbEvent ddbEvent, Context context) { for (DynamodbStreamRecord record : ddbEvent.getRecords()){ System.out.println(record.getEventID()); System.out.println(record.getEventName()); System.out.println(record.getDynamodb().toString()); } return "Successfully processed " + ddbEvent.getRecords().size() + " records."; } }

如果该处理程序正常返回并且没有异常,则 Lambda 认为输入的记录批次得到成功处理并开始读取流中的新记录。如果该处理程序引发异常,则 Lambda 认为输入的记录批次未得到处理,并用相同的记录批次再次调用该函数。

附属物

  • aws-lambda-java-core

  • aws-lambda-java-events

使用 Lambda 库依赖项构建代码以创建部署程序包。有关说明,请参阅Java 中的 AWS Lambda 部署程序包

C#

以下示例处理来自 DynamoDB 的消息,并记录其内容。ProcessDynamoEvent 是 AWS Lambda 调用并提供事件数据的处理程序。该处理程序使用了预定义的 DynamoDbEvent 类(在 Amazon.Lambda.DynamoDBEvents 库中定义)。

例 ProcessingDynamoDBStreams.cs

using System; using System.IO; using System.Text; using Amazon.Lambda.Core; using Amazon.Lambda.DynamoDBEvents; using Amazon.Lambda.Serialization.Json; namespace DynamoDBStreams { public class DdbSample { private static readonly JsonSerializer _jsonSerializer = new JsonSerializer(); public void ProcessDynamoEvent(DynamoDBEvent dynamoEvent) { Console.WriteLine($"Beginning to process {dynamoEvent.Records.Count} records..."); foreach (var record in dynamoEvent.Records) { Console.WriteLine($"Event ID: {record.EventID}"); Console.WriteLine($"Event Name: {record.EventName}"); string streamRecordJson = SerializeObject(record.Dynamodb); Console.WriteLine($"DynamoDB Record:"); Console.WriteLine(streamRecordJson); } Console.WriteLine("Stream processing complete."); } private string SerializeObject(object streamRecord) { using (var ms = new MemoryStream()) { _jsonSerializer.Serialize(streamRecord, ms); return Encoding.UTF8.GetString(ms.ToArray()); } } } }

使用以上示例替换.NET Core 中的 Program.cs有关说明,请参阅.NET Core CLI

Python 3

以下示例处理来自 DynamoDB 的消息并记录其内容。

例 ProcessDynamoDBStream.py

from __future__ import print_function def lambda_handler(event, context): for record in event['Records']: print(record['eventID']) print(record['eventName']) print('Successfully processed %s records.' % str(len(event['Records'])))

压缩示例代码以创建部署程序包。有关说明,请参阅Python 中的 AWS Lambda 部署程序包

Go

以下示例处理来自 DynamoDB 的消息并记录其内容。

import ( "strings" "github.com/aws/aws-lambda-go/events" ) func handleRequest(ctx context.Context, e events.DynamoDBEvent) { for _, record := range e.Records { fmt.Printf("Processing request data for event ID %s, type %s.\n", record.EventID, record.EventName) // Print new values for attributes of type String for name, value := range record.Change.NewImage { if value.DataType() == events.DataTypeString { fmt.Printf("Attribute name: %s, value: %s\n", name, value.String()) } } } }

压缩示例代码以创建部署程序包。有关说明,请参阅Python 中的 AWS Lambda 部署程序包

本页内容: