HandlerNotFound 触发 aws lambda 函数
HandlerNotFound at trigger aws lambda function
我在部署到 AWS Lambda 函数时遇到问题。我为 SQS 队列创建了一个触发器,当我有新消息时,我的触发器 (index.receiver) 会处理该消息。所以,这是我的代码:
index.ts
import receiver from "./sqs/receiver";
exports.receiver = receiver;
sqs/receiver.ts
const receiver: SQSHandler = async (event) => {
//some logic
};
export default receiver;
触发此功能后,我在 AWS CloudWatch 中看到没有任何工作正常并向我抛出此错误:
{
"errorType": "Runtime.HandlerNotFound",
"errorMessage": "index.receiver is undefined or not exported",
"stack": [
"Runtime.HandlerNotFound: index.receiver is undefined or not exported",
" at Object.module.exports.load (/var/runtime/UserFunction.js:144:11)",
" at Object.<anonymous> (/var/runtime/index.js:43:30)",
" at Module._compile (internal/modules/cjs/loader.js:999:30)",
" at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)",
" at Module.load (internal/modules/cjs/loader.js:863:32)",
" at Function.Module._load (internal/modules/cjs/loader.js:708:14)",
" at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:60:12)",
" at internal/main/run_main_module.js:17:47"
]
}
这也是我的项目树:
.serverless
node_modules
sqs
- receiver.ts
index.ts
package.json
serverless.yml
和serverless.yml
service: some-name
provider:
name: aws
runtime: nodejs12.x
region: eu-central-1
apiGateway:
minimumCompressionSize: 1024 # Enable gzip compression for responses > 1 KB
environment:
AWS_NODEJS_CONNECTION_REUSE_ENABLED: 1
# SQS Permission given
iamManagedPolicies:
- 'arn:aws:iam::aws:policy/AmazonSQSFullAccess'
functions:
receiver:
handler: index.receiver
events:
- sqs: <my-sqs-arn>
有人可以告诉我我做错了什么吗?感谢您的帮助!
我解决了这个问题。问题在于,在我的 serverless.yml
中,我这样指向处理程序: handler: index.receiver
但是,当我们使用 Typescript 时,我们应该将它指向 dist/index.receiver
因为 AWS 只能处理 JS 文件,我们也在使用 serverless deploy
.
之前需要记住使用此函数构建项目
我在部署到 AWS Lambda 函数时遇到问题。我为 SQS 队列创建了一个触发器,当我有新消息时,我的触发器 (index.receiver) 会处理该消息。所以,这是我的代码:
index.ts
import receiver from "./sqs/receiver";
exports.receiver = receiver;
sqs/receiver.ts
const receiver: SQSHandler = async (event) => {
//some logic
};
export default receiver;
触发此功能后,我在 AWS CloudWatch 中看到没有任何工作正常并向我抛出此错误:
{
"errorType": "Runtime.HandlerNotFound",
"errorMessage": "index.receiver is undefined or not exported",
"stack": [
"Runtime.HandlerNotFound: index.receiver is undefined or not exported",
" at Object.module.exports.load (/var/runtime/UserFunction.js:144:11)",
" at Object.<anonymous> (/var/runtime/index.js:43:30)",
" at Module._compile (internal/modules/cjs/loader.js:999:30)",
" at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)",
" at Module.load (internal/modules/cjs/loader.js:863:32)",
" at Function.Module._load (internal/modules/cjs/loader.js:708:14)",
" at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:60:12)",
" at internal/main/run_main_module.js:17:47"
]
}
这也是我的项目树:
.serverless
node_modules
sqs
- receiver.ts
index.ts
package.json
serverless.yml
和serverless.yml
service: some-name
provider:
name: aws
runtime: nodejs12.x
region: eu-central-1
apiGateway:
minimumCompressionSize: 1024 # Enable gzip compression for responses > 1 KB
environment:
AWS_NODEJS_CONNECTION_REUSE_ENABLED: 1
# SQS Permission given
iamManagedPolicies:
- 'arn:aws:iam::aws:policy/AmazonSQSFullAccess'
functions:
receiver:
handler: index.receiver
events:
- sqs: <my-sqs-arn>
有人可以告诉我我做错了什么吗?感谢您的帮助!
我解决了这个问题。问题在于,在我的 serverless.yml
中,我这样指向处理程序: handler: index.receiver
但是,当我们使用 Typescript 时,我们应该将它指向 dist/index.receiver
因为 AWS 只能处理 JS 文件,我们也在使用 serverless deploy
.