Amazon web services SAM CLI的自定义生成步骤

Amazon web services SAM CLI的自定义生成步骤,amazon-web-services,aws-sam-cli,Amazon Web Services,Aws Sam Cli,当使用AWS SAM CLI构建无服务器应用程序时,它神奇地定位了依赖项,并将它们全部作为“构建”步骤安装。例如,使用NodeJS应用程序: $> sam build Building resource 'HelloWorldFunction' Running NodejsNpmBuilder:NpmPack Running NodejsNpmBuilder:CopyNpmrc Running NodejsNpmBuilder:CopySource Running NodejsNpmBui

当使用AWS SAM CLI构建无服务器应用程序时,它神奇地定位了依赖项,并将它们全部作为“构建”步骤安装。例如,使用NodeJS应用程序:

$> sam build
Building resource 'HelloWorldFunction'
Running NodejsNpmBuilder:NpmPack
Running NodejsNpmBuilder:CopyNpmrc
Running NodejsNpmBuilder:CopySource
Running NodejsNpmBuilder:NpmInstall
Running NodejsNpmBuilder:CleanUpNpmrc

Build Succeeded

Built Artifacts  : .aws-sam/build
Built Template   : .aws-sam/build/template.yaml

Commands you can use next
=========================
[*] Invoke Function: sam local invoke
[*] Deploy: sam deploy --guided

$>
看着他们高兴地简单地像魔术一样对待它,说它:

迭代应用程序中的函数,查找包含依赖项的清单文件(如
requirements.txt
),并自动创建可部署到Lambda的部署构件

但是,如果我的依赖项超出了清单文件中指定的依赖项,该怎么办?如果我的代码依赖于已编译的二进制文件或静态数据文件,该怎么办


我想添加额外的构建步骤,以便在我运行
sambuild
时,它编译这些文件或适当地复制它们。有什么方法可以做到这一点吗?

您需要将此命令包装到另一个自定义命令中,并向其中添加所需的步骤

您可以创建一个包含多个目标的make文件,以满足您的需求

我以前没有使用过
sambuild
,我通常有一个make目标


您可以在此处尝试使用此引导模板,它比使用sam build更有效。

sam build
正在运行
npm install
。因此,如果您将自己的脚本插入到package.json中的
preinstall
等步骤中,
sambuild
也将执行该步骤

package.json

上面的预安装脚本是一个hack,它将sam inited项目根文件夹中的公共目录嵌入到每个lambda处理程序的zip中,以便可以从每个lambda处理程序引用它

您还应该在本地lambda处理程序目录中创建一个符号链接,如
ln-s../common./common
,以便本地和lambda使用相同的代码

{
  ...
  "preinstall": "cp -r ../../../common ./"
  ...
}