IntelliJ + AWS 工具包 + 无服务器应用程序:"Must be able to locate the handler in the project in order to deploy to Lambda"

IntelliJ + AWS Toolkit + Serverless App: "Must be able to locate the handler in the project in order to deploy to Lambda"

我使用 HelloWorld 样式模板应用程序在 IntelliJ 中创建了一个新的无服务器项目。 我设法在我的 AWS 账户中远程构建、部署和 运行 这个应用程序。我什至设法将它与 API 网关集成,使其可以通过互联网访问。

在设置项目时,它有 1 个名为 HelloWorldFunction 的 Lambda 函数。它的处理程序称为 "helloworld.App::handleRequest",我可以在 template.yaml 文件中看到它的配置。

现在我想在同一个应用程序项目中创建另一个 Lambda 函数。因此,在 IntelliJ 中,我遵循以下步骤:

我在这里尝试了不同的名称,例如 "MyNewHandler",或 "helloworld.App::handleRequest"(显然这行不通,因为它已经被 HelloWorldFunction 使用),"helloworld.App2::handleRequest",。 ...等等。

每次我尝试使用其他名称或方式来定义处理程序时,我都会收到此错误消息:

Must be able to locate the handler in the project in order to deploy to Lambda

问题:

我是否需要先在 template.yaml 文件中配置新的 Lambda 函数,或者我需要调用什么 Handler 才能正常工作?

我确信这只是一个菜鸟错误,但我一直在谷歌搜索这个并且没有发现任何人 运行 遇到同样的问题。我还阅读了 AWS 上的处理程序,但它只是在概念层面上描述了它,而不是在有多个 Lambda 的实践中。

感谢您的帮助!

安迪

我在使用 pyCharm 和 Python 时遇到了同样的问题。

我能够使用 <file name without extension>.<function name> 解决它,所以我的文件是 app.py,函数是 lambda_handler,所以我的处理程序是 app.hello_world

请注意,这与您在使用 AWS Web 管理页面时在 "Handler" 字段中看到的内容相同。

我的理解是,您需要先将 app2 class 添加到同一个包中:

点击包名→新建→JavaClass→输入app2

导航到 App2 class 的实现,然后单击装订线中的 lambda 图标。您会注意到 "Create New AWS Lambda" 已添加到下拉列表中:

当您 select 它时,您会看到 "Handler:" 字段已经正确预填充:

我的理解是每个处理程序必须放在一个单独的class中并且处理程序的名称handleRequest是标准的,由框架提供

这是 pycharm 中的样子:

我遇到了同样的问题,但解决方法不同;

  • 退出 WebStorm
  • 删除“.aws-sam”和“.idea”文件夹
  • 再次打开项目。

"更新函数代码" 运行 without "必须能够在项目中找到处理程序才能部署到 Lambda"