首页 > 解决方案 > 使用无服务器使用 GRAND 堆栈部署 Apollo 的问题

问题描述

我一直在 GRAND 堆栈启动器中开发一个应用程序,在克服了许多障碍之后,我终于想部署它并看到它运行。我的目标是在亚马逊上完成这一切。我的前端服务正确,并且 Neo4j 实例在 EC2 实例上运行。

由于 GRAND 堆栈启动器使用的是 Apollo,因此他们的网站建议使用无服务器。我认为我遇到的问题是缺乏有关所需文件夹结构的信息。GRAND 堆栈启动器有一个 src 文件夹,其中核心文件与 package.json 位于更高的目录中。

Serverless 说要在根目录下创建一个 serverless.yml 文件,我的目录比 source 高一个目录。它的内容是普通的:

# 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

运行无服务器部署确实可以成功打包文件,将它们推送到 S3 存储桶并将其添加到 Lambda。它的重量约为 10mb。但是,当我在 AWS Lambda 中并尝试对创建的 Lambda 函数运行测试时,它显示“找不到模块 '/var/task/graphql”。

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

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

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

标签: aws-lambdagraphqlserverlessaws-serverlessgrandstack

解决方案


所以我最终不得不重新编写我的一些代码。从技术上回答我的问题的问题是我在 serverless.yml 中找到了处理程序选项让我向下走,所以我能够指导构建在 src/ 中查看我的文件

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


推荐阅读