首页 > 解决方案 > 如何在 AWS Lambda 中将 ICU 数据添加到 Node.js?

问题描述

我的问题类似于现有的问题,但我使用的是 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'

一切都没有成功,lambdas 只是拒绝启动,CloudWatch 中会显示一条日志消息:

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

我在 Google 上几乎没有发现这个问题,这似乎很奇怪,因为它应该关注这么多在 AWS lambda 上构建内部应用程序的人。

标签: node.jsamazon-web-serviceswebpackaws-lambdaicu

解决方案


确保将正确的.dat文件版本部署到由NODE_ICU_DATA. 就我而言,正确的文件是在为我的 lambdasicudt62l.dat使用运行时时。nodejs10.x如果您不node_modules作为 lambda 的一部分进行部署,则可以获取正确的.dat文件并进行部署。

在将一些旧 lambdas 的运行时版本从升级nodejs6.10nodejs10.x. 在我的例子中,文件icudt58l.dat(与 兼容nodejs6.10)被部署到项目根目录中,并且的值NODE_ICU_DATA.(即我的 lambda 执行的目录,相当于/var/task/)。

为了获得兼容的文件,我使用 lambdas 使用的节点版本.dat重新安装了包:full-icu

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

.dat文件的版本对于您的 lambda 使用的运行时版本是正确的,这一点很重要。最初,我犯了只npm i full-icu使用节点版本运行的错误,10.0但这安装了错误版本的.dat文件,我再次收到相同的错误消息。

最后,我将文件复制node_modules/full-icu/icudt62l.dat到项目根目录中并删除旧文件icudt58l.dat,以便它最终在/var/task/lambda 时可以找到它的位置NODE_ICU_DATA=.


推荐阅读