什么是AWS Lambda?

计算服务的演进

EC2------Container-------Lambda

虚拟机---容器--------------serverless无服务器架构

EC2(Elastic Compute Cloud)

EMR(Elastic MapReduce)

import json

def lambda_handler(event, context):

# TODO implement

return {

'statusCode': 200,

'body': json.dumps('Hello from Lambda!')

}

# event即为接收过来的数据,例如来在trigger kinesis.

Werner Vogels在主题演讲上简要叙述了Lambda设计思路的由来。

Vogels首先抛出一个问题:什么是云计算的根本(primitives)?

答案:云计算是一个执行环境。

Vogels再抛出第二个问题:什么是应用的根本?

答案:函数(functions,即业务逻辑的载体)+数据(data,即跟业务相关的输入与输出),以及这两者之间的交互——即事件(events。常见的事件如增加、变更、删除等)。

换言之,对于一个应用来说,除了functions、data、events这三个东西是根本之外,其他无论什么代码和框架,无非都是胶水或者UI罢了。

通过 AWS Lambda,无需配置或管理服务器即可运行代码。您只需按消耗的计算时间付费 - 代码未运行时不产生费用。

当你提到'无服务器计算'时,你可能马上想到的是AWS Lambda,Microsoft Azure Functions和Google Cloud Functions等功能即服务(FaaS)技术。虽然还有其他无服务器技术(如无服务器数据存储和数据库),但这些功能计算服务通常就是你所了解的“无服务器计算”。

AWS lambda的核心是事件驱动,驱动可能来自,Alexa,SNS,DynamoDB,S3,Kinesis等;

AWS lambda在整个AWS这个版图中占有非常重要的地位。

Lambda是AWS提供的一款无服务器计算服务。您不需要管理服务器、不需要安装操作系统、不需要维护运行时环境、不需要担心应用的可用性和扩展性。

AWS CTO Werner Vogels在AWS re:Invent 2014大会的第二场主题演讲上公布了两个新服务和一系列新的实例,两个新服务都相当令人瞩目:第一个宣布的新服务是Amazon EC2 Container Service,跟Docker紧密联合的管理服务,令人兴奋,不过不是本篇报道的重点。

本篇报道主要想向大家介绍一下今天宣布的第二个服务:AWS Lambda。

什么是AWS Lambda?

根据Jeff Barr在博客上的描述,Lambda是一个“可简单创建Lambda函数、无需管理的计算平台”。不过我们也可以这么理解:Lambda是一个针对AWS计算资源的IFTTT脚本创建器和管理器。

举个例子:你有一个照片类应用。照片上传到S3之后,需要在DynamoDB上记录新照片的元数据。Lambda的作用就是可以有一个地方放一个触发脚本来执行这个任务,而不用关心这个脚本运行在什么机器或者虚拟机上。

Vogels在专访中表示,也可以将Lambda理解为将functions(函数)从计算资源层抽象出来的服务。

Lambda的设计理念

Werner Vogels在主题演讲上简要叙述了Lambda设计思路的由来。

Vogels首先抛出一个问题:什么是云计算的根本(primitives)?

答案:云计算是一个执行环境。

Vogels再抛出第二个问题:什么是应用的根本?

答案:函数(functions,即业务逻辑的载体)+数据(data,即跟业务相关的输入与输出),以及这两者之间的交互——即事件(events。常见的事件如增加、变更、删除等)。

换言之,对于一个应用来说,除了functions、data、events这三个东西是根本之外,其他无论什么代码和框架,无非都是胶水或者UI罢了。

既然如此,理想的情况是用最少的时间写胶水,将做多的时间投入到应用的核心当中。

而最常见的胶水代码,就是触发器(trigger):当发生一个事件(event)时,执行某个函数(function),输出新的数据 (data)。Vogels以Excel表单为例:在一个表单当中,一个单元格数值的变更,触发总和列对应单元格数值的变更,就是一个事件触发函数将新的 变量纳入计算得出新的数值的过程。这个过程是自动的,还可以是并发的,即一处变更同时触发多个函数。

基于这个思路,AWS做了Lambda服务。

Lambda的用法

以下内容来自于Jeff Barr的博文:

Lambda服务的核心概念是Lambda function(简称function,函数),目前仅支持Node.js。围绕function可以定义情景,包括执行环境(语言、内存、超时、 IAM角色)以及这个function要触发的另一个function。function的代码和有关情景的元数据均存储在AWS中,以ARN(Amazon Resource Name)的方式被外部识别。如需包含第三方库,可以放在ZIP文件中上传。

function上传之后,开发者可以将其指定到指定的AWS资源(如某个S3 bucket,某个DynamoDB表,某个Kinesis流),然后Lambda就会建立该资源跟你的function之间的关联。当资源方面发生变 动,Lambda就会去自动张罗资源去执行你的function。用于运行function的资源的创建分配和释放都有Lambda自动来做,开发者完全 不需要去干预。

每一个function默认会指定一个比较短的执行时间上限,不过这个上限最高可以调整到60秒。

每一个function具有双重的IAM角色:一个是触发角色(invocation role),决定Lambda执行某个function的权限;另一个是执行角色(execution role),决定该function操作AWS资源的权限。

