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 中,我遵循以下步骤:
- AWS 资源管理器 > Lambda
- 右键单击 Lambda
- 点击"Create new AWS Lambda ..."
- 输入函数名称(例如 MyNewLambdaFunction)
- 输入 运行时间 (Java 8) 和 S3 存储桶以及 IAM 角色(一切正常)
- 然后我需要输入 "Handler" 的名称,这就是我的问题开始的地方
我在这里尝试了不同的名称,例如 "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"
我使用 HelloWorld 样式模板应用程序在 IntelliJ 中创建了一个新的无服务器项目。 我设法在我的 AWS 账户中远程构建、部署和 运行 这个应用程序。我什至设法将它与 API 网关集成,使其可以通过互联网访问。
在设置项目时,它有 1 个名为 HelloWorldFunction 的 Lambda 函数。它的处理程序称为 "helloworld.App::handleRequest",我可以在 template.yaml 文件中看到它的配置。
现在我想在同一个应用程序项目中创建另一个 Lambda 函数。因此,在 IntelliJ 中,我遵循以下步骤:
- AWS 资源管理器 > Lambda
- 右键单击 Lambda
- 点击"Create new AWS Lambda ..."
- 输入函数名称(例如 MyNewLambdaFunction)
- 输入 运行时间 (Java 8) 和 S3 存储桶以及 IAM 角色(一切正常)
- 然后我需要输入 "Handler" 的名称,这就是我的问题开始的地方
我在这里尝试了不同的名称,例如 "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"