AWS Lambda中如何声明CFT依赖关系

59次阅读
没有评论

问题描述

在使用AWS Lambda时,想知道为什么不能在CloudFormation模板中直接声明所需的依赖关系。目前,他需要在GitLab流水线中的附带脚本中自动添加依赖关系。他认为像Google Appengine那样,在顶级模板中声明依赖关系会更方便。以下是他在Google Appengine的app.yaml文件中添加依赖关系的示例,只需声明所需的依赖关系,而AWS似乎没有类似的功能:

libraries:
- name: webapp2
  version: latest
- name: jinja2
  version: latest

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

这是一个实现细节的问题,实际上是来自AWS Lambda产品的实现(您链接的文档提到的)。目前,AWS Lambda的实现要求您在部署包中包含实际的依赖包(根据您引用的文档)。因此,CFT实际上不需要指定此类依赖关系的方式-这将是无用的,因为它无法传递给Lambda。
如果Lambda基础架构最终支持仅列出依赖包的方式,CloudFormation可能会增强以支持在模板中直接指定列表,并以某种方式传递给Lambda。但这只是猜测,这完全取决于AWS的功能路线图 :)
顺便说一句:Google App Engine(GAE)的示例可能有点可疑,因为它只适用于该产品功能的一个小子集(仅适用于python 2.7标准环境的GAE提供的库)。也许更好的参考是用于指定GAE环境的外部/第三方软件包依赖关系的requirements.txtpackage.json(或其他特定语言)文件,以及其他Google Cloud Platform(GCP)产品,包括Cloud Functions(CFs)(这将是与AWS Lambda最接近的GCP产品)。有关CFs中Python,NodeJS 6和NodeJS 8的依赖关系的详细信息,请参阅CFs中的Specifying dependencies

方案2

使用脚本或工具来管理依赖关系可能会增加复杂性,并且需要确保依赖关系正确设置。
另一种方法是编写脚本或使用工具来控制依赖关系。您可以使用requirements.txtpackage.json等文件来指定GAE环境的外部/第三方软件包依赖关系,以及其他Google Cloud Platform(GCP)产品,包括Cloud Functions(CFs)(这将是与AWS Lambda最接近的GCP产品)。
以下是一个示例requirements.txt文件:

webapp2==latest
jinja2==latest

在这个示例中,我们使用requirements.txt文件来指定所需的依赖关系。您可以在其中列出所需的软件包及其版本。然后,您可以使用适当的工具(如pip)来安装这些依赖关系。
请注意,这只是一种方法,具体取决于您的需求和偏好。您可以根据自己的情况选择最适合您的方法。
以上是关于如何在AWS Lambda中声明CFT依赖关系的解决方案。希望对您有所帮助!

正文完