0

我正在使用 AWS Lambda 层来保留一些 node_modules 以及我自己的一些帮助函数,我将它们存储在一个名为helpers. 从 AWS 文档中,我看到要引用我必须做的层中的助手

require('/opt/layer/helpers/foo.js');

但是目前在我的代码中,我将其作为

require('./helpers/foo.js');

我想保持这种方式,以便我能够在本地运行。有没有办法保留第二条路径,并且仅在我上传代码时将其更改为第一个路径(我aws lambda update-function-code从 CLI 使用)?

4

2 回答 2

2

您可以测试您是否在 Lambda 上运行,然后需要相关的代码路径。例如:

const isLambda = !!process.env.LAMBDA_TASK_ROOT;

const foo = require(isLambda ? '/opt/layer/helpers/foo.js' : './helpers/foo.js');

sed您可以使用或等效方法在您的代码库中自动执行此替换。

于 2020-04-11T18:50:36.613 回答
1

这是我最终编写的批处理脚本(适用于 Windows)。在我的情况下,我所有助手的封闭文件夹称为 /layer/helpers。

:: This batch file redeploys an existing lambda function
echo off
echo WARNING: this will delete any index.js or index.zip you have in the current directory!
pause
set /p toDeploy=Enter lambda name (without the .js): 
powershell -Command "(gc %toDeploy%.js) -replace './helpers', '/opt/layer/helpers' | Out-File -encoding ASCII index.js"
powershell "Compress-Archive index.js index.zip"
aws lambda update-function-code --function-name %toDeploy% --zip-file fileb://index.zip
del index.js
del index.zip
于 2020-04-12T00:08:26.163 回答