Cube.js 在无服务器环境中超时
Cube.js timing out in serverless environment
我一直在按照 https://cube.dev/docs/deployment#express-with-basic-passport-authentication 上的指南将 Cube.js 部署到 Lambda。我让它与 Athena 数据库一起工作,使得 /meta
端点成功运行并且 returns 模式。
但是,当尝试在 Lambda 中查询 Athena 数据时,所有请求都会导致 504 网关超时。检查 CloudWatch 日志我看到一个一致的错误:
/bin/sh: hostname: command not found
知道这可能是什么吗?
这是我的 server.yml:
service: tw-cubejs
provider:
name: aws
runtime: nodejs12.x
iamRoleStatements:
- Effect: "Allow"
Action:
- "sns:*"
# Athena permissions
- "athena:*"
- "s3:*"
- "glue:*"
Resource:
- "*"
# When you uncomment vpc please make sure lambda has access to internet: https://medium.com/@philippholly/aws-lambda-enable-outgoing-internet-access-within-vpc-8dd250e11e12
vpc:
securityGroupIds:
# Your DB and Redis security groups here
- ########
subnetIds:
# Put here subnet with access to your DB, Redis and internet. For internet access 0.0.0.0/0 should be routed through NAT only for this subnet!
- ########
- ########
- ########
- ########
environment:
CUBEJS_AWS_KEY: ########
CUBEJS_AWS_SECRET: ########
CUBEJS_AWS_REGION: ########
CUBEJS_DB_TYPE: athena
CUBEJS_AWS_S3_OUTPUT_LOCATION: ########
CUBEJS_JDBC_DRIVER: athena
REDIS_URL: ########
CUBEJS_API_SECRET: ########
CUBEJS_APP: "${self:service.name}-${self:provider.stage}"
NODE_ENV: production
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
根据变更日志this issue should have been fixed in 0.10.59检查您正在使用的 cube.js 版本。
这很可能取决于 cube.js 的依赖性,假设它将 运行 所在的所有环境都能够 运行 hostname
shell命令(看起来它正在使用 node-machine-id.
即使这个 hostname
错误消息也在日志中,但这不是问题的原因。
您很可能遇到 .
中描述的问题
@cubejs-backend/serverless 使用互联网连接访问消息传递 API 以及 VPC 内的 Redis 以管理队列和缓存。
其中之一在您的环境中不起作用。
此类超时通常意味着 internet connection or with Redis connection 存在问题。如果是 Redis,您通常会在 cubejs
和 cubejsProcess
函数中看到 5 分钟左右的超时。如果是互联网连接,您将永远不会在 cubejsProcess
函数中看到任何查询处理日志。
我一直在按照 https://cube.dev/docs/deployment#express-with-basic-passport-authentication 上的指南将 Cube.js 部署到 Lambda。我让它与 Athena 数据库一起工作,使得 /meta
端点成功运行并且 returns 模式。
但是,当尝试在 Lambda 中查询 Athena 数据时,所有请求都会导致 504 网关超时。检查 CloudWatch 日志我看到一个一致的错误:
/bin/sh: hostname: command not found
知道这可能是什么吗?
这是我的 server.yml:
service: tw-cubejs
provider:
name: aws
runtime: nodejs12.x
iamRoleStatements:
- Effect: "Allow"
Action:
- "sns:*"
# Athena permissions
- "athena:*"
- "s3:*"
- "glue:*"
Resource:
- "*"
# When you uncomment vpc please make sure lambda has access to internet: https://medium.com/@philippholly/aws-lambda-enable-outgoing-internet-access-within-vpc-8dd250e11e12
vpc:
securityGroupIds:
# Your DB and Redis security groups here
- ########
subnetIds:
# Put here subnet with access to your DB, Redis and internet. For internet access 0.0.0.0/0 should be routed through NAT only for this subnet!
- ########
- ########
- ########
- ########
environment:
CUBEJS_AWS_KEY: ########
CUBEJS_AWS_SECRET: ########
CUBEJS_AWS_REGION: ########
CUBEJS_DB_TYPE: athena
CUBEJS_AWS_S3_OUTPUT_LOCATION: ########
CUBEJS_JDBC_DRIVER: athena
REDIS_URL: ########
CUBEJS_API_SECRET: ########
CUBEJS_APP: "${self:service.name}-${self:provider.stage}"
NODE_ENV: production
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
根据变更日志this issue should have been fixed in 0.10.59检查您正在使用的 cube.js 版本。
这很可能取决于 cube.js 的依赖性,假设它将 运行 所在的所有环境都能够 运行 hostname
shell命令(看起来它正在使用 node-machine-id.
即使这个 hostname
错误消息也在日志中,但这不是问题的原因。
您很可能遇到
@cubejs-backend/serverless 使用互联网连接访问消息传递 API 以及 VPC 内的 Redis 以管理队列和缓存。 其中之一在您的环境中不起作用。
此类超时通常意味着 internet connection or with Redis connection 存在问题。如果是 Redis,您通常会在 cubejs
和 cubejsProcess
函数中看到 5 分钟左右的超时。如果是互联网连接,您将永远不会在 cubejsProcess
函数中看到任何查询处理日志。