IntelliJ + AWS Toolkit + Serverless App: "必须能够在项目中找到处理程序才能部署到Lambda"

10
我在IntelliJ中使用HelloWorld样式的模板应用程序创建了一个新的无服务器项目。我成功地构建、部署并在我的AWS账户中远程运行了这个应用程序。我甚至成功地将其与API Gateway集成,使其能够通过互联网访问。
当项目设置完成后,它有一个名为HelloWorldFunction的Lambda函数。它的处理程序被称为"helloworld.App::handleRequest",我可以在template.yaml文件中看到对其进行的配置。
现在,我想在同一个应用程序项目中创建另一个Lambda函数。因此,在IntelliJ中,我按照以下步骤操作:
- AWS Explorer > Lambda - 右键单击Lambda - 单击“创建新的AWS Lambda ...” - 输入函数名称(例如MyNewLambdaFunction) - 输入运行时(Java 8)和S3存储桶和IAM角色(一切正常) - 然后我需要输入“Handler”的名称,这就是我的问题所在
我尝试过不同的名称,比如"MyNewHandler"或"helloworld.App::handleRequest"(显然这不起作用,因为它已经被HelloWorldFunction使用),"helloworld.App2::handleRequest"等等。
每次我尝试另一个名称或定义Handler的方法时,我都会收到以下错误消息:
必须能够找到项目中的处理程序才能部署到Lambda
问题:

我需要先在template.yaml文件中配置新的Lambda函数吗?或者我需要如何调用Handler才能使其正常工作?

我确定这只是一个新手错误,但我已经谷歌了一下,没有找到遇到同样问题的人。我也阅读了有关AWS处理程序的内容,但它只是在概念层面上描述了它,并没有在实践中描述有多个Lambda的情况。

感谢任何帮助!

安迪

4个回答

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

点击包名 -> 新建 -> Java类 -> 输入app2

enter image description here

enter image description here

导航到App2类的实现,并单击装订线中的lambda图标。您会注意到"创建新的AWS Lambda"已添加到下拉菜单中:

enter image description here

当您选择它时,您会发现“处理程序:”字段已经正确地预填充:

enter image description here

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

感谢详细的指导 - 我会尝试一下。目前我只是将所有对我的函数的调用打包到了单个处理程序中,但仍需要将其分离。 - AHL
在玩弄项目结构几天后,我有一种直觉,即每个Lambda应该位于单独的Java模块中,因为每个Lambda都是独立编译、打包、发送到S3存储桶并部署的。如果我将多个Lambda处理程序保留在同一类中,则每个Lambda部署将具有所有其他Lambda的已编译代码。它会降低部署速度,并在S3中使用比所需更多的空间。 - AstroSharp

4

我在使用Python的PyCharm时也遇到了同样的问题。

我通过使用<没有扩展名的文件名>.<函数名>来解决,所以我的文件是app.py,函数是lambda_handler,因此我的处理程序是app.hello_world

需要注意的是,在使用AWS Web管理页面时,“处理程序”字段中看到的内容与此相同。


1
太棒了... 应用程序中有两个单独的帮助工具提示,但都没有回答这个基本问题,感谢您! - user7504939
这个答案对于初学者来说可能需要更详细的解释,因为Python和PyCharm显然与Java和IntelliJ不同。我发现,在PyCharm中创建无服务器项目甚至都不是必需的,就可以创建一个或多个Lambda函数,并将其部署到AWS中,在PyCharm中进行本地编辑和测试。通常仍然需要一个应用程序,但创建在其中的函数最终会具有奇怪的名称,并且有时并不需要应用程序,只需要一个或两个函数即可。 - hBrent

1

这是在PyCharm中的样子:

handler name in pycharm


0

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

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

更新函数代码”运行时没有出现“必须能够在项目中找到处理程序才能部署到Lambda”的错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接