Lambda会监控每个function的执行情况,并将请求数、延时、可用性、错误率等指标记录在CloudWatch里。控制台里可以看到过去30日的指标。

使用Lambda的两点须知:

  1. 情景信息设置了该function的可用内存,可设置到128MB到1GB之间的任何数值。Lambda会这个数值选择相应的CPU能力、网络带宽和IO带宽。
  2. 每个function的触发可以使用最多256个进程或线程,占用本地512MB存储空间,1024个文件描述符,以及10个出口网络连接。
  3. Lambda对每个AWS账户设置了一系列管理限制。预览版期间,每个function最多可同时触发另外25个function。

Lambda服务的定价见官网,由请求数、function运行期间使用的存储、运行期间使用的内存三部分组成。预览版期间有一部分免费的用量。

总结

Lambda是让开发者们兴奋的服务,在Twitter上激起了大量讨论。Jeff Barr表示Lambda后续还会有很多更新,比如对更多AWS资源的支持和对更多语言的支持。

除了Amazon EC2 Container Service和AWS Lambda之外,本次主题演讲还宣布了高性能EC2实例C4,可挂载的EBS卷(SSD)可支持到16TB的尺寸。

转自:http://www.infoq.com/cn/news/2014/11/aws-lambda-summary

就像很多人所知道的那样,这个世界上出现了一种叫区块链的技术,有一些区块链项目会发行 Token,这些 tokens 可以在交易所里交易。

我前几天想到是不是可以记录一下某个交易所的交易量变化,来了解这个交易所的运营情况。而且大部分交易所都有 api 可以调取交易市场上的数据。我选择了一个叫做 BigONE 的交易所。

根据他们的文档,我只需要调用一个接口就可以拿到所有交易市场的信息了。另外,我每天调用一次(凌晨3点),应该就差不多了。如果单开一台服务器做这件事,有点浪费;如果用我自己的电脑做这件事情,电脑就没法关机。

正好之前用过一点 AWS Lambda,这是一个只需要为算力付费(不是挖矿的算力)的计算服务。查了查,配合 AWS 的 Cloud Watch 服务,可以实现定点工作的功能,工作完成(几秒钟即可完成一次 api 的请求)后就不再收费。

创建 Lambda 函数

为了使用 AWS 的 Lambda 进行计算,你需要把处理方法写成一个函数。如果你用 python 就 def 一个,如果你用 node.js 就 function 一个。当到达了计算启动的条件,AWS 会自动调用这个函数。通常,你可以使用 AWS 默认的函数名,lambda_handler,并且这个函数被放在lambda_function.py这个文件下。

Lambda 控制台中的编辑器

下面就是创建这个函数的具体代码:

from botocore.vendored import requests import boto3 from datetime import datetime

s3 = boto3.client("s3") def lambda_handler(event, context):     markets = requests.get("https://api.big.one/markets")     key = datetime.now().isoformat().split('.')[0] + '.json'     s3.put_object(Body=markets.text, Key=key, Bucket="bigone-metrics")

这里有一点想要说明,在 python 中发 http 请求时经常[1]被用到 requests 模块被 Lambda 放在了botocore.vendored中[2]。

创建 S3 存储桶,赋予 Lambda 访问权限

为了更好的记录历史数据,我们都找个地方把数据存起来,S3 是一个比较便宜的地方。

为此我们需要在 S3 中创建一个存储桶。

但有了 S3 的存储桶之后,Lambda 并没有权限去访问它。我们需要为这个 Lambda 函数创建一个新角色,并赋予适当的权限。具体方法是:

创建 IAM,选择信任 Lambda

  1. 在 IAM 中创建一个 Role,这个 Role 要基于 Lambda (用 AWS 的话说,就是信任实体类型是 Lambda,见上图)
  2. 为这个角色附加策略时,选择 S3 的 FullAccess 权限[3],和 CloudWatch Log 的权限(因为 Lambda 会把启动时间,运行时间写在日志中)

最后把这个角色赋予刚刚创建的 Lambda 函数。

创建 CloudWatch 计划

在 Cloud Watch 中创建创建一个规则,要求这个规则中的计划事件是每天一次,并且把触发目标指向刚刚创建的 Lambda 函数。具体示例可参加 AWS 官方指南。

在 CloudWatch 控制台中创建规则

如果你想使用 Cron 来制定启动时间,比如北京时间晚上 1 点,你可以在上图所示的界面使用 Cron 表达式:0 17 * * ? *。 注意这个时间是基于 UTC 时间。

之后启动计划事件就可以了。

后话

这应该比单开一台服务器的成本低很多。另外,我使用的是 AWS 东京区域。

  1. 这里「很多」的依据是我在 StackOverFlow 中搜索如何用 python 发 request 的时候经常看到 ↩
  2. 更多 Lambda 中可用的 python modules 可以查看这个 gist ↩
  3. 其实只需要一个存储桶的 FullAccess,但如果你使用 AWS 封装好的策略,就只能选 FullAccess。如果你想要把权限改的更「贴身」,可以之后去编辑 json 格式的策略文件。 ↩

