云计算-Lambda事件 (Lambda Events)

检索事件信息 (Retrieving Event Information)

        在上一个主题中,我们已经看到了如何创建一个Lambda函数、添加handler、添加触发器和配置执行策略。在本主题中,我们将对其进行扩展。到目前为止,我们看到的handler应用非常简单,但我们可以在handler中做很多事情。例如,我们可以提取S3事件的详细信息(桶名称、键)。我们将看到一个示例,在这个示例中,我们将使用Lambda函数执行以下操作。由于我们当前的Lambda函数配置了一个用于所有“对象创建事件”的S3触发器,我们的目标是执行以下操作:

  • 读取桶名称
  • 读取键(对象/文件的名称)
  • 读取对象的内容(我们将在下一节中看到)

        我们创建的handler需要读取触发handler的桶的详细信息和相应的键。接下来,handler将读取桶中“键”文件的内容。读取的“键”文件的内容不是直接的字符串格式,我们需要将其转换为字符串。为此,我们需要添加以下依赖项:

<dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.5</version>
</dependency>

        首先,让我们看看如何检索桶信息。我们需要导入以下类。在上一个主题中使用了“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触发器,用于“创建对象”事件。 在Cloud9中更新handler代码,使其接收来自S3的事件通知。 handler应从事件通知中检索桶和键信息,并将其添加为日志条目。 使用新的handler JAR文件更新Lambda函数。

        参考代码:

package au.edu.scu.app;import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.events.S3Event;
import com.amazonaws.services.s3.event.S3EventNotification.S3EventNotificationRecord;public class App 
{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);}return null;}
}
读取对象内容 (Reading Object Content)

        在上一节中,我们已经看到如何检索桶和键信息。一旦我们知道了桶名称和键,我们可以扩展功能来读取对象的内容。为此,我们需要添加以下类。

import com.amazonaws.services.lambda.runtime.Context; 
import com.amazonaws.services.lambda.runtime.events.S3Event;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.event.S3EventNotification.S3EventNotificationRecord;
import com.amazonaws.auth.DefaultAWSCredentialsProviderChain;import com.amazonaws.services.s3.model.S3Object;
import com.amazonaws.services.s3.model.GetObjectRequest;
import org.apache.commons.io.IOUtils;
import java.io.InputStream;

        我们的handler现在将包含以下代码:

public String myHandler(S3Event event, Context context) {try {AmazonS3Client s3 = new AmazonS3Client(new DefaultAWSCredentialsProviderChain());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);}S3Object s3Object = s3.getObject(new GetObjectRequest(bucket, key));InputStream objectData = s3Object.getObjectContent();String content = IOUtils.toString(objectData, "UTF-8");context.getLogger().log("Content in the object: " + content);} catch(Exception exp) {System.out.println("error occurred");}return null;
}

        我们首先创建一个“AmazonS3Client”对象。现在我们使用“getObject()”方法,用我们刚刚提取的桶和键信息创建一个“S3Object”对象。使用“S3Object”对象,创建一个“InputStream”类对象来检索“键”文件中的内容。然后我们使用“IOUtils”类的实例将输入流转换为字符串。

        其余过程与我们之前看到的一样。我们使用这个新的JAR文件更新Lambda函数。我们可以通过将一个简单的txt文件上传到指定的桶中轻松测试它。

        活动20 (教程活动)
        更新您的handler,使您的Lambda函数能够在收到“对象创建”通知时检索S3对象的内容。
        您的handler应将对象的内容保存为日志条目。
        使用新的handler JAR更新您的Lambda函数。
        通过上传包含字符串“Welcome to PROG2003 Cloud Systems Development”的.txt文件来测试您的Lambda函数。

        参考代码:

package au.edu.scu.app;import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.events.S3Event;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.event.S3EventNotification.S3EventNotificationRecord;
import com.amazonaws.services.s3.model.S3Object;
import com.amazonaws.services.s3.model.GetObjectRequest;
import org.apache.commons.io.IOUtils;import java.io.InputStream;public class App 
{public String myHandler(S3Event event, Context context) {try {AmazonS3Client s3 = new AmazonS3Client(new DefaultAWSCredentialsProviderChain());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);}S3Object s3Object = s3.getObject(new GetObjectRequest(bucket, key));InputStream objectData = s3Object.getObjectContent();String content = IOUtils.toString(objectData, "UTF-8");context.getLogger().log("Content in the object: " + content);} catch (Exception exp) {context.getLogger().log("Error occurred: " + exp.getMessage());}return null;}
}

        活动21 (教程活动)
        更新您的handler方法,使其现在能够从S3桶中读取JSON对象。假设JSON对象是一个"Unit"对象,内容为{"Id": 305, "UnitName": "Programming Cloud Systems", "UnitCode": "PROG2003"}。
        您的handler应解析JSON对象,并读取“Id”、“UnitName”和“UnitCode”字段的值。
        创建一个新的名为"Unit"的DynamoDB表,主键为“Id” - 数字类型,“UnitName”和“UnitCode” - 字符串类型。
        您的handler应插入一个具有从JSON对象解析的字段值的项目。
