SAM CLI 的自定义构建步骤
Custom build step for SAM CLI
当使用 AWS SAM CLI 构建无服务器应用程序时,它神奇地找到了依赖项并将它们全部安装为 "build" 步骤。例如,使用 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
但是,如果我的依赖项超出清单文件中指定的依赖项怎么办?如果我的代码依赖于编译后的二进制文件或静态数据文件怎么办?
我想添加额外的构建步骤,以便当我 运行 sam build
它编译这些文件或适当地复制它们。有什么办法吗?
您需要将此命令包装到另一个自定义命令中,并向其中添加您需要的步骤。
您可以创建包含满足您要求的多个目标的 make 文件。
我以前没用过sam build
,我通常有一个 make 目标用于那个目的。
您可以在这里 bootstrap 模板试一试 https://github.com/healthbridgeltd/nodejs-sam-bootstrap 这比使用 sam build 更有效。
sam build
是 运行 npm install
。因此,如果您将自己的脚本插入 package.json 中的 preinstall
等步骤,sam build
也会执行该步骤。
package.json
{
...
"preinstall": "cp -r ../../../common ./"
...
}
上面的预安装脚本是一个 hack,它将 sam 启动项目的根文件夹中的公共目录嵌入到每个 lambda 处理程序的 zip 中,以便可以从每个处理程序中引用它。
您还应该在本地 lambda 处理程序目录中创建一个符号 link,例如 ln -s ../common ./common
,以便本地和 lambda 使用相同的代码。
当使用 AWS SAM CLI 构建无服务器应用程序时,它神奇地找到了依赖项并将它们全部安装为 "build" 步骤。例如,使用 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
但是,如果我的依赖项超出清单文件中指定的依赖项怎么办?如果我的代码依赖于编译后的二进制文件或静态数据文件怎么办?
我想添加额外的构建步骤,以便当我 运行 sam build
它编译这些文件或适当地复制它们。有什么办法吗?
您需要将此命令包装到另一个自定义命令中,并向其中添加您需要的步骤。
您可以创建包含满足您要求的多个目标的 make 文件。
我以前没用过sam build
,我通常有一个 make 目标用于那个目的。
您可以在这里 bootstrap 模板试一试 https://github.com/healthbridgeltd/nodejs-sam-bootstrap 这比使用 sam build 更有效。
sam build
是 运行 npm install
。因此,如果您将自己的脚本插入 package.json 中的 preinstall
等步骤,sam build
也会执行该步骤。
package.json
{
...
"preinstall": "cp -r ../../../common ./"
...
}
上面的预安装脚本是一个 hack,它将 sam 启动项目的根文件夹中的公共目录嵌入到每个 lambda 处理程序的 zip 中,以便可以从每个处理程序中引用它。
您还应该在本地 lambda 处理程序目录中创建一个符号 link,例如 ln -s ../common ./common
,以便本地和 lambda 使用相同的代码。