我正在尝试使用无服务器在 AWS 中部署 REST API。节点版本 14.17.5。
我的目录结构:
当我成功部署上述内容时,我在尝试访问 api 时收到以下错误。
2021-09-28T18:32:27.576Z undefined ERROR Uncaught Exception {
"errorType": "Error",
"errorMessage": "Must use import to load ES Module: /var/task/lambda.js\nrequire() of ES modules is not supported.\nrequire() of /var/task/lambda.js from /var/runtime/UserFunction.js is an ES module file as it is a .js file whose nearest parent package.json contains \"type\": \"module\" which defines all .js files in that package scope as ES modules.\nInstead rename lambda.js to end in .cjs, change the requiring code to use import(), …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Vercel next.js 中的新边缘函数,但它在生产中不起作用,总是给出 404 错误。
我按照这个例子做了,但没有任何效果。
也许是因为我使用的是 i18n?
我的_middleware.js文件如下所示:
import {NextResponse } from 'next/server'
export default function middleware(req) {
const { pathname } = req.nextUrl
let hostname = req.headers.get('host')
if (
!pathname.includes('.') && // exclude all files in the public folder
!pathname.startsWith('/api') // exclude all API routes
) {
if (
!hostname.includes('example.vercel.app') &&
hostname !== 'example.com' &&
hostname !== 'localhost:3000'
) {
return NextResponse.rewrite(`/_sites/${hostname}${pathname}`)
}
}
}
Run Code Online (Sandbox Code Playgroud)
在页面下我使用这个结构:
/pages
/_sites
[sites]
index.js
Run Code Online (Sandbox Code Playgroud)
请帮我找到解决方案。
我有以下问题...事实证明我无法通过 Nodejs 的无服务器框架中的无服务器离线插件在本地测试我的 aws lambda 函数。无法执行简单的 GET 请求。
我可以使用serverless deploy命令部署到 aws lambda,但为了团队获得更好的开发体验,我们需要使用 serverless-offline 进行本地部署,我遵循了本指南https://fauna.com/blog/develop-using-serverless -offline,但是当我在成功运行命令后执行简单的获取请求时卡住了serverless offline。serverless offline这是我成功
运行时得到的
但是当我通过邮递员对链接执行获取请求时,http://localhost:3000/出现以下错误
它基本上说找不到节点:url 模块,但我做了 npm install url,但仍然抛出同样的错误。我将在下面插入项目树和文件:
处理程序.js
//"use strict";
console.log("AJAJAJAJAJAJAJAJAJAAJAJ");
console.log("Printing module");
console.log(module.exports);
module.exports.hello = async (event) => {
console.log("whaaaaat");
return {
statusCode: 200,
body: JSON.stringify(
{
message: "Go Serverless v3.0! Your function executed successfully!",
input: event,
},
null,
2
),
};
};
Run Code Online (Sandbox Code Playgroud)
无服务器.yml
org: ortizjorge97
app: aws-node-http-api-project
service: aws-node-http-api-project
frameworkVersion: '3' …Run Code Online (Sandbox Code Playgroud) node.js aws-lambda serverless-framework serverless serverless-offline
我已经使用 Stripe 设置了一个 Webhook,它在触发时调用无服务器函数。
该函数的目的是在调用时更新我的数据库中的条目,表明用户已注册高级帐户。
当我在本地运行它时,网络钩子工作得很好。它触发 API、更新用户并处理付款。
然而,当它上线运行时,我不断收到 308 错误:
重定向到 my-app-url.com
这是我的函数的代码:
import { buffer } from "micro"
import { createClient } from "@supabase/supabase-js";
require("dotenv").config();
const stripe = require("stripe")(process.env.STRIPE_LIVE_KEY)
const endpointSecret = process.env.STRIPE_WEBHOOK_SECRET
const supabaseUrl = process.env.REACT_APP_SUPABASE_URL
const supabaseAnonKey = process.env.REACT_APP_SUPABASE_ANON_KEY
const supabase = createClient(supabaseUrl, supabaseAnonKey)
module.exports = async (req, res) => {
const signature = req.headers["stripe-signature"]
const reqBuffer = await buffer(req)
let event
try {
event = stripe.webhooks.constructEvent(reqBuffer, signature, endpointSecret)
} catch (err) {
console.log(err)
return res.status(400).send(`Webhook error: …Run Code Online (Sandbox Code Playgroud) 是否有明确的方法来识别"冷启动"?在Lambda本身的运行时,还是通过日志?我知道冷启动的特点是运行时间更长,我实际上可以看到,但我正在寻找一种明确的切割方式.如果重要的话,我正在使用Node.js.
更新:对于两个用例,下面有两个很好的答案: - 在lambda运行时识别冷启动. - 从CloudWatch日志中识别冷启动.
我正在使用nodejs,无服务器和AWS dynamodb。我试图创建一个lambda,在其中调用API,获取数据(1000条记录),现在,我想将此数据插入我的dynamodb中。
我为此使用batchWrite并通过创建每个25个json对象的存储桶来使用它。但我收到一个错误:
AccessDeniedException: <Username> is not authorized to perform dynamodb BatchWriteItem on resource <table-name>
当我不使用batchWrite和单独的PUT操作执行相同操作时,它可以正常工作(但我需要使用批处理,因为这会导致吞吐量超出错误)。
我已将AWS中的所有管理权限授予了我与无服务器一起使用的用户。
amazon-web-services node.js amazon-dynamodb aws-lambda serverless
我已经搜寻了很多东西,无法在我的一生中陷入无服务器状态,无法设置一个dynamodb触发器。
我用过:
- stream:
type: dynamodb
batchSize: 100
enabled: true
arn:
Fn::GetAtt:
- MyDynamoDbTable
- StreamArn
Run Code Online (Sandbox Code Playgroud)
我尝试了一个硬编码的arn,但没有发生任何可以在aws控制台中看到的事件。我是无服务器新手。如果您有任何指针,请发表。
我有两个无服务器脱机“服务器”,它们需要同时在本地运行。
因此,我需要更改其中一台服务器的端口。
我使用Visual Studio Code调试器运行服务器。服务器的配置位于launch.json文件中。
如何更改无服务器脱机应用程序的端口,以便可以使用VS Code调试器与另一个无服务器脱机应用程序并行运行?
port node.js visual-studio-code serverless serverless-framework-offline
我有一个错误代码存储限制,超出了在AWS中部署无服务器应用程序的范围。总大小409 B.
错误消息显示:
发生错误:HelloLambdaFunction-超出代码存储限制。(服务:AWSLambda;状态代码:400;错误代码:CodeStorageExceededException;请求ID:...)
我正在尝试像本文一样访问AWS SSM参数存储。我已经在本地测试过lambda函数,它可以按预期工作。但是,当推送到AWS时,lambda在尝试检索配置时会失败;它超时:
{
"errorMessage": "2018-09-02T04:55:49.096Z 71a5006a-ae6c-11e8-9322-313ba5e28048 Task timed out after 6.01 seconds"
}
Run Code Online (Sandbox Code Playgroud)
我已将以下权限添加到serverless.yml。我已尽可能不受限制地尝试查找错误的位置。另外,该参数只是一个字符串,因此它不使用KMS。
service: pwaer-messages-service
provider:
name: aws
runtime: nodejs8.10
vpc:
securityGroupIds:
- sg-222f126f
subnetIds:
- subnet-756aef12
- subnet-130f8f3d
environment:
NODE_ENV: ${opt:stage, 'dev'}
iamRoleStatements:
- Effect: 'Allow'
Action: 'ssm:**'
Resource:
- 'Fn::Join':
- ':'
-
- 'arn:aws:ssm'
- Ref: 'AWS::Region'
- Ref: 'AWS::AccountId'
- 'parameter/*'
functions:
receiveText:
handler: dist/receive.handler
events:
- http:
path: sms/parse
method: post
Run Code Online (Sandbox Code Playgroud)
我想念什么?
amazon-web-services aws-lambda serverless-framework serverless
serverless ×10
aws-lambda ×5
node.js ×5
vercel ×2
next.js ×1
port ×1