Cube.js 后端的错误继续等待问题

Geo*_*rge 3 javascript cube.js

我在连接到 AWS 无服务器上的 cube.js 后端并在前端仪表板中执行 /cubejs-api/v1/load 请求时遇到了一些问题。我不断得到{"error":"Continue wait"}而不是返回结果。我正在遵循 react-dashboard 指南进行身份验证,但使用后端 cube.js 无服务器 AWS 模板进行部署。这是我的主要 cube.js 文件的样子。:

const AWSHandlers = require('@cubejs-backend/serverless-aws');
const PostgresDriver = require('@cubejs-backend/postgres-driver');
const fs = require("fs");
const jwt = require("jsonwebtoken");
const jwkToPem = require("jwk-to-pem");
const jwks = JSON.parse(fs.readFileSync("jwks.json"));
const _ = require("lodash");

module.exports = new AWSHandlers({
  checkAuth: async (req, auth) => {
    const decoded = jwt.decode(auth, { complete: true });
    const jwk = _.find(jwks.keys, x => x.kid === decoded.header.kid);
    const pem = jwkToPem(jwk);
    req.authInfo = jwt.verify(auth, pem);
  },
  externalDbType: 'postgres',
  externalDriverFactory: () => new PostgresDriver({
    host: process.env.CUBEJS_EXT_DB_HOST,
    database: process.env.CUBEJS_EXT_DB_NAME,
    port: process.env.CUBEJS_EXT_DB_PORT,
    user: process.env.CUBEJS_EXT_DB_USER,
    password: process.env.CUBEJS_EXT_DB_PASS,
  })
});
Run Code Online (Sandbox Code Playgroud)

我最初没有正确设置 redis URL,并在将 redis:// 扩展名添加到 serverless.yml 文件之前修复了与 redis 的连接以解决该问题,因此我知道这不是 redis 连接问题。我假设还有一些其他问题。

cubejs 进程函数根本没有日志。我已经根据部署站点上的指南设置了 NAT 网关和子网,以便每个区域都有 1 个子网,仅用于 lambda,并且它们已添加到创建的新 NAT 网关和 2 个函数中,因此它们具有互联网。

可能是什么问题?我是否配置错误或需要更改某些内容?

小智 5

@cubejs-backend/serverless使用互联网连接来访问消息传递 API 以及 VPC 内的 Redis 来管理队列和缓存。

此类连续Continue wait消息通常意味着Internet 连接Redis 连接存在问题。如果是 Redis,您通常会在 5 分钟后cubejscubejsProcess函数中看到超时。如果是互联网连接,您将永远不会在cubejsProcess功能中看到任何查询处理日志。

  • 谢谢帕维尔!这确实是 lambda 函数的互联网连接问题。对于任何未来的用户,您必须确保 NAT 网关连接到公共子网(具有到互联网网关的路由),然后您的私有子网应指向 NAT 网关。另请确保您的 lambda 函数选择了自定义子网,而不是直接连接到 Internet 网关的默认子网。 (4认同)