【发布时间】:2021-06-11 18:17:51
【问题描述】:
所以作为一个借口,我几乎不知道该怎么做。我研究了大约两个小时,通常我会继续前进,但我发现的信息都没有用。我怀疑这与 YAML (serverless.yml) 文件有关,但我不确定。我已经对文件进行了几次更新,因此我将发布初始代码和当前代码,尽管没有任何区别。该代码在开发中完美运行,但在生产中引发错误。你可以看到https://www.evote.space 来复制这个。
当前
myNextApplication:
service: myService
component: "@sls-next/serverless-component@1.18.0"
provider:
name: aws
runtime: nodejs12.x
stage: dev
profile: evote
iam:
role: rolenamegoesherebutnotonstackoverflow
inputs:
domain: "evote.space"
functions:
createuser:
handler: data.createuser
readTable:
handler: data.readTable
resources:
Resources:
usersTable:
Type: AWS::DynamoDB::Table
Properties:
TableName: Users
AttributeDefinitions:
- AttributeName: userHash
AttributeType: N
KeySchema:
- AttributeName: userHash
KeyType: HASH
votersTable:
Type: AWS::DynamoDB::Table
Properties:
TableName: Voters
AttributeDefinitions:
- AttributeName: voterHash
AttributeType: N
KeySchema:
- AttributeName: voterHash
KeyType: HASH
electionsTable:
Type: AWS::DynamoDB::Table
Properties:
TableName: Elections
AttributeDefinitions:
- AttributeName: electionHash
AttributeType: N
KeySchema:
- AttributeName: electionHash
KeyType: HASH
ballotsTable:
Type: AWS::DynamoDB::Table
Properties:
TableName: Ballots
AttributeDefinitions:
- AttributeName: ballotHash
AttributeType: N
KeySchema:
- AttributeName: ballotHash
KeyType: HASH
初始(首次部署时出错)
myNextApplication:
service: myService
component: "@sls-next/serverless-component@1.18.0"
provider:
name: aws
runtime: nodejs12.x
stage: dev
profile: evote
inputs:
domain: "evote.space"
我的代码库非常庞大,由许多页面和组件组成。到目前为止,我所做的只是一个登录功能,但在注册页面上,它调用 api 来返回用户(用于重复电子邮件验证),它返回我们非常熟悉的错误“JSON 中的意外令牌
503 错误 无法满足请求。 与 CloudFront 分配关联的 Lambda 函数无效或没有所需的权限。我们目前无法连接到此应用或网站的服务器。可能有太多流量或配置错误。请稍后再试,或联系应用或网站所有者。 如果您通过 CloudFront 向客户提供内容,则可以通过查看 CloudFront 文档找到解决问题的步骤并帮助防止出现此错误。 由云端(CloudFront)生成 请求 ID:No0_qVJ3gcOpg48rMXqvgyipx4wKWmV-hRewQblZ-loyaaiVJLqGIA==
是的,如果你能帮忙,请帮忙。
编辑: 导致问题的代码如下块
NewUser.getInitialProps = async ({ req }) => {
if (req) {
// this is server side
return {
users: await data.readTable("Users")
};
} else {
// we are client side
const response = await fetch("/api/users");
return { users: await response.json() };
}
};
处理这个的 api 原来是这样的:
import data from "../../../data"
export default async (req, res) => {
console.log("/api/users HIT!");
res.status(200).json(await data.readTable("Users"));
};
但我更改了它以便可以将其标记为 lambda,所以现在它看起来像这样(尽管它没有区别):
import data from "../../../data";
module.exports.read = async (event, context, callback) => {
console.log("/api/users HIT!");
callback(null, {statusCode: 200}).json(await data.readTable("Users"));
}
【问题讨论】:
标签: aws-lambda amazon-cloudfront serverless-framework serverless