参考:什么是AWS Lambda?——事件驱动的函数执行环境

参考+book:AWS Lambda in Action: Event-driven serverless applications

参考:手把手来一次 AWS Lambda 的实践

参考:AWS Lambda都是浮云,AWS Fargate才是王道——无服务器的未来,有我没你!

参考:花了 1000G,我终于弄清楚了 Serverless 是什么(上):什么是 Serverless 架构?

参考:Create a Lambda Function with the Console

参考++aws视频中心+毛郸榕:快速上手AWS Lambda - 10.AWS Lambda配合S3 - 对象事件触发 (图片压缩/水印)

参考+aws视频中心+毛郸榕:快速上手AWS Lambda - 11.AWS Lambda配合Kinesis - 实时流数据处理

参考+aws视频中心+毛郸榕:快速上手AWS Lambda - 1.什么是AWS Lambda

参考:aws documentation

什么是AWS Lambda?相关推荐

  1. aws lambda_为什么我会自动删除所有旧的推文以及我用来执行此操作的AWS Lambda函数...

    aws lambda From now on, my tweets are ephemeral. Here's why I'm deleting all my old tweets, and the ...

  2. aws lambda使用_使用AWS Lambda安排Slack消息

    aws lambda使用 Migrating to serverless brings a lot of questions. How do you do some of the non-server ...

  3. aws lambda使用_如何使用AWS Lambda和S3构建无服务器URL缩短器

    aws lambda使用 by Daniel Ireson 丹尼尔·埃里森(Daniel Ireson) 如何使用AWS Lambda和S3构建无服务器URL缩短器 (How to build a S ...

  4. aws lambda_恐怕您正在考虑AWS Lambda的冷启动完全错误

    aws lambda by Yan Cui 崔燕 恐怕您正在考虑AWS Lambda的冷启动完全错误 (I'm afraid you're thinking about AWS Lambda cold ...

  5. 什么是AWS Lambda?——事件驱动的函数执行环境

    AWS CTO Werner Vogels在AWS re:Invent 2014大会的第二场主题演讲上公布了两个新服务和一系列新的实例,两个新服务都相当令人瞩目:第一个宣布的新服务是Amazon EC ...

  6. 在AWS Lambda上运行脚本语言:PHP、Ruby和Go(外文翻译)

    本文来自Mobingi官方技术专栏,欢迎关注 本文翻译自Scripting Languages for AWS Lambda: Running PHP, Ruby, and Go 备注:Go已经在20 ...

  7. 如何从Amazon API Gateway将查询字符串或路由参数传递到AWS Lambda

    本文翻译自:How to pass a querystring or route parameter to AWS Lambda from Amazon API Gateway for instanc ...

  8. 手把手带你玩转 AWS Lambda

    前言 微服务架构有别于传统的单体式应用方案,我们可将单体应用拆分成多个核心功能.每个功能都被称为一项服务,可以单独构建和部署,这意味着各项服务在工作时不会互相影响 这种设计理念被进一步应用,就变成了无 ...

  9. AWS Lambda 开发企业微信消息机器人

    AWS Lambda 开发企业微信消息机器人 实验介绍 本次实验中,我们将了解 AWS Lambda 的常见应用场景,并使用 AWS Lambda 构建能够定时将空气质量数据推送到企业微信的消息机器人 ...

最新文章

  1. 第三周项目四-穷举法解决组合问题(1)
  2. codeforces193B
  3. 浅谈Python Web的五大框架
  4. 基于布隆过滤器实现敏感词识别和过滤
  5. android 使用电脑画图软件输入文字
  6. windows下caffe+CPUOnly实现MNIST手写分类
  7. c语言中如何打出草花图案,C语言程序设计程设计题目1.doc
  8. Java基础之字符如何截取?
  9. 【技巧】LeetCode 86. Partition List
  10. WPF 添加阴影效果
  11. PCIE 协议分析工具
  12. Skype 去广告安装方法
  13. 腾达U12无线网卡驱动安装教程
  14. SSL基础:25:一键生成HTTPS服务器所用证书
  15. 【训练记录】2013-2014 Petrozavodsk Winter Training Camp, Moscow SU Trinity Contest @homework-7
  16. 关于网络传输单位的换算
  17. uniapp 开发微信公众号H5 隐藏右上角扩展按钮
  18. Maven 仓库 .lastUpdated文件
  19. Java多线程--深入浅出Java多线程
  20. 2、水晶头制作---网管技能

热门文章

  1. C#中HashTable的用法
  2. tcp转串口_PROFIBUS DP与Modbus/TCP网络转换操作指南
  3. 单链表:头结点和头指针的实现方式
  4. STL中的双向队列deque
  5. ICCV 2021 | R-MSFM: 用于单目深度估计的循环多尺度特征调制
  6. CVPR 2021 | 国防科大:基于几何稳定性分析的物体位姿估计方法
  7. 3D相机的数据处理方式
  8. 深度学习环境搭建之常识(anaconda,cuda,cudnn,python,tensorflow等概念)
  9. 如何实现一个定时的任务,并且可以自己停止
  10. RDKit支持PostgreSQL配置