云计算-Lambda事件 (Lambda Events)_s3eventnotificationrecord
检索事件信息 (Retrieving Event Information)
在上一个主题中,我们已经看到了如何创建一个Lambda函数、添加handler、添加触发器和配置执行策略。在本主题中,我们将对其进行扩展。到目前为止,我们看到的handler应用非常简单,但我们可以在handler中做很多事情。例如,我们可以提取S3事件的详细信息(桶名称、键)。我们将看到一个示例,在这个示例中,我们将使用Lambda函数执行以下操作。由于我们当前的Lambda函数配置了一个用于所有“对象创建事件”的S3触发器,我们的目标是执行以下操作:
- 读取桶名称
- 读取键(对象/文件的名称)
- 读取对象的内容(我们将在下一节中看到)
我们创建的handler需要读取触发handler的桶的详细信息和相应的键。接下来,handler将读取桶中“键”文件的内容。读取的“键”文件的内容不是直接的字符串格式,我们需要将其转换为字符串。为此,我们需要添加以下依赖项:
commons-io commons-io 2.5
首先,让我们看看如何检索桶信息。我们需要导入以下类。在上一个主题中使用了“Context”和“S3Event”类。
import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.events.S3Event;import com.amazonaws.services.s3.event.S3EventNotification.S3EventNotificationRecord;import com.amazonaws.auth.DefaultAWSCredentialsProviderChain;
我们的handler将如下所示:
public String myHandler(S3Event event, Context context) { String bucket = \"\"; String key = \"\"; for (S3EventNotificationRecord record : event.getRecords()) { key = record.getS3().getObject().getKey(); bucket = record.getS3().getBucket().getName(); context.getLogger().log(\"Bucket information: Bucket: \" + bucket + \", Key: \" + key); }}
我们的handler将有两个输入参数:“S3Event”类型和“Context”类型。“S3Event”对象将仅保存引用,而不是实际的事件对象。我们必须使用AWS SDK来访问事件对象。我们使用“S3EventNotificationRecord”对象从S3事件中提取所有记录。然后使用“getBucket()”和“getKey()”方法提取有关桶和相应键的信息。使用“getLogger()”方法记录桶和键的详细信息。
日志如下图所示。
活动19 (教程活动)
为Lambda函数添加一个S3触发器,用于“创建对象