Как изменить ссылки на AWS лямбда-слой, когда он загружается? - PullRequest
0 голосов
/ 11 апреля 2020

Я использую AWS лямбда-слой, чтобы сохранить некоторые node_modules, а также некоторые из моих собственных вспомогательных функций, которые я сохранил в папке с именем helpers. Из документации AWS я вижу, что для ссылки на моих помощников, которые находятся в слое, я должен сделать

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

Однако в настоящее время в моем коде он имеет вид

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

, и я Я хочу сохранить это так, чтобы я мог работать локально. Есть ли способ сохранить второй путь и изменить его только на первый, когда я загружаю код (я использую aws lambda update-function-code из CLI)?

Ответы [ 2 ]

2 голосов
/ 11 апреля 2020

Вы можете проверить, работаете ли вы на Lambda, а затем запросить соответствующий путь к коду. Например:

const isLambda = !!process.env.LAMBDA_TASK_ROOT;

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

Вы можете автоматизировать эту замену для всей кодовой базы, используя sed или эквивалентный.

1 голос
/ 12 апреля 2020

Вот пакетный сценарий, который я написал (для 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
...