lambda 匿名内部类

有没有想过lambda里面是什么样的? 不要怀疑了 让我们找出答案。

自从2014年问世以来,AWS的lambda函数就成为一个热门话题,在无服务器计算领域开辟了全新的历史。 无状态,零维护,按次执行的好东西实际上正在改变(即使不连根拔起)云计算范式的根源。 当其他玩家(例如Google和MS Azure)加入游戏时,AWS显然是赢家。

好吧,抛开说教,它到底看起来像一个lambda函数内部?

根据AWS专家的说法,lambda 由容器技术驱动 ; 确切地说,是AWS EC2容器服务(ECS) 。 因此,在这一点上,lambda只是一个Docker容器 ,外部访问受限。 但是,我们在容器内运行的功能代码几乎可以无限制地访问它(root特权除外),包括文件系统,内置和安装的命令以及CLI工具,系统元数据和统计信息,日志等。 对于普通的lambda作者而言,它不是很有用,但是如果您打算深入研究OS级的内容,可能会有用。

显然,探索所有这些OS级产品的最简单方法是让CLI(shell)访问lambda环境。 不幸的是,目前这还不可能。 尽管如此,结合NodeJS运行时提供的极其简单的语法以及lambda具有几分钟的保持活动时间这一事实,我们可以轻松地编写一个可以模拟shell的10层lambda。 尽管无法以这种方式建立真正的“会话”(例如,您无法在实时更新视图的top运行),但是您可以重复运行一系列命令,就像与用户控制台进行交互一样。

let {exec} = require('child_process');exports.handle = (event, context, callback) => {console.log(event);exec(event.cmd, (err, stdout, stderr) => {console.log(stdout);if (err) console.log(stderr);callback(undefined, {statusCode: 200});});
}

对我们来说幸运的是,由于代码仅是十行代码,外部依赖项为零,因此我们可以通过单个CloudFormation 模板部署整个lambda(包括代码,配置和执行角色) :

AWSTemplateFormatVersion: '2010-09-09'
Resources:shell:Type: AWS::Lambda::FunctionProperties:FunctionName: shellHandler: index.handleRuntime: nodejs6.10Code:ZipFile: >let {exec} = require('child_process');exports.handle = (event, context, callback) => {console.log(event);exec(event.cmd, (err, stdout, stderr) => {console.log(stdout);if (err) console.log(stderr);callback(undefined, {statusCode: 200});});}Timeout: 60Role:Fn::GetAtt:- role- Arnrole:Type: AWS::IAM::RoleProperties:ManagedPolicyArns:- arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRoleAssumeRolePolicyDocument:Version: 2012-10-17Statement:- Action: sts:AssumeRoleEffect: AllowPrincipal:Service: lambda.amazonaws.com

部署整个过程非常简单:

aws cloudformation deploy --stack-name shell --template-file /path/to/template.yaml --capabilities CAPABILITY_IAM

或选择模板并将其上传到CloudFormation仪表板 ,以防您没有AWS CLI (讨厌)的方式进行此操作。

部署后,只需使用包含所需shell命令的有效负载调用lambda即可:

{"cmd":"the command to be executed"}

如果您具有AWS CLI,则通过以下shell代码段调用时,整个过程将变得更加性感:

echo -n "> "
read cmd
while [ "$cmd" != "exit" ]; doechoaws lambda invoke --function-name shell --payload "{\"cmd\":\"$cmd\"}" --log-type Tail /tmp/shell.log --query LogResult --output text | base64 -dechoecho -n "> "read cmd
done

使用此脚本后,您只需要调用该脚本即可。 您将得到一个伪造的“ shell”,您可以在其中执行您期待已久的命令,lambda将执行该命令,并将输出立即返回到控制台,从而使您回到“ shell”提示符下:

