如何在SAM CLI部署前压缩/混淆AWS Lambda构建输出代码?
可行解决方案
方案1:构建后自定义脚本处理
SAM执行sam build后,会把构建好的函数代码输出到.aws-sam/build目录下的对应函数子目录里。你可以写一个Shell/Node.js/Python脚本,在sam build完成后自动遍历这些函数目录,对源代码做压缩混淆:
- 针对Node.js函数:用
terser这类工具压缩混淆JS文件,替换原文件 - 针对Python函数:用
pyarmor或pyminifier处理源码,生成加密/压缩后的文件替换原文件 - 脚本执行完后,再运行
sam package或sam deploy,此时上传到S3的就是处理后的代码
方案2:在SAM模板中指定自定义构建命令
在template.yaml的每个Lambda函数资源里,通过BuildCommand参数定义构建时要执行的自定义命令,把压缩混淆步骤整合到SAM的构建流程中:
比如Node.js函数的配置:
Resources: MyLambdaFunction: Type: AWS::Serverless::Function Properties: CodeUri: src/my-function/ Runtime: nodejs18.x Handler: index.handler BuildCommand: "npm install --production && npx terser index.js -c -m -o index.js"
这样sam build时,会先执行这个命令完成依赖安装和代码压缩,再把处理后的代码打包到.aws-sam目录。
方案3:预处理代码后再交给SAM打包
先单独写脚本把所有Lambda函数的源代码提前做压缩混淆,输出到一个专门的目录(比如dist/),然后在template.yaml里把每个函数的CodeUri指向处理后的目录,再正常执行sam build和sam deploy即可。
注意:处理代码时要确保混淆后的代码在Lambda运行环境中能正常执行,比如不要误处理依赖包(比如Node.js的node_modules),只针对你自己编写的业务代码做处理;Python工具要选择和Lambda运行时兼容的版本。
内容的提问来源于stack exchange,提问作者Kiran Maniya
相关产品推荐
相关产品推荐

