AWS Lambda получает доступ к модулям узлов из zip-файла, созданного на машине Windows - PullRequest
0 голосов
/ 25 апреля 2020

Я пишу AWS Lambda, используя среду выполнения NodeJS12.x. Это довольно просто. Он отправляет электронное письмо через почтовую марку. Я знаю, что SES является альтернативой, я решил не go этот маршрут здесь.

const postmark = require("postmark");
const postmarkClient = new postmark.ServerClient(process.env.POSTMARK_TOKEN);

exports.handler = function (event, context, callback) {
  postmarkClient.sendEmail({
    From: "some@email.address",
    To: "different@email.address",
    Subject: "My emails subject",
    TextBody: "My emails text body"
  });
}

Загруженная структура zip выглядит примерно так:

lambda.zip:
- node_modules/
-- postmark/
-- axios/
-- other-modules/
- index.js
- package.json

Когда я загружаю этот zip с моей машины Windows и тестирование лямбды, он выдает мне эту ошибку в моих журналах CloudWatch:

Ошибка: не удается найти модуль './node_modules/postmark'\nRequire stack: \ n - /var/task/index.js\n- /var/runtime/UserFunction.js\n- /var/runtime/index.js

Круто. Я провел добрый старый день поиска в Google и, между прочим, наткнулся на еще один ответ Переполнение стека , в котором было исправление аналогичной проблемы в системе linux. Octopus предложил мне убедиться, что все файлы являются исполняемыми, и что я владею ими, выполнив следующие команды:

sudo chmod +x *.js -R
sudo chown myself.myself * -R
zip -r lambda.zip .

Поэтому я развернул свою верную подсистему Linux для Windows (потому что у нас это сейчас есть), клонировал мой репозиторий, выполнил команды, развернул этот новый zip-файл, мою AWS лямбда-функцию, и протестировал. Вуаля, почтовый штемпель доставил мне на почту письмо.

Отлично. Windows снова проигрывает Linux. Я на этом поезде. Но я все еще работаю в Windows и мне нужно разрабатывать и развертывать свои функции в этой среде.

У меня два вопроса:

  1. Что мне нужно изменить, чтобы повторить эти Linux действия на стороне Windows моего аппарата?
  2. Зачем нужны эти действия?

1 Ответ

0 голосов
/ 25 апреля 2020

Оказывается, инструмент архивации, который я использовал на Windows, работал не так, как это делал нативный инструмент. Я использовал модуль узла с именем jszip-cli для архивирования своих элементов. Однажды переключившись на приведенную ниже команду PowerShell (которую я нашел здесь ), лямбда начала нормально работать:

powershell.exe -nologo -noprofile -command "& { Add-Type -A 'System.IO.Compression.FileSystem'; [IO.Compression.ZipFile]::ExtractToDirectory('foo.zip', 'bar'); }"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...