在 AWS lambda 中将外部资源加载到 jsdom

问题描述

我在将 jsdom 与 lambda 函数一起使用时遇到问题。

现在我有一个小的 lambda,它注入了一个名为 myValue 的片段:

return new JSDOM(
  `<!DOCTYPE html><html>
      <head>
         <script type="text/javascript" src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
      </head>
      <body><script> console.log('hello world')</script></body>
   </html>`,{ runScripts: "dangerously",url: `https://www.${origin}`,virtualConsole: createVirtualConsole(),resources: "usable" }

当我删除它加载的外部 jquery 资源并执行 myValue 内容时,这按预期工作,但在我添加 jquery 注入的那一刻,我的 lambda 中出现错误

{
  "errorMessage": "2021-04-28T16:02:34.719Z 7rtre1d0-5060-4b9b-993e-5037rxzz25 Task timed out after 14.01 seconds"
}

我知道加载资源需要一段时间,但 14 秒太长了,所以我想知道是否有其他方法可以做到这一点,或者即使我做得对。

我也试过:

const resourceLoader = new jsdom.ResourceLoader({
  proxy: src="https://code.jquery.com/jquery-3.5.1.min.js",strictSSL: false
});

效果不佳。

感谢您的帮助!

解决方法

如果您已将 Lambda 与 VPC 相关联,请确保您的 Lambda 位于公有子网中(可以访问 IGW)或者有一个 NAT 网关可以通过它访问互联网。

见:How do I give internet access to a Lambda function that's connected to an Amazon VPC?