当使用 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
$>
看the official documentation他们很乐意简单地将其视为魔术,并说:
iterates through the functions in your application, looks for a manifest file (such as
requirements.txt
) that contains the dependencies, and automatically creates deployment artifacts that you can deploy to Lambda
但是如果我有一个超出 list 文件中指定的依赖项怎么办?如果我的代码依赖于已编译的二进制文件或静态数据文件怎么办?
我想添加额外的构建步骤,以便在运行
sam build
时它编译这些文件或适本地复制它们。有没有办法做到这一点?
最佳答案
sam build
正在运行 npm install
.因此,如果您将自己的脚本插入到诸如 preinstall
这样的步骤中在 package.json 中,sam build
也将执行该步骤。
包.json
{
...
"preinstall": "cp -r ../../../common ./"
...
}
上面的预安装脚本是一个 hack,它将公共(public)目录嵌入到每个 lambda 处理程序的 zip 中的 sam inited 项目的根文件夹中,以便可以从每个处理程序中引用它。
您还应该在本地 lambda 处理程序目录中创建一个符号链接(symbolic link),例如
ln -s ../common ./common
,以便本地和 lambda 使用相同的代码。
关于amazon-web-services - SAM CLI 的自定义构建步骤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60175691/