开发者控制台

步骤6: 创建和部署Lambda程序包 (VSK Fire TV)

步骤6: 创建和部署Lambda程序包 (VSK Fire TV)

现在您已经上传了Fire TV应用,您需要创建一个Lambda函数,该函数具有将从Alexa收到的指令传递到您的应用的功能。下面提供了一个Lambda函数示例,该函数为实现视频技能提供了起点。此示例Lambda将响应Alexa的指令,并通过ADM与您的Fire TV应用通信。

关于 Lambda

在此步骤中,您将开始使用Lambda。此处的文档包括用于将VSK与Fire TV应用集成的示例Lambda代码,包括对Discovery、SearchAndPlay、FastForward、ChangeChannel和其他指令类型的响应。您将使用这个index.js代码作为起点,但之后可以添加自己的逻辑。

您需要使用客户端密钥和客户端ID更新此Lambda函数。您将使用Node JS应用将函数生成为Lambda部署程序包(生成为zip文件),然后将其上传到AWS Lambda中。稍后,您将使用处理传入指令所需的逻辑自定义此函数,并将它们传递到您的应用以进行处理。

当您自定义Lambda函数的逻辑时,在一定程度上熟悉Node.js会有所帮助,尽管现阶段不需要该领域的专业知识(您也可以使用多种其他语言编写Lambda代码)。对于此示例Lambda,您只需要使用Node.js版本10或更高版本即可。有关在Lambda函数中处理预期Alexa指令的更多信息,请参阅解释指令并对指令做出反应

下载示例Lambda函数

示例Fire TV Lambda函数包含在Lambda文件夹中的sample-fire-tv-app-video-skill GitHub存储库中。您在步骤2使用VSK下载示例Fire TV应用中下载示例应用时下载此文件夹。

此Lambda文件夹包含一个示例Lambda文件index.js,以及一个package.json文件,用于下载将Lambda代码生成为部署程序包所需的Node模块。此文件夹还包含video_catalog.json,其为视频内容提供数据源示例。

在Lambda函数中更新客户端ID和客户端密钥

首先,您需要更新示例Lambda代码中的客户端ID和密钥:

  1. 确保您已经安装了Node和NPM版本10或更高版本。您可以通过键入node -v来检查Node。您可以通过键入npm -v来检查npm。如果您尚未安装它们,可下载并安装Node JS。(您的Node JS安装将包含npm,因此您无需将npm与Node JS分开安装。)
  2. 在文本编辑器中,浏览到Lambda文件夹并打开index.js
  3. 输入您在对应用签名并配置安全配置文件中检索到的CLIENT_IDCLIENT_SECRET的值:

    第32-33行:

    const CLIENT_ID = '<输入客户端ID>';
    const CLIENT_SECRET = '<输入客户端密钥>';
    
  4. 打开终端窗口或命令提示符,并浏览到包含Lambda应用的目录。例如:

    cd /Users/<用户名>/sample-fire-tv-app-video-skill/Lambda
    
  5. 运行以下命令:

    npm install
    

    这将创建一个名为node_modules的文件夹,并将所有依赖程序包添加到其中。它还添加了package-lock.json。您会看到一条成功消息,如下所示:

    added 69 packages from 127 contributors and audited 89 packages in 5.483s(添加了来自127个贡献者的69个程序包,并在5.483s内审核了89个程序包)
    found 0 vulnerabilities(已发现0个漏洞)
    

创建Lambda部署程序包

自定义Lambda并安装Node模块后,就可以生成Lambda部署程序包了:

  1. 使用您的index.js Lambda代码浏览到目录。
  2. 运行以下命令创建Lambda部署程序包:

    zip -r firetv-lambda.zip .
    

    这将创建一个将所有Lambda代码打包在一起的zip文件。(在Windows上,您也可以在Windows资源管理器中右键单击该文件夹,然后选择发送到 -> 压缩 (Zipped) 文件夹。)

    现在,您将在此目录中看到一个名为firetv-lambda.zip的程序包。您将在下一部分(创建IAM角色之后)中将此程序包上传到AWS Lambda。

为您的Lambda创建IAM角色

您需要定义权限以指定哪些应用可以引用您的Lambda函数。在这里,您将创建一个IAM角色,允许Lambda函数代表您调用AWS服务,例如Cloudwatch。要创建IAM角色,请执行以下操作:

  1. 登录AWS管理控制台。(无需像以前一样使用相同的亚马逊开发者账户。)
  2. 单击顶部导航栏中的Services(服务),搜索IAM,然后在结果中单击IAM
  3. 从左侧导航栏中选择Roles(角色),然后单击Create role(创建角色)按钮。
  4. AWS service(AWS服务)矩形(默认处于选中状态)下,单击Lambda,然后单击底部的Next: Permissions(下一步:权限)按钮。
  5. 搜索AWSLambdaBasicExecutionRole并选中其旁边的复选框。然后单击Next: Tags(下一步:标记)按钮。
  6. 跳过Add tags (optional)(添加标记 [可选])配置,然后单击Next: Review(下一步:审核)按钮。
  7. 任意为角色命名(例如,“video_skill_streamz”)并提供描述,然后单击Create role(创建角色)按钮。

    创建可以与您的Lambda交互的IAM角色
    创建可以与您的Lambda交互的IAM角色

    记下您的IAM角色名称(特别是如果您在AWS中有多个IAM角色),这样您就可以轻松记住它以备下一步使用。