> freeSTART RequestId: c143847d-12b8-11e8-bae7-1d25ba5302bd Version: $LATEST
2018-02-16T01:28:56.051Z    c143847d-12b8-11e8-bae7-1d25ba5302bd    { cmd: 'free' }
2018-02-16T01:28:56.057Z    c143847d-12b8-11e8-bae7-1d25ba5302bd                 total       used       free     shared    buffers     cached
Mem:       3855608     554604    3301004        200      44864     263008
-/+ buffers/cache:     246732    3608876
Swap:            0          0          0END RequestId: c143847d-12b8-11e8-bae7-1d25ba5302bd
REPORT RequestId: c143847d-12b8-11e8-bae7-1d25ba5302bd  Duration: 6.91 ms   Billed Duration: 100 ms     Memory Size: 128 MB Max Memory Used: 82 MB>

通过这种方式,您可以了解有关Lambda函数的栖息地和生活方式的很多知识。 首先,我了解到容器运行时环境由Amazon Linux实例组成,具有大约4GB(可能是共享的)备忘录和几个(不可用的)相当大的磁盘挂载(除了“推荐使用” 500MB)安装在/tmp ):

> dfSTART RequestId: bb0034fa-12ba-11e8-8390-cb81e1cfae92 Version: $LATEST
2018-02-16T01:43:04.559Z    bb0034fa-12ba-11e8-8390-cb81e1cfae92    { cmd: 'df' }
2018-02-16T01:43:04.778Z    bb0034fa-12ba-11e8-8390-cb81e1cfae92    Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/xvda1      30830568 3228824  27501496  11% /
/dev/loop8        538424     440    526148   1% /tmp
/dev/loop9           128     128         0 100% /var/taskEND RequestId: bb0034fa-12ba-11e8-8390-cb81e1cfae92
REPORT RequestId: bb0034fa-12ba-11e8-8390-cb81e1cfae92  Duration: 235.44 ms Billed Duration: 300 ms     Memory Size: 128 MB Max Memory Used: 22 MB> cat /etc/*-releaseSTART RequestId: 6112efb9-12bd-11e8-9d14-d5c0177bc74f Version: $LATEST
2018-02-16T02:02:02.190Z    6112efb9-12bd-11e8-9d14-d5c0177bc74f    { cmd: 'cat /etc/*-release' }
2018-02-16T02:02:02.400Z    6112efb9-12bd-11e8-9d14-d5c0177bc74f    NAME="Amazon Linux AMI"
VERSION="2017.03"
ID="amzn"
ID_LIKE="rhel fedora"
VERSION_ID="2017.03"
PRETTY_NAME="Amazon Linux AMI 2017.03"
ANSI_COLOR="0;33"
CPE_NAME="cpe:/o:amazon:linux:2017.03:ga"
HOME_URL="http://aws.amazon.com/amazon-linux-ami/"
Amazon Linux AMI release 2017.03END RequestId: 6112efb9-12bd-11e8-9d14-d5c0177bc74f
REPORT RequestId: 6112efb9-12bd-11e8-9d14-d5c0177bc74f  Duration: 209.82 ms Billed Duration: 300 ms     Memory Size: 128 MB Max Memory Used: 22 MB>

的确,除了数十种其他可能的增强功能外,输出格式(主要是CloudWatch Logs的原始格式)可以得到显着改善。 因此,让我们在评论下进行讨论!

翻译自: https://www.javacodegeeks.com/2018/02/inside-lambda-runtime-peek-serverless-lair.html

lambda 匿名内部类

lambda 匿名内部类_Lambda运行时内部:窥视无服务器巢穴相关推荐

  1. Lambda运行时内部:窥视无服务器巢穴

    有没有想过lambda里面是什么样的? 不要怀疑了 让我们找出答案. 自从2014年问世以来,AWS的lambda函数就成为了一个热门话题,在无服务器计算领域开辟了全新的历史. 无状态,零维护,按次执 ...

  2. 服务器崩溃产生什么文件夹,我在我的src目录里有jiffy,但是当我运行时我的牛仔服务器崩溃了...

    我试图克隆Jiffy来验证它是否为JSON编码器.我不得不将priv文件夹复制到/ src中,那么我可以使用cd src && erl > jiffy:encode....我在我 ...

  3. 微软医疗ai_微软ai运行时内部的外观

    微软医疗ai Today, I want to wear my software archeology hat, and share with you one story about the AI e ...

  4. lambda ::_您无法从这里到达那里:Netlify Lambda和Firebase如何使我陷入无服务器的死胡同

    lambda :: [Update: Apparently you can get there from here! That is, if you use firebase-admin instea ...

  5. php软件运行时出现forbidden,wampserver服务器出现Forbidden错误解决方法

    使用wampserver来搭建PHP+MySQL本地环境来做网站时,当我们使用localhost来访问我们自己做的本地网站时,出现了"You don't have permission to ...

  6. 天天都在说,无服务器计算到底是什么?

    过去一年,无服务器计算(serverless)已成为构建和运行现代应用程序和服务的普遍架构替代方案.无服务器应用程序允许开发人员专注于代码,而不是基础架构配置和管理.这加快了研发和发布周期,并允许更好 ...

  7. aws lambda_如何通过在本地模拟AWS Lambda来加速无服务器开发

    aws lambda by John McKim 约翰·麦金(John McKim) 如何通过在本地模拟AWS Lambda来加速无服务器开发 (How you can speed up server ...

  8. aws lambda_AWS Lambda –无服务器编程

    aws lambda AWS Lambda is serverless programming. Serverless programming help to ease out the deploym ...

  9. 理解和选择运行时安全自保护-RASP

    定义RASP 运行时应用自我保护(RASP)是一种嵌入到应用程序或应用程序运行时环境的安全技术,在应用层检查请求,实时检测攻击和滥用. RASP产品通常包含以下功能: 通常在应用程序上下文中进行解包和 ...

最新文章

  1. Glide源码(基于4.8版本)解析
  2. ubuntu笔记:查看Ubuntu的包依赖关系
  3. Angular 学习笔记——service constant
  4. vscode怎么设置默认浏览器?(不成功)
  5. Spark Streaming整合flume实战
  6. 20120907学习笔记
  7. rocketmq 消息 自定义_跟我学RocketMQ[1-4]之消息消费及支持spring
  8. 华为epg-sms 多cp_Linux桌面上的SMS,Linux 25岁生日以及更多开源新闻
  9. 拦截器BridgeInterceptor分析
  10. 关于拉格朗日乘子法和KKT条件
  11. go 语言学习 1. go的特性
  12. 全球10大开放源代码项目
  13. ubuntu 查看和关闭后台程序
  14. Warshall算法代码实现
  15. 微信小程序 柱状图的使用
  16. 8月30日--全天课程--马哥培训
  17. summernote网页编辑器嵌入视频
  18. 临汾市新东方计算机学校,新东方在线走进校园——全国中小学大型公益讲座“怒放青春”走进临汾...
  19. 那些关于前端数据结构与算法
  20. 巴伦的设计与仿真分析(含阻抗匹配)

热门文章

  1. CodeForces - 1189A ----Keanu Reeves
  2. [3.3训练赛]One-Dimensional(矩阵快速幂),Freda的迷宫(无向图强连通分量+并查集),一道防AK好题
  3. LOJ:出纳员问题(差分约束)
  4. jzoj6065-[NOI2019模拟2019.3.18]One?One!【FFT】
  5. P5025-[SNOI2017]炸弹【tarjan,线段树优化建图】
  6. 学习手记(2018.11.30~2019.6.6)——养老时间
  7. P3811-[模板]乘法逆元【线性求逆元】
  8. ssl初一组周六模拟赛【2018.3.24】
  9. ssl1763-观光旅游【最小环,Floyd,dijkstra】
  10. codeforces Cable Connection