我一直在使用GRAND堆栈启动器开发应用程序,在克服了许多障碍之后,我终于想要部署它并看到它运行。我的目标是在亚马逊上做到这一切。我的前端服务正确,并且在EC2实例上运行的Neo4j实例。
由于GRAND堆栈启动器使用的是Apollo,因此他们的网站建议使用Serverless。我认为遇到的问题是缺少有关所需文件夹结构的信息。 GRAND堆栈启动器有一个src文件夹,其中的核心文件与package.json一起位于更高的目录中。
Serverless表示要在根目录中创建一个serverless.yml文件,该目录比源目录高一个。它的内容很普通:
# 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文件夹
答案 0 :(得分:1)
所以我最终不得不重做一些代码。从技术上回答了我的问题的问题是,我在serverless.yml中找到了处理程序选项,这让我往下走,所以我能够指导构建以查看src /
中的文件但是,此后的另一个问题是我必须重新处理所有导入语句,以代替使用require语句。即使使用更新的nodejs版本,我也无法在Lambda上使用导入。可能有针对此的修复程序,但我还没有找到。