把选项设置为“Edit code inline”,根据你所选择的运行时环境在Web控制台的编辑器中输入以下代码。以下代码分别以Node.js和Python实现了函数的逻辑。
代码清单2-1 函数greetingOnDemand(Node.js实现)
代码清单2-2 函数greetingOnDemand(Python实现)
不论采用什么编程语言来实现,上述代码的组成和执行过程基本上是一致的:
·在函数主体之前,有一段初始化的代码。在对某一函数的多次调用中,AWS Lambda会重复使用同一个容器,容器中函数的初始化代码只会在初次调用时被执行。在初始化部分,你的代码应该是整个过程中仅被执行一次的代码,如打开一个数据库连接,初始化缓存,加载函数需要的配置性信息,等等。
·AWS Lambda的函数是在一个没有任何可视化信息的“无头”环境下执行的。因此,所有运行时都实现了可以方便地向Amazon CloudWatch写入集中日志的方式。Amazon CloudWatch是一种监控和日志服务,可用来管理应用程序的指标、警告和日志,以及应用程序中用到的AWS服务。在Node.js环境下,任何用console.log()写出来的东西都被重定向到CloudWatch Logs;而在Python中,则是重定向print输出的任何内容。
·初始化完成后,函数获取作为事件输入的信息和调用的上下文——两者都是运行时的原生格式:Node.js中采用JavaScript对象,Python中采用字典类型。这样的函数格式可以用于执行所有的调用,我们可以以后再做进一步的配置。
·函数的逻辑非常简单:如果输入事件中包含了“name”键值,name信息会被置入greeting字符串,否则就输出默认的“Hello World!”。
·输出的greeting字符串被写入日志,函数执行完毕返回。
·在Node.js中,我们使用标准的Node.js编程模型中的callback结束函数。在本例中,使用callback(null,data)成功结束函数,并返回greeting字符串对象。如果callback第一个参数不是null,则表示函数遇到执行错误返回,如callback(error)。
·在Python中,函数通过返回正常中止。如果遇到了错误,可以抛出异常。
·输入上下文对象中包含了一些有趣的信息,主要是关于函数的配置和AWS Lambda的执行。例如:你可以检查剩余的调用时间(相对于配置的调用时间上限),有关这部分内容会在后续章节详细讨论。