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.

之前需要记住使用此函数构建项目