设计网站推荐百度贴吧,带搜索的下拉框网站,赣州模板建站开发,广州顺德网站设计lambda 匿名内部类有没有想过lambda里面是什么样的#xff1f; 不要怀疑了 让我们找出答案。 自从2014年问世以来#xff0c;AWS的lambda函数就成为一个热门话题#xff0c;在无服务器计算领域开辟了全新的历史。 无状态#xff0c;零维护#xff0c;按次执行的好东西实际… lambda 匿名内部类 有没有想过lambda里面是什么样的 不要怀疑了 让我们找出答案。 自从2014年问世以来AWS的lambda函数就成为一个热门话题在无服务器计算领域开辟了全新的历史。 无状态零维护按次执行的好东西实际上正在改变即使不连根拔起云计算范式的根源。 当其他玩家例如Google和MS Azure加入游戏时AWS显然是赢家。 好吧抛开说教它到底看起来像一个lambda函数内部 根据AWS专家的说法lambda 由容器技术驱动 确切地说是AWS EC2容器服务ECS 。 因此在这一点上lambda只是一个Docker容器 外部访问受限。 但是我们在容器内运行的功能代码几乎可以无限制地访问它root特权除外包括文件系统内置和安装的命令以及CLI工具系统元数据和统计信息日志等。 对于普通的lambda作者而言它不是很有用但是如果您打算深入研究OS级的内容可能会有用。 显然探索所有这些OS级产品的最简单方法是让CLIshell访问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 NAMEAmazon Linux AMI
VERSION2017.03
IDamzn
ID_LIKErhel fedora
VERSION_ID2017.03
PRETTY_NAMEAmazon Linux AMI 2017.03
ANSI_COLOR0;33
CPE_NAMEcpe:/o:amazon:linux:2017.03:ga
HOME_URLhttp://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.htmllambda 匿名内部类