首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SAM的自定义构建步骤

SAM的自定义构建步骤
EN

Stack Overflow用户
提问于 2020-02-11 18:59:15
回答 2查看 2.7K关注 0票数 5

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

代码语言:javascript
复制
$> 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的部署构件。

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

我想添加额外的构建步骤,这样当我运行sam build时,它会编译这些文件或适当地复制它们。有办法这样做吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-07 16:13:28

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

package.json

代码语言:javascript
复制
{
  ...
  "preinstall": "cp -r ../../../common ./"
  ...
}

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

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

票数 5
EN

Stack Overflow用户

发布于 2020-02-15 09:36:02

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

您可以使用满足您的需求的多个目标创建一个make文件。

我以前没有使用过sam build,我通常有一个目标。

您可以尝试使用这个引导模板( https://github.com/healthbridgeltd/nodejs-sam-bootstrap ),它比使用sam更有效。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60175691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档