使用无服务器部署带有 GRAND 堆栈的 Apollo 的问题

Issues deploying Apollo with GRAND stack using Serverless

我一直在 GRAND stack starter 中开发一个应用程序,在克服了许多障碍之后,我终于想部署它并查看它 运行。我的目标是在亚马逊上完成这一切。我的前端服务正常,EC2 实例上有一个 Neo4j 实例 运行ning。

由于 GRAND stack starter 使用的是 Apollo,因此他们的网站建议使用 Serverless。我认为 运行 遇到的问题是缺少有关所需文件夹结构的信息。 GRAND stack starter 有一个 src 文件夹,核心文件位于其中 package.json 位于更高的目录中。

Serverless 说要在根目录下创建一个serverless.yml 文件,我的目录比source 高一个目录。它的内容是 运行-of-the-mill:

# serverless.yml
service: apollo-lambda
provider:
  name: aws
  runtime: nodejs6.10
  region: us-west-2
  stage: production
functions:
  graphql:
    # this is formatted as <FILENAME>.<HANDLER>
    handler: graphql.graphqlHandler
    events:
    - http:
        path: graphql
        method: post
        cors: true

运行 serverless deploy 确实成功打包了文件,将它们推送到 S3 存储桶并将其添加到 Lambda。它重约 10mb。但是,当我在 AWS Lambda 中并尝试 运行 对创建的 Lambda 函数进行测试时,它显示 "Cannot find module '/var/task/graphql".

感觉无法访问我的node_modules。有些人在打包的 zip 文件中不小心有一个文件夹将所有内容都包裹起来,但是 Serverless 生成的 apollo-lambda.zip 并没有这样做。我可以很好地看到我的根结构。

在过去的两天里,我花了很多时间来解决我认为首先是 502,然后是 403 的错误,试图找出我忘记做某事的地方,直到我到了这一点。任何帮助将不胜感激。

坦率地说,我只是不确定部署时我的文件夹结构应该是什么样子。如果我在 src 文件夹中移动 serverless.yml,它不会有 package.json 或 node_modules 文件夹

所以我最终不得不重新编写一些代码。从技术上回答我的问题的问题是,我在 serverless.yml 中找到了处理程序选项,让我找到了路径,因此我能够指示构建在 src/

中查看我的文件

然而,此后的另一个问题是我不得不重新处理我所有的 import 语句以改为使用 require 语句。即使使用更新的 nodejs 版本,我也无法在 Lambda 上进行导入。可能有解决此问题的方法,但我还没有找到。