aws-lambda - 使用无服务器使用 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 文件夹
解决方案
所以我最终不得不重新编写我的一些代码。从技术上回答我的问题的问题是我在 serverless.yml 中找到了处理程序选项让我向下走,所以我能够指导构建在 src/ 中查看我的文件
然而,在那之后的另一个问题是我不得不将我所有的 import 语句重新编写为 conts 与 require 语句。即使使用更新的 nodejs 版本,我也无法在 Lambda 上进行导入。可能有一个解决方法,但我还没有找到。
推荐阅读
- amazon-web-services - 我需要什么权限才能在两个不同帐户的两个存储桶之间复制对象?
- amazon-cloudformation - CloudFormation 是否可以通过模板创建 PipeLine 手动审批操作?
- javascript - 为什么我在尝试打开 Materialise Modal 时会收到此错误?
- vue.js - 带有 Web 组件“is”属性的 Vue
- angular - HttpHeaders 使用构造函数实例化与使用 Set
- javascript - 我不知道如何修复我的成绩计算器功能
- php - 将 SQL 查询从单列单值 LIKE 更新为多列单值搜索
- javascript - Javascript移动重定向,页面不断刷新
- python - 如何使用 tkinter after() 一次创建一个矩形?
- python - 如何打开一系列 csv 文件,在文件名中使用修改后的字符串变量进行编辑和重新保存