在AWS中为您的视频技能创建Lambda函数

现在,您将在AWS中创建Lambda函数以供您的视频技能使用。要为您的视频技能创建Lambda函数,请执行以下操作:

  1. 登录AWS管理控制台
  2. 单击Services(服务),然后转到Lambda(使用搜索框)。
  3. 在右上角,根据下表选择相应的AWS地区: (与IAM不同,Lambda函数特定于AWS地区。)

    区域设置 客户地区 AWS地区
    en-US、en-CA、fr-CA、pt-BR、es-MX 北美洲 美国东部(北弗吉尼亚)
    en-GB、fr-FR、de-DE、it-IT、es-ES、en-IN、hi-IN 欧洲 欧盟(爱尔兰)
    ja-JP、en-AU 远东(FE) 美国西部(俄勒冈)

    (在区域设置缩写中,小写字母表示语言;大写字母表示地区。例如,“fr-CA”是指讲法语的加拿大,而“en-CA”是指讲英语的加拿大。)

    选择离您的客户较近的地区将确保将客户表述与Lambda引用之间的延迟降至最低。此外,如果您选择了错误的AWS地区,视频技能将不起作用。

    选择AWS地区
    选择AWS地区
  4. 单击Create function(创建函数)按钮。
  5. 保持Author from scratch(从头开始创建)矩形按原样选中,然后完成以下各部分:
    • 函数名称: 您的Lambda函数的唯一名称(例如,firetv_app_lambda)。
    • Runtime(运行时): Node.js 10.x(示例Lambda代码是用Node.js编写的。稍后,您可以探索在Lambda中使用其他语言,例如Python、Ruby、.NET、Java等。)
    • Permissions(权限)。单击Choose or create an execution role(选择或创建执行角色)展开此部分。然后完成以下操作:
      • Execution role(执行角色): 使用现有角色
      • Existing role(现有角色): 选择您在上一部分中创建的IAM角色(为您的Lambda创建IAM角色)。
      在AWS中创建基本Lambda函数
      在AWS中创建基本Lambda函数
  6. 单击Create function(创建函数)按钮。

    您的Lambda函数已创建。请注意,除非您添加智能家居触发器,告知Lambda应该从哪里获取消息,否则您的Lambda函数不会接收来自Alexa的指令。(这就是智能家居API的作用 - 它将您的设备 [例如Echo Dot] 连接到云中的Lambda计算。)

  7. 单击+ Add trigger(+添加触发器)按钮。
  8. 在触发器配置中,选择Alexa Smart Home(Alexa智能家居),然后将您的视频技能ID(在步骤1: 创建您的视频技能以及设置设备中创建)输入Application ID(应用ID)字段。然后单击Add(添加)按钮。

    使用您的视频技能ID配置Lambda
    使用您的视频技能ID配置Lambda

    单击Add(添加)后,您会在顶部看到一条成功通知,内容为:“The trigger 123456789… was successfully added to function [Lambda function name].The function is now receiving events from the trigger.”(触发器123456789...已成功添加到函数 [Lambda函数名称] 中。该函数现在正在接收来自触发器的事件。) 在这种情况下,Lambda函数的触发器是您的视频技能。您的视频技能将引用此Lambda函数。

  9. 您的Lambda函数的ARN显示在页面的右上角,如以下屏幕截图所示。复制您Lambda的ARN并记下它。在接下来的步骤中更新视频技能时,您将需要此信息。

    您的Lambda函数的ARN位置
    您的Lambda函数的ARN位置
  10. 在页面中心单击您的Lambda函数的名称(带有Lambda图标的方框)。这将在下方窗格中展开Function Code(函数代码)部分。
  11. Function Code部分,单击Code entry type(代码输入类型)菜单,然后选择Upload a .zip file(上传.zip文件)。
  12. 单击Upload(上传),然后选择您已通过Node创建的firetv-lambda.zip压缩文件(创建Lambda程序包)。
  13. 单击保存。​将在您单击Save(保存)后上传压缩文件。

有关Lambda的更多信息

请记住,Alexa会侦听客户的措词(例如“Play Interstellar”(播放Interstellar)),并将请求打包为指令(JSON对象)。Lambda函数将接收Alexa发出的指令并采取一些操作。您的Lambda通过识别指令消息头部中的命名空间和名称值来确定请求类型。例如,命名空间指定请求是Discover还是ChangeChannel指令。根据这个命名空间,会调用handleDiscoveryhandleChannelControl函数。

示例Lambda提供指令的基本处理。自定义Lambda代码时,您需要处理用户对您的技能提出的每种类型的请求,并通过Amazon Device Messaging (ADM) 在您的应用中提供正确的响应。在本教程的后面部分,您将测试自己的视频技能以了解其处理各种指令的方式。

后续步骤

继续执行下一步: 步骤7: 更新Fire TV技能部分

(如果遇到任何问题而无法继续,请参阅云端集成故障排除。)


Last updated: 2021年10月13日