我一直在 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 文件夹