使用新的handler JAR更新您的Lambda函数,并通过将包含上述条目的.json文件上传到S3桶来测试Lambda函数。
        使用“org.json”包(https://mvnrepository.com/artifact/org.json/json)来实现此功能。有关JSONObject类的描述,请参见:http://stleary.github.io/JSON-java/index.html。

        参考代码:

package au.edu.scu.app;import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.events.S3Event;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.event.S3EventNotification.S3EventNotificationRecord;
import com.amazonaws.services.s3.model.S3Object;
import com.amazonaws.services.s3.model.GetObjectRequest;
import com.amazonaws.auth.DefaultAWSCredentialsProviderChain;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient;
import com.amazonaws.services.dynamodbv2.model.PutItemRequest;
import com.amazonaws.services.dynamodbv2.model.AttributeValue;
import org.apache.commons.io.IOUtils;
import org.json.JSONObject;import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;public class App 
{public String myHandler(S3Event event, Context context) {try {AmazonS3Client s3 = new AmazonS3Client(new DefaultAWSCredentialsProviderChain());AmazonDynamoDBClient dynamoDB = new AmazonDynamoDBClient(new DefaultAWSCredentialsProviderChain());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);}S3Object s3Object = s3.getObject(new GetObjectRequest(bucket, key));InputStream objectData = s3Object.getObjectContent();String content = IOUtils.toString(objectData, "UTF-8");context.getLogger().log("Content in the object: " + content);JSONObject json = new JSONObject(content);int id = json.getInt("Id");String unitName = json.getString("UnitName");String unitCode = json.getString("UnitCode");Map<String, AttributeValue> item = new HashMap<>();item.put("Id", new AttributeValue().withN(Integer.toString(id)));item.put("UnitName", new AttributeValue().withS(unitName));item.put("UnitCode", new AttributeValue().withS(unitCode));PutItemRequest putItemRequest = new PutItemRequest().withTableName("Unit").withItem(item);dynamoDB.putItem(putItemRequest);} catch (Exception exp) {context.getLogger().log("Error occurred: " + exp.getMessage());}return null;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/18294.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux 定时执行shell、python脚本

在linux里设置定时执行一般是用crontab&#xff0c;如果没有的话&#xff0c;可以先安装&#xff1a; 安装 查看是否安装 cron -v # 对于基于Debian的系统&#xff08;如Ubuntu&#xff09; sudo apt-get install cron# 对于基于RedHat的系统&#xff08;如CentOS&#xff…

【5】:三维到二维变换(模型、视图、投影)

观测变换 物体上某一点的坐标变换顺序&#xff1a;M->V->P MVP变换用来描述视图变换的任务&#xff0c;即将虚拟世界中的三维物体映射&#xff08;变换&#xff09;到二维坐标中。 1.Model Transformation 模型变换 场景中每个物体上的某一点&#xff0c;从局部坐标系…

YoloV8实战:各种图绘制汇总(mAP50、mAP50-95、loss、PR_curve、F1_curve)|科研必备|绘图神器

摘要 本文的内容是告诉大家如何绘制mAP50、mAP50-95、loss、PR_curve、F1_curve等图像,方便大家写论文。 绘制mAP50、mAP50-95、loss等图。 先上效果,如下图: 首先将,训练的result.csv汇总到一个文件夹下面(这样方便寻找),要不然找起来太麻烦。如下图: 我都放到re…

Pyinstaller打包exe文件解决指南

打包命令 打包 Python 文件 输入如下格式的命令即可 默认命令 Pyinstaller 文件名.py Pyinstaller -option1 -option2 -... 要打包的文件 Pyinstaller 文件名.pyPyinstaller -option1 -option2 -... 要打包的文件 参数选项比较多&#xff0c;这里我列一个表&#xff1a;…

[C#]winform部署官方yolov10目标检测的onnx模型

【框架地址】 https://github.com/THU-MIG/yolov10 【算法介绍】 今天为大家介绍的是 YOLOv10&#xff0c;这是由清华大学研究团队最新提出的&#xff0c;同样遵循 YOLO 系列设计原则&#xff0c;致力于打造实时端到端的高性能目标检测器。 方法 创新 双标签分配策略 众所…

灯塔工厂产业数字化平台解决方案(50页PPT)

方案介绍&#xff1a; 随着工业4.0和智能制造的快速发展&#xff0c;传统工厂正面临着转型升级的迫切需求。为了提升生产效率、优化资源配置、增强市场竞争力&#xff0c;我们推出了灯塔工厂产业数字化平台解决方案。该方案旨在通过先进的信息技术手段&#xff0c;将传统工厂转…

蒙特卡洛法求解机械臂工作空间(以IRB4600型工业机械臂为例)

1. 概念 工作空间是衡量机器人工作能力的一个重要的运动学指标&#xff0c;蒙特卡洛法是一种随机模拟方法&#xff0c;用于在计算机上估计某些统计量&#xff0c;对于要估计的统计量&#xff0c;通过模拟大量的随机抽样&#xff0c;并计算这些样本的随机值来估算这个统计量的值…

数字信号处理实验三:IIR数字滤波器设计及软件实现

一、实验目的 1. 掌握MATLAB中进行IIR模拟滤波器的设计的相关函数的应用&#xff1b; 2. 掌握MATLAB的工具箱中提供的常用IIR数字滤波器的设计函数的应用&#xff1b; 3.掌握MATLAB的工具箱中提供的模拟滤波器转数字滤波器的相关的设计函数的应用。 二、实验内容 本实验为…

CC1310 Debug interface is locked

XDS110连接CC1310板子&#xff0c;打开Smart RF 弹出窗口如下&#xff1a; 解决办法&#xff1a; 1 打开SmartRF Flash Programmer 2 选择连接的设备CC1310, 弹出如下窗口&#xff0c;点击OK。 3 点击Tools图标&#xff0c;选择CC26XX/CC13XX Forced Mass Erase。 4 在弹出的…

Windows11系统安装QEMU虚拟化软件

Windows11系统安装QEMU虚拟化软件 QEMU软件是一个通用的开源机器模拟器和虚拟机。本文档适用于在Windows 11系统平台上安装QEMU软件。 1. 安装准备 1.1 安装平台 Windows 11 1.2. 软件信息 软件名称软件版本安装路径QEMUQEMU-8.2.93D:\qemu 1.3软件下载 QEMU官网官网下…

【全开源】西陆家政系统源码小程序(FastAdmin+ThinkPHP+原生微信小程序)

打造高效便捷的家政服务平台 一、引言&#xff1a;家政服务的数字化转型 随着人们生活节奏的加快&#xff0c;家政服务需求日益增长。为了满足广大用户对高效、便捷的家政服务的需求&#xff0c;家政小程序系统源码应运而生。这款源码不仅能够帮助家政服务提供商快速搭建自己…

关于本人VIP付费文章说明

郑重声明&#xff1a;我写博客只是为了记录分享经验 自从上次写完数据结构系列后我就一直没有登陆&#xff0c;目前也没打算继续开新内容。今天偶然发现我之前写的文章被设为vip文章&#xff0c;要vip解锁才能看&#xff0c;我很确定当初我发布的时候选择的是公开&#xff0c;…

FastGPT + OneAPI 构建知识库

云端text-embedding模型 这个在前面的文章FastGPT私有化部署OneAPI配置大模型中其实已经说过&#xff0c;大概就是部署完成OneAPI后&#xff0c;分别新建令牌和渠道&#xff0c;并完成FastGPT的配置。 新建渠道 选择模型的类型并配置对应的词向量模型即可&#xff0c;这里我…

excel数据丢失怎么办?表格文件恢复的3个方法

Excel作为一个常用的表格文件&#xff0c;我们在工作中经常都需要用到它。最令人崩溃的事就是有时候我们辛辛苦苦用Excel完成了工作&#xff0c;但是突然发现Excel数据丢失。这可怎么办呢&#xff1f;如何找回丢失的Excel数据&#xff1f;下面小编就分享几种恢复办法。 方法一&…

FPGA——eMMC验证

一.FPGA基础 1.FPGA烧录流程 (1) 加载流文件 —— bitfile (2) 烧录文件 —— cmm 二.MMC 1.基础知识 (1)jz4740、mmc、emmc、sd之间的关系&#xff1f; jz4740——处理器 mmc——存储卡标准 emmc——mmc基础上发展的高效存储解决方案 sd—— 三.eMMC和SD case验证 1.ca…

Go 使用 RabbitMQ---------------之一

RabbitMQ 是一种消息代理。消息代理的主要目的是接收、存储并转发消息。在复杂的系统设计和微服务架构中,RabbitMQ 经常被用作中间件来处理和转发系统之间的消息,以确保数据的一致性和可靠性。正是因为提供了可靠的消息机制、跟踪机制和灵活的消息路由,常常被用于排队算法、…

MFC里的工具栏按钮图标如何使用外部图片?

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

据库管理-第196期 实战RDMA(20240528)

数据库管理196期 2024-05-28 数据库管理-第196期 实战RDMA&#xff08;20240528&#xff09;1 环境2 操作系统配置3 配置NVMe over RDMA4 挂载磁盘处理并挂载磁盘&#xff1a; 5 RDMA性能测试6 iSCSI部署7 iSCSI性能测试8 性能对比总结 数据库管理-第196期 实战RDMA&#xff08…

Transformer 从attention到grouped query attention (GQA)

Attention原理和理解 attention原理参考&#xff1a; Attention Is All You Need The Illustrated Transformer – Jay Alammar – Visualizing machine learning one concept at a time. Transformer图解 - 李理的博客 Attention首先对输入x张量乘以WQ, WK, WV得到query,…

软件程序设计规范(代码编写规范文档)-word下载

程序的编码是一个创造性极强的工作&#xff0c;必须要遵守一定的规则和限制&#xff0c;编码风格的重要性对软件项目开发来说是不言而喻的。 开发工程师在开发过程中必须遵守本规范&#xff0c;规范是代码编写及代码验收等管理环节中必须执行的标准。 编制基本原则&#xff1a;…