Как добавить данные ICU в Node.js в AWS Lambda? - PullRequest
0 голосов
/ 30 апреля 2019

Мой вопрос похож на существующий , но я использую webpack и поэтому даже не имею директории "node_modules".

Я все еще пробовал следующие настройки переменных среды без успеха:

NODE_ICU_DATA: 'node_modules/full-icu'
NODE_ICU_DATA: '/var/task/node_modules/full-icu/icudt58l.dat'
NODE_ICU_DATA: '/var/task/node_modules/full-icu/icudt60l.dat'

Все безуспешно, лямбды просто отказываются запускаться, и в CloudWatch отображается сообщение журнала:

/var/lang/bin/node: could not initialize ICU (check NODE_ICU_DATA or --icu-data-dir parameters)

Я нашел очень мало об этой проблеме в Google, что кажется любопытным, учитывая, что это должно касаться многих, которые создают внутренние приложения на AWS lambda.

1 Ответ

0 голосов
/ 16 мая 2019

Убедитесь, что вы развертываете правильную версию файла .dat в каталог, определенный NODE_ICU_DATA. В моем случае правильный файл был icudt62l.dat при использовании времени выполнения nodejs10.x для моих лямбд. Если вы не развертываете node_modules как часть своей лямбды, вы можете взять правильный файл .dat и развернуть его.

Я столкнулся с тем же сообщением об ошибке при обновлении версии времени выполнения некоторых старых лямбд с nodejs6.10 до nodejs10.x. В моем случае файл icudt58l.dat (совместимый с nodejs6.10) был развернут в корне проекта, а значение NODE_ICU_DATA было . (т. Е. Каталог, в котором выполняется моя лямбда, эквивалентный /var/task/).

Чтобы получить совместимый файл .dat, я переустановил пакет full-icu, используя версию узла, используемую лямбдами:

npx -p node@10.x npm i full-icu

Важно, чтобы версия файла .dat была правильной для той версии времени выполнения, которую используют ваши лямбды . Первоначально я сделал ошибку, просто запустив npm i full-icu с использованием версии узла 10.0, но это установило неверную версию файла .dat, и я только что получил то же сообщение об ошибке снова.

Наконец, я скопировал файл node_modules/full-icu/icudt62l.dat в корень проекта и удалил старый icudt58l.dat так, чтобы он оказался в /var/task/, где лямбда может найти его, когда NODE_ICU_DATA=..

...