为给定项目创建sam模板

sam-template-creator的Python项目详细描述


sam模板创建者

简介

alt text

sam模板创建器帮助您将基础结构设置为aws无服务器项目的代码。 它读取您的项目文件夹并生成一个包含必需的函数、全局变量、环境变量等的sam模板

与一个成熟的框架(如无服务器)相比,这个模板创建者的作用域是有限的。但这也有好处: 该工具是轻量级的,除了iac-yaml之外,不会生成其他文件,而且使用简单。尽管它可能不足以满足非常复杂的 用例,它仍然可以提供一个扩展的起点。

要求

  • python 3.5或更高版本
  • 要扫描的无服务器项目。目前只支持python和go项目。Node和Java的支持计划。

使用指南/操作方法

使用PIP安装工具

pip install sam-template-creator

# or alternatively

pip3 install sam-template-creator

现在,请转到项目的根目录并键入

sam-template-creator --location .

# or with shorthand argument names

sam-template-creator -l .

或者使用任何目录的绝对路径

sam模板创建者--位置/路径/目标/项目

脚本将在项目目录的根目录中创建一个template.yaml文件。检查里面的东西!它可能会指出一些您必须填写的内容。

您还可以传递一些(可选)参数:

  • 语言:默认情况下,工具会猜测项目是用哪种语言编写的。如果找不到正确的语言,或者您希望 运行时(脚本将默认为最新版本),您可以使用此参数。
  • 全局:如果使用,lambdas的内存和超时将全局设置,而不是每个函数设置

创建模板后,您现在应该可以使用

aws cloudformation package --template-file template.yaml --s3-bucket YOUR-BUCKET-NAME --output-template-file outputSamTemplate.yaml
aws cloudformation deploy --template-file outputSamTemplate.yaml --stack-name PICK-A-STACK-NAME --capabilities CAPABILITY_IAM

使用注意事项

重要!sam template creator要求以某种方式组织项目。

目录

如果每个lambda都有自己的目录,那么这个工具将最有效,尽管它也应该能够处理其他项目结构。
将检查包含处理程序及其直接引用的文件的文件,以获取有关所需权限、环境变量等的信息。

如果处理程序文件的文件夹或子文件夹中存在单个zip(对于大多数语言)或可执行文件,则该工具假定此zip包含要上载的代码。

命名约定

巨蟒
  • lambda handler函数的名称应包含单词"handler"。事件应以"event"结尾,上下文应为"context"。 例如def lambda_handler(s3event,context)
  • 如果名称的一部分等于http方法,我们假设您希望将其映射到api网关方法,路径由名称的其余部分表示。 例如,如果处理程序的名称是def put_hello_world_hander(event,context),则函数将映射到put/hello/world
  • 如果lambda是由事件源触发的,那么名称应该反映这一点。 例如,如果s3是源,则事件的名称应包含s3s3 events3u event或…
<5> go
  • 可执行文件的名称应该是handler,除非您的lambda文件夹中有一个名为main的可执行文件。如果是这样,工具将假定 可执行文件有你的羔羊。它将相应地设置handlercodeuri
    例如,如果您的文件夹mylambdadist/main下包含main文件,处理程序将变为main,其中codeuri等于/mylambda/dist/main
  • 如果要将函数映射到api网关方法,lambda处理程序应以单词request结尾,路径和方法应在此单词前面。 例如,func postaddhellorequest(u context.context,event events.apigatewayproxyrequest)error映射到post/add/hello
  • 如果lambda是由事件源触发的,那么名称应该反映出这一点。 例如,如果s3是源,则事件的名称应包含s3,例如:s3 events3u event或…
节点
  • 待办事项
< H5> Java/H5>
  • 待办事项

项目结构

这个项目有三个主要部分

  • reader:包含有助于读取项目中文件的文件。py类读取单个文件并检索 资源和其他配置信息。因为文件根据语言的不同会看起来非常不同,所以它使用策略模式 帮助完成这些特定语言的任务。例如,在处理python时,使用pythonstrategy类。
  • 中间件:这些文件和函数从读取端获取信息并进行转换,添加/删除某些配置,然后 传递给作者。
  • writer:这些文件负责将信息写入yaml。

除了这些文件夹之外,还有一个util文件夹,一个coordinator.py文件,它协调其他文件的工作,还有一个命令行.py, 它包含参数解析器,并在检查输入后调用协调器。

测试

单元测试可以使用python-m unittest运行。一个相对简单的it测试使用tests/it test下的bash脚本test.sh运行。 它需要一个bucket作为参数(用于上载lambda zip)和默认aws凭据

路线图

  • 语言
    • 节点
    • java/LI>
  • 通过检查前一个模板的超时值、env vars等值来增加模板(并可能通知用户找到的值)
  • 强大的错误处理
  • 问问题。看你打电话给迪纳摩,加入模板?生成输出?活动有多少桶?部署模板?为此,请使用"中间件"
  • 在lambdas的位置上有更大的灵活性:搜索更多的文件夹,或者能够指定文件夹结构?
  • Polyglot项目?

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java使用字符而不是字符串的意义   部分匹配长度字符串相似性的java正则表达式   java获取构造函数错误(错误:“(”或“[”)   java@Value注释无法正常工作SpringBoot   java hasKey在响应中没有看到字段   java JavaFX,没有JFXButtons和所有   在Log4j2中,是否可以根据键从记录器中筛选出某些键值对?   如何使用Java中Kafka的消息,从特定偏移量开始   java在单击后存储动态按钮的值   java Android编码:ViewRootImpl$CalledFromErrorThreadException。[Noob]   通过FileChooser保存pdf格式会提示在java中出现第二个对话框   用于空文件的java Spring集成文件标记   java我们应该如何编写get方法,以便私有字段不会超出其预期范围?   java Eclipse产品问题,Juno RequireHandle:org。日食e4。果心服务