使用无服务器框架部署 cube.js 导致错误

Deploying cube.js using serverless framework results in an error

我正在尝试在 aws 上使用无服务器框架部署 cube.js 项目,当我访问由无服务器生成的端点时,它会导致浏览器出现以下错误

Cannot GET /

这是我的 serverless.yml 文件

service: cloud-analytics

provider:
  name: aws
  stage: production
  runtime: nodejs8.10
  iamRoleStatements:
    - Effect: "Allow"
      Action:
        - "sns:*"    
        - "athena:*"
        - "s3:*"
        - "glue:*"
      Resource:
        - "*"
  vpc:
    securityGroupIds:
      - sg-xxxxxxxxx # Your DB and Redis security groups here
    subnetIds:
      - subnet-xxxxxxxxx
  environment:
    CUBEJS_AWS_KEY: ${opt:awsKey}
    CUBEJS_AWS_SECRET: ${opt:awsSecret}
    CUBEJS_AWS_REGION: us-east-1
    CUBEJS_AWS_S3_OUTPUT_LOCATION: ${opt:location}
    REDIS_URL: ${opt:redis_url_with_port}
    CUBEJS_DB_TYPE: athena
    CUBEJS_API_SECRET:XXXXXX
    CUBEJS_APP: "${self:service.name}-${self:provider.stage}"
    NODE_ENV: ${self:provider.stage}
    AWS_ACCOUNT_ID:
      Fn::Join:
        - ""
        - - Ref: "AWS::AccountId"

functions:
  cubejs:
    handler: cube.api
    timeout: 30
    events:
      - http:
          path: /
          method: GET
      - http:
          path: /{proxy+}
          method: ANY
  cubejsProcess:
    handler: cube.process
    timeout: 630
    events:
      - sns: "${self:service.name}-${self:provider.stage}-process"

plugins:
  - serverless-express

我已按照此博客中的步骤设置 NAT https://medium.com/@philippholly/aws-lambda-enable-outgoing-internet-access-within-vpc-8dd250e11e12

Cube.js 文件如下,服务器核心选项

const AWSHandlers = require('@cubejs-backend/serverless-aws');
const AthenaDriver = require('@cubejs-backend/athena-driver');

module.exports = new AWSHandlers({
  externalDbType: 'athena',
  externalDriverFactory: () => new AthenaDriver({
      accessKeyId: process.env.CUBEJS_AWS_KEY,
      secretAccessKey: process.env.CUBEJS_AWS_SECRET,
      region: process.env.CUBEJS_AWS_REGION,
      S3OutputLocation: process.env.CUBEJS_AWS_S3_OUTPUT_LOCATION
  })
});

当我运行端点

https://xxxxx.execute-api.us-east-1.amazonaws.com/production/

由无服务器 api 网关生成 我收到错误

Cannot GET /

在 Cloudwatch 上,我看到正在调用 cubejs lambda,并查看开始和结束请求 ID 的日志。我没有在 cubejsProcess lambda 上看到任何日志。

Where/How我可以调试一下看看问题出在哪里吗?

默认情况下,在生产模式下 Cube.js 禁用开发服务器功能,这就是为什么您在 / 路径下看不到任何 Playground 工作的原因:https://cube.dev/docs/deployment#production-mode. Please use REST API to test your deployment: https://cube.dev/docs/rest-api.