

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 教程：创建部署 Amazon Alexa 技能的管道
<a name="tutorials-alexa-skills-kit"></a>

在本教程中，您将使用 Alexa Skills Kit 作为部署阶段中的部署提供程序来配置一个连续提供 Alexa 技能的管道。当您对源存储库中的源文件进行更改时，已完成的管道会检测对您的技能所做的更改。然后，管道使用 Alexa Skills Kit 部署到 Alexa 技能开发阶段。

**重要**  
作为创建管道的一部分，客户提供的 S3 工件存储桶将 CodePipeline 用于项目。（这与用于 S3 源操作的存储桶不同。） 如果 S3 工件存储桶与您的管道账户位于不同的账户中，请确保 S3 工件存储桶归其所有 AWS 账户 ，该存储桶是安全且可靠的。

**注意**  
此功能在亚太地区（香港）或欧洲地区（米兰）区域不可用。要使用该区域可用的其他部署操作，请参阅[部署操作集成](integrations-action-type.md#integrations-deploy)。

要将您的自定义技能创建为 Lambda 函数，请参阅将[自定义技能作为 Lambda AWS 函数托管](https://developer.amazon.com/docs/custom-skills/host-a-custom-skill-as-an-aws-lambda-function.html)。您还可以创建一个使用 Lambda 源文件的管道和一个用于为您的技能部署对 Lambda 的更改的 CodeBuild 项目。

## 先决条件
<a name="tutorials-alexa-skills-kit-prereq"></a>

您必须已经具备以下各项：
+ 存储 CodeCommit 库。您可以使用您在中创建的 AWS CodeCommit 存储库[教程：创建简单的管道（CodeCommit 存储库）](tutorials-simple-codecommit.md)。
+ 一个 Amazon 开发人员账户。此账户拥有您的 Alexa 技能。您可以在 [Alexa Skills Kit](https://developer.amazon.com/alexa-skills-kit) 免费创建一个账户。
+ 一个 Alexa 技能。您可以使用[获取自定义技能示例代码](https://developer.amazon.com/docs/custom-skills/use-the-alexa-skills-kit-samples.html)教程创建示例技能。
+ 安装 ASK CLI，并将 `ask init` 与您的 AWS 凭证结合使用来配置它。请参阅[安装和初始化 ASK CLI](https://developer.amazon.com/docs/smapi/quick-start-alexa-skills-kit-command-line-interface.html#install-initialize)。

## 步骤 1：创建 Alexa 开发人员服务 LWA 安全配置文件
<a name="tutorials-alexa-skills-kit-profile"></a>

在本节中，您将创建一个要与 Login with Amazon（LWA）一起使用的安全配置文件。如果您已有配置文件，可跳过本步骤。
+ 使用[generate-lwa-tokens](https://developer.amazon.com/docs/smapi/ask-cli-command-reference.html#generate-lwa-tokens)中的步骤来创建安全配置文件。
+ 在您创建配置文件后，请记下**客户端 ID** 和**客户端密钥**。
+ 请务必按照说明中的规定输入 “**允许退货 URLs**”。 URLs 允许 ASK CLI 命令重定向刷新令牌请求。

## 第 2 步：创建 Alexa 技能源文件并推送到你的 CodeCommit 存储库
<a name="tutorials-alexa-skills-kit-push"></a>

在本节中，您将创建 Alexa 技能源文件并将其推送到管道用于源阶段的存储库。对于您在 Amazon 开发人员控制台中创建的技能，您可以生成并推送以下内容：
+ 一个 `skill.json` 文件。
+ 一个 `interactionModel/custom` 文件夹。
**注意**  
此目录结构符合 Alexa Skills Kit 技能包格式要求，如[技能包格式](https://developer.amazon.com/docs/smapi/skill-package-api-reference.html#skill-package-format)中所述。如果您的目录结构未使用正确的技能包格式，则更改不会成功部署到 Alexa Skills Kit 控制台。

**为您的技能创建源文件**

1. 从 Alexa Skills Kit 开发人员控制台中检索您的技能 ID。使用此命令：

   ```
   ask api list-skills
   ```

   按名称查找您的技能，然后在 `skillId` 字段中复制关联的 ID。

1. 生成一个 `skill.json` 文件，其中包含您的技能详细信息。使用此命令：

   ```
   ask api get-skill -s skill-ID > skill.json
   ```

1. （可选）创建一个 `interactionModel/custom` 文件夹。

   使用此命令可在文件夹中生成交互模型文件。对于区域设置，本教程使用 en-US 作为文件名中的区域设置。

   ```
   ask api get-model --skill-id skill-ID --locale locale >
       ./interactionModel/custom/locale.json
   ```

**将文件推送到您的 CodeCommit 存储库**

1. 将文件推送或上传到您的 CodeCommit 存储库。这些文件是由**创建管道**向导针对您在 AWS CodePipeline中的部署操作创建的源项目。您的文件在本地目录中应如下所示：

   ```
   skill.json
   /interactionModel
     /custom
       |en-US.json
   ```

1. 选择要用于上传文件的方法：

   1. 在本地计算机上从克隆的存储库使用 Git 命令行：

      1. 运行以下命令以立即暂存您的所有文件：

         ```
         git add -A
         ```

      1. 运行以下命令以提交带有提交消息的文件：

         ```
         git commit -m "Added Alexa skill files"
         ```

      1. 运行以下命令将本地存储库中的文件推送到存储 CodeCommit 库：

         ```
         git push
         ```

   1. 要使用 CodeCommit 控制台上传文件，请执行以下操作：

      1. 打开 CodeCommit 控制台，然后从 “存储库” 列表中选择您的**存储库**。

      1. 选择**添加文件**，然后选择**上传文件**。

      1. 选择**选择文件**，然后浏览以找到您的文件。通过输入您的用户名和电子邮件地址来提交更改。选择**提交更改**。

      1. 对要上传的每个文件重复此步骤。

## 步骤 3：使用 ASK CLI 命令来创建刷新令牌
<a name="tutorials-alexa-skills-kit-token"></a>

CodePipeline 根据您的亚马逊开发者账户中的客户端 ID 和密钥使用刷新令牌来授权其代表您执行的操作。在本节中，您将使用 ASK CLI 来创建令牌。您将在使用**创建管道**向导时使用这些凭证。

**使用您的 Amazon 开发人员账户凭据创建刷新令牌**

1. 使用以下命令：

   ```
   ask util generate-lwa-tokens
   ```

1. 在系统提示时，输入您的客户端 ID 和密钥，如下例所示：

   ```
   ? Please type in the client ID: 
   amzn1.application-client.example112233445566
   ? Please type in the client secret:
   example112233445566
   ```

1. 将显示登录浏览器页面。使用 Amazon 开发人员账户凭证进行登录。

1. 返回到命令行屏幕。会在输出中生成访问令牌和刷新令牌。复制在输出中返回的刷新令牌。

## 步骤 4：创建管道
<a name="tutorials-alexa-skills-kit-pipeline"></a>

在此部分中，您将使用以下操作创建管道：
+ 一个源舞台，其 CodeCommit 动作源工件是支持你技能的 Alexa 技能文件。
+ 具有 Alexa Skills Kit 部署操作的部署阶段。

**使用向导创建管道**

1. 登录 AWS 管理控制台 并打开 CodePipeline 控制台，[网址为 http://console.aws.amazon。 com/codesuite/codepipeline/home](https://console.aws.amazon.com/codesuite/codepipeline/home)。

1. 选择要在其中创建项目及其资源的 AWS 区域。Alexa 技能运行时仅在以下区域可用：
   + 亚太地区（东京）
   + 欧洲地区（爱尔兰）
   + 美国东部（弗吉尼亚州北部）
   + 美国西部（俄勒冈州）

1. 在**欢迎**页面、**入门**页面或**管道**页面上，选择**创建管道**。

1. 在**步骤 1：选择创建选项**页面上的**创建选项**下，选择**构建自定义管道**选项。选择**下一步**。

1. 在**步骤 2：选择管道设置**的**管道名称**中，输入 **MyAlexaPipeline**。

1. CodePipeline 提供 V1 和 V2 类型的管道，它们的特性和价格各不相同。在控制台中，您只能选择 V2 类型。有关更多信息，请参阅[管道类型](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipeline-types-planning.html?icmpid=docs_acp_help_panel)。有关定价的信息 CodePipeline，请参阅[定价](https://aws.amazon.com/codepipeline/pricing/)。

1. 在**服务角色**中，选择**新建服务角色** CodePipeline 以允许在 IAM 中创建服务角色。

1. 将**高级设置**中的各项设置保留为默认值，然后选择**下一步**。

1. 在**步骤 3：添加源阶段**的**源提供程序**中，选择 **AWS CodeCommit**。在**存储库名称**中，选择您在中创建的 CodeCommit 存储库的名称[步骤 1：创建 CodeCommit 存储库](tutorials-simple-codecommit.md#codecommit-create-repository)。在**分支名称**中，选择包含最新的代码更新的分支的名称。

   选择存储库名称和分支后，将显示一条消息，显示要为此管道创建的 Amazon Ev CloudWatch ents 规则。

   选择**下一步**。

1. 在**步骤 4：添加构建阶段**中，选择**跳过构建阶段**，并通过再次选择**跳过**接受警告消息。

   选择**下一步**。

1. 在**步骤 5：添加测试阶段**中，选择**跳过测试阶段**，并通过再次选择**跳过**接受警告消息。

   选择**下一步**。

1. 在**步骤 6：添加部署阶段**中：

   1. 在**部署提供程序**中，选择 **Alexa Skills Kit**。

   1. 在 **Alexa skill ID** 中，输入在 Alexa Skills Kit 开发人员控制台中分配给您的技能的技能 ID。

   1. 在**客户端 ID** 中，输入您注册的应用程序的 ID。

   1. 在**客户端密钥**中，输入您在注册时选择的密钥。

   1. 在**刷新令牌**中，输入您在步骤 3 中生成的令牌。  
![\[步骤 6：Alexa 技能套件操作的部署页面\]](http://docs.aws.amazon.com/zh_cn/codepipeline/latest/userguide/images/alexa-deploy.png)

   1. 选择**下一步**。

1. 在**步骤 7：查看**中，查看信息，然后选择**创建管道**。

## 步骤 5：对任何源文件进行更改并验证部署
<a name="tutorials-alexa-skills-kit-update"></a>

对您的技能进行更改，然后将更改推送至您的存储库。这将触发您的管道运行。验证您的技能已在 [Alexa Skills Kit 开发人员控制台](https://developer.amazon.com/alexa/console/ask)中更新。