AWS学习加踩坑记录-AWS Lambda(2)

前言

第一篇稍微介绍了一下severless的架构,这篇来主要讲讲架构的主体AWS Lambda。虽然我确实没搞懂为什么要这样选型,但是有句话说得好,来都来了,那先学了再说吧。

AWS Lambda简介

AWS Lambda 是一项计算服务,可使您无需预配置或管理服务器即可运行代码。AWS Lambda 只在需要时执行您的代码并自动缩放,从每天几个请求到每秒数千个请求。借助 AWS Lambda,您几乎可以为任何类型的应用程序或后端服务运行代码,并且不必进行任何管理。

以上文字介绍来自于AWS Lambda官方文档,简单来说Lambda就是让你不需要管任何运行环境配置和不统一的操作系统的问题,只需要写好代码上传到控制台就可以运行了。有的语言甚至支持在控制台直接编写业务代码,比如Python和Node.js。其他语言需要上传打包好的ZIP压缩包或者jar包集成配置来运行,例如Java。

创建并使用Lambda

接下来就是在控制台里面创建函数,这一步最主要的是把权限设置好,其他的参数在建立的Lambda内部也可以修改。创建新的Lambda函数的时候,需要选择资源策略,一般都是用IAM来控制,当然也可以选择别的资源策略。创建好以后,会有一个默认的handler作为接收请求的方法,一般这个handler方法有两个参数,一个是event,另一个是context。在Python里面,event代表的是一整个HTTP请求,可以通过不同的参数名称来获取request里面的数据。但是,在Java里面就没有这么简单了!虽然也并不难,但是中文文档里面只介绍了三种接收数据的模式,分别是POJO类型、流类型和自定义类型(也就是自定POJO和流类型)。POJO顾名思义就是接受一个最简单的对象,AWS Lambda会帮你序列化好,只需要定义一个对象来接收数据就可以了。但是如果序列化不够用的话,还可以用stream的方式来接收数据。

如果使用Java的SDK的话,把环境配好以后,点击运行会看到下面的弹框。

run configuration
做项目的时候一直用的都是POJO,但是在传递session的时候遇到了问题,因为一般session都是放在header里面传递,但是POJO没办法接收到header里面的值。思来想去感觉不对劲,就去Google上查资料,查了很多,发现网上的例子都是用Python来从events里面获取header,那真的是简单,基本就从event里面读一个参数就够了。那Java到底要怎么获取呢,真的是百思不得其解,也没有见过要用Stream来获取header的情况啊?后来中文文档实在是不知道到哪去找资料,差点就去提交工单找技术支持了。实在没办法,我就把文档的语言切成英文,发现方法就直接写在英文文档里面!!英文文档的Handler页面里面甚至还有java-events的示例代码!!

示例如下:
APIGatewayV2ProxyRequestEvent

其实AWS Lambda的SDK提供了一个叫APIGatewayV2ProxyRequestEvent的接口,只要导入这个依赖就可以了,可以直接getHeader,也就是从API Gateway那里获取header传输过来的数据。不过想要顺利传输的话,API Gateway那边需要写好映射模板,这件事情我们以后再说。所以说,文档这个东西,是非常重要的,建议每一位写文档的人都考虑一下未来可能要看到这份文档的人,对他们好一点。珍爱生命,远离坑爹文档。

context里面的内容是一些和函数名称、版本、资源名称之类的东西,可以根据需要来监控使用,一般而言不太需要,不用太注意。Lambda有一点比较方便的是自带CloudWatch Logs日志,还有图形化界面可以看到调用情况和执行时间之类的数值,对于监控程序运行情况而言非常方便。Lambda还可以和AWS X-Ray集成,用来分析函数调用时长情况。但是这个功能中国区是没有的!!!如果服

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值