在本地 IntelliJ 中使用 Java 运行 AWS Lambda - 函数调用容器没有响应(Docker 有问题?)

A50*_*01X 5 amazon-web-services docker aws-lambda aws-toolkit

我在运行 AWS Lambda 时收到此错误No response from invoke container for Function。我希望它返回我定义为输出的“hello world”字符串:

错误

我也用这个更简单的 Lambda 函数尝试过,但得到了同样的错误:

public class App implements RequestHandler<String, String> {

    public String handleRequest(final String input, final Context context) {
            return "H";
    }
    
}
Run Code Online (Sandbox Code Playgroud)

我在本地启动 Docker 以使用 Docker 快速启动终端运行此 Lambda:

我的 docker 快速启动终端

我可能还需要在 Docker 中做其他事情吗?

这就是我使用 IntelliJ 插件 AWS Toolkit 创建新的 AWS Lambda 项目的方法:

  1. 文件 -> 新项目:

新项目

并选择以下设置:

设置

  1. 创建的项目有很多错误(无法解析符号“字符串”等)。我能够通过删除 .idea 文件夹来解决错误,然后单击文件 -> Invalidate Caches and Restart

错误

然后项目正确加载,但我没有在我的 App 类旁边看到 Lambda 符号:

缺少 Lambda 符号

  1. 所以我转到 pom.xml,右键单击,然后Import as Maven project. 这有效,我现在看到 Lambda 符号:

带 Lambda 符号

但是我在 AppTest 类中收到一个新错误,当我尝试运行它时,它说找不到应用程序处理程序。5.我通过更改APIGatewayProxyRequestEventRequestHandler“对象”解决了这个问题:

已解决的错误

在此输入图像描述

sma*_*020 3

我从未尝试过以您描述的方式构建和执行 Lambda 函数。就个人而言,我使用 IntelliJ 和 Java Lambda 运行时 API 构建 Lambda 函数,然后使用 Maven 将其打包并使用 AWS 管理控制台进行部署:

https://console.aws.amazon.com/lambda/home

您可以从控制台测试它并在 Cloudwatch 日志中查看输出。这可以正常工作。有关如何使用 Maven 打包 Lambda 函数并使用 AWS 管理控制台部署它的更多信息,请参阅此 AWS 教程:

https://github.com/awsdocs/aws-doc-sdk-examples/tree/master/javav2/usecases/creating_workflows_stepfunctions

如果您按照本教程中指定的方式构建示例 Lambda 函数,则不会出现任何问题:

public class App implements RequestHandler<String, String> {

    public String handleRequest(final String input, final Context context) {
            return "H";
    }
    
}
Run Code Online (Sandbox Code Playgroud)