【问题标题】:Unable to understand which Java SDK to use when developing AWS Lambda Function在开发 AWS Lambda 函数时无法理解使用哪个 Java 开发工具包
【发布时间】:2016-12-29 23:03:59
【问题描述】:

当我学习部署 AWS Lambda 函数的教程时,我在它的示例中看到它使用了一个包含 Speechlet 接口的 AWS Java 开发工具包。

这是示例的屏幕截图:

而且官方文档还说我这里应该使用 Speechlet 接口:https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/handling-requests-sent-by-alexa

但很遗憾,当我安装 AWS Toolkit for Eclipse 时,它​​的工具包中并没有这样的接口。我还从其官方网站下载了 AWS Java SDK,但找不到 Speechlet 接口。

因此,我再次搜索了一些关于如何使用 java 创建 Lambda 函数的教程,然后我想出了这个:http://docs.aws.amazon.com/toolkit-for-eclipse/v1/user-guide/lambda-tutorial.html

本教程使用没有 Speechlet 接口的 Java SDK!这真的让我很困惑,因为在它的其他文档中清楚地声明它有一个 Speechlet 接口,而现在它没有。我不知道如何继续。

【问题讨论】:

    标签: java amazon-web-services aws-lambda


    【解决方案1】:

    您的 AWS Lambda 函数需要在 Java 中支持的最低功能是拥有一个实现具有以下签名的方法的类:

    outputType handler-name(inputType input) {
       ...
    }
    

    如果您的签名看起来像这样,则不需要第三方库。你可以有一个看起来像这样的 Lambda 处理程序,它会正常工作。

    package LambdaExample;
    
    public class Hello {
        public String lambdaHandler(String name) {
            return String.format("Hello %s!", name);
        }
    }
    

    在不平凡的使用中,您可能会看到看起来更像这样的处理程序签名:

    outputType handler-name(inputType input, Context context) {
       ...
    }
    

    Context object 可用于检索有关您的 Lambda 处理程序的信息,以及可用于将有关您的处理程序的信息记录到 Cloudwatch 的记录器。

    Context 类型在 com.amazonaws.services.lambda.runtime.Context 中定义,aws-lambda-java-core 提供,这是 AWS 发布的一组库的一部分,用于使用 Java/JVM 语言与 Lambda 一起工作。 aws-lambda-java-core 独立于适用于 Java 的 AWS 开发工具包。

    您遇到的似乎是使用非常特定的资源的情况。您的图像显示了用于构建自定义 Alexa 技能并将其部署到 Lambda 的代码。如果您正在构建 Alexa 技能,那么您还需要包含 alexa-skills-kit SDK,它提供了您看到的 Speechlet 界面。 Alexa Skills Kit SDK 也独立于 AWS SDK for Java。

    假设您的项目使用 Maven 进行项目管理/依赖项,将以下内容添加到 <dependencies> 部分应该可以让您使用 Lambda 和 Alexa:

    <dependency>
      <groupId>com.amazon.alexa</groupId>
      <artifactId>alexa-skills-kit</artifactId>
      <version>1.2</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>com.amazonaws</groupId>
      <artifactId>aws-lambda-java-core</artifactId>
      <version>1.1.0</version>
    </dependency>
    <dependency>
      <groupId>com.amazonaws</groupId>
      <artifactId>aws-lambda-java-events</artifactId>
      <version>1.3.0</version>
    </dependency>
    <dependency>
      <groupId>com.amazonaws</groupId>
      <artifactId>aws-lambda-java-log4j</artifactId>
      <version>1.0.0</version>
    </dependency>
    

    【讨论】:

    • 您好,感谢您对此的回答 +1。我有一份此技能包 SDK 的副本。但是,我似乎没有要导入的 Jar 文件。我尝试从技能包 SDK 中复制粘贴整个源代码,导入时出现一堆错误,一些导入在本地找不到。我正在使用 Eclipse 为 Alexa 技能构建 lambda 函数,您知道如何将技能 SDK 正确包含到我的项目中吗?
    • @finalstatic 您是在为您的项目使用任何类型的依赖项/项目管理器,还是只是从网站复制源代码?如果您没有使用 Gradle 或 Maven 之类的东西,我建议您研究一下,以便您可以指定 Alexa SDK 之类的依赖项。我在帖子中的最后一点是适用于 maven 的依赖项列表。
    • 明白。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-27
    • 2017-09-25
    • 2021-03-16
    • 1970-01-01
    • 2019-05-04
    • 2012-09-21
    • 1970-01-01
    相关资源
    最近更新 更多