快速掌握 Amazon Q CLI – wiki基地


快速掌握 Amazon Q CLI:企业级AI助手的命令行力量

随着人工智能技术的飞速发展,企业越来越需要智能工具来帮助员工快速找到信息、提升效率。Amazon Q 作为亚马逊云科技推出的一项生成式 AI 驱动的企业级助手,正是为了解决这一痛点而生。它能够安全地连接到企业内部的各种数据源(如S3、SharePoint、Confluence、内部知识库等),并基于这些私有数据提供精准的问答、摘要、内容生成等能力。

虽然 Amazon Q 提供直观的 Web 控制台界面,但对于需要自动化、批量操作、脚本化管理或者集成到现有CI/CD流程的技术人员而言,Amazon Q 命令行界面(CLI)无疑是更强大、更灵活的选择。掌握 Amazon Q CLI,不仅能让你高效地搭建和管理 Amazon Q 应用,更能释放自动化潜力,为企业级AI助手的大规模部署打下坚实基础。

本文将带你深入了解 Amazon Q CLI,从安装配置到核心命令的使用,再到高级应用和自动化技巧,助你快速成为 Amazon Q CLI 的专家。

第一章:初识 Amazon Q CLI – 为何选择命令行?

1.1 什么是 Amazon Q?

在深入 CLI 之前,我们先快速回顾一下 Amazon Q 的核心概念。Amazon Q 是一个为工作设计的生成式 AI 助手。它的主要功能包括:

  • 安全连接数据源: 集成企业内部各种数据存储系统。
  • 智能检索与问答: 基于企业私有数据,提供上下文相关的精准答案和信息摘要。
  • 代码助手(针对特定场景): 在软件开发过程中提供代码建议、调试帮助等。
  • 商业智能洞察(针对特定场景): 集成 BI 工具提供数据分析支持。

本文主要聚焦于 Amazon Q 的企业知识问答能力,以及如何通过 CLI 管理实现这一能力的底层资源。

1.2 为什么选择 Amazon Q CLI?

虽然 AWS 控制台提供了用户友好的图形界面,但 CLI 具有其独特的优势:

  • 自动化与脚本化: CLI 命令可以轻松地编写成脚本,实现 Amazon Q 应用的自动化部署、配置更新、数据源同步等操作,尤其适用于大规模或频繁变更的环境。
  • ** repeatability and consistency:** 使用脚本确保每次部署或配置都完全一致,减少人为错误。
  • 集成CI/CD流程: 将 Amazon Q 的资源管理任务无缝集成到现有的持续集成/持续部署管道中。
  • 批量操作: 轻松对多个 Amazon Q 资源执行相同的操作。
  • 高效性: 对于熟悉命令行的用户,直接输入命令通常比在控制台中点击更快。
  • 高级配置: 有些细粒度的配置选项可能在 CLI 中更直接或更容易访问。
  • 故障排除: CLI 的详细错误输出通常比控制台界面提供更多诊断信息。

掌握 CLI 是从“使用” Amazon Q 到“管理” Amazon Q 的关键一步。

第二章:准备工作 – 安装与配置

在开始使用 Amazon Q CLI 之前,你需要完成一些准备步骤。

2.1 AWS 账户与权限

首先,你需要一个有效的 AWS 账户。为了使用 Amazon Q 和其 CLI,你的 AWS 用户或角色需要具备相应的 IAM 权限。

关键 IAM 权限:

  • 调用 Amazon Q API 的权限: 你的用户或角色需要允许执行 q:* 操作(或者更细粒度的操作如 q:CreateApplication, q:ListApplications, q:CreateDataSource, q:StartDataSourceSyncJob 等)。
  • Amazon Q 服务角色的权限: Amazon Q 服务本身在访问你的数据源时需要一个 IAM 角色。这个角色需要拥有访问你配置的数据源(如 S3 Bucket 的 s3:GetObject 权限,或者访问其他服务所需的权限)。在通过 CLI 创建 Application 和 Data Source 时,你需要指定或创建这个服务角色。

最低权限原则: 强烈建议遵循最低权限原则,仅授予执行必要任务所需的权限。

2.2 安装 AWS CLI

Amazon Q CLI 是 AWS Command Line Interface (AWS CLI) 的一部分。你需要在你的本地机器或服务器上安装并配置 AWS CLI v2。

  1. 安装 AWS CLI v2: 访问 AWS CLI 安装指南,按照你的操作系统(Windows, macOS, Linux)选择相应的安装方法。
  2. 验证安装: 安装完成后,打开终端或命令行窗口,运行以下命令验证安装:

    bash
    aws --version

    你应该看到类似 aws-cli/2.x.x Python/3.x.x ... 的输出。
    3. 配置 AWS CLI: 配置 AWS CLI 以便它可以连接到你的 AWS 账户。运行 aws configure 命令:

    bash
    aws configure

    系统会提示你输入:
    * AWS Access Key ID: 你的 AWS 访问密钥 ID。
    * AWS Secret Access Key: 你的 AWS 秘密访问密钥。
    * Default region name: 你希望默认操作的 AWS 区域(例如 us-east-1)。Amazon Q 目前仅在特定区域可用,请确保选择支持 Amazon Q 的区域。
    * Default output format: CLI 输出的默认格式(推荐 json)。

    这些信息通常存储在 ~/.aws/credentials~/.aws/config 文件中。

2.3 确认 Amazon Q CLI 模块可用

Amazon Q CLI 是 AWS CLI v2 中的一个服务模块。安装并配置好 AWS CLI 后,你应该可以直接访问 Amazon Q 的命令。运行以下命令来验证:

bash
aws q --help

如果一切正常,你应该会看到 Amazon Q CLI 的主帮助信息,列出了可用的顶级命令组(如 application, data-source, index, retriever, chat 等)。如果出现错误,请检查 AWS CLI v2 的安装是否正确以及版本是否支持 Amazon Q。

第三章:Amazon Q CLI 核心概念与命令结构

在使用 CLI 管理 Amazon Q 资源时,理解其背后的资源模型至关重要。主要的资源包括:

  • Application (应用): Amazon Q 的顶级容器。一个应用代表了一个特定的 Amazon Q 实例,它关联着索引、数据源、用户访问控制等。
  • Index (索引): 存储和索引你从数据源同步过来的企业内容。Amazon Q 使用这个索引来快速、准确地检索相关信息。
  • Data Source (数据源): 连接到你的企业内容存储库(如 S3、SharePoint、Confluence、Web Crawler 等)的配置。它告诉 Amazon Q 从哪里以及如何获取内容。
  • Retriever (检索器): 定义了 Amazon Q 如何从索引中检索信息。Amazon Q 的原生索引就是一种检索器。
  • Chat Application (聊天应用): (有时也被称为 Conversational Retrieval Application)配置了用户如何与 Amazon Q 交互,例如指定使用哪个应用、哪个索引等。

CLI 命令结构:

AWS CLI 命令遵循 aws <service> <action> [parameters] 的结构。对于 Amazon Q,服务名是 q。因此,Amazon Q CLI 命令的基本结构是:

bash
aws q <resource-type> <action> [parameters]

  • <resource-type>: 你要操作的 Amazon Q 资源类型,例如 application, index, data-source, retriever, chat-application
  • <action>: 你要对该资源类型执行的操作,例如 create, list, describe, update, delete, start-sync-job (针对 data-source)。
  • [parameters]: 指定操作所需的参数,例如资源名称、ID、配置详情等。参数通常使用 --parameter-name <value>--parameter-name <JSON-string> 的形式。

获取帮助:

随时可以使用 --help 选项来获取命令的详细信息:

  • 获取某个资源类型的所有可用操作:aws q <resource-type> --help
  • 获取某个特定操作的详细帮助(包括所需参数):aws q <resource-type> <action> --help

例如:

bash
aws q application --help # 查看 application 资源的所有操作
aws q application create --help # 查看 create-application 操作的参数详情

第四章:核心操作实战 – 搭建你的第一个 Amazon Q 应用

本章将通过一系列实际命令,带你完成搭建一个基本的 Amazon Q 应用并连接数据源的过程。

4.1 创建 Amazon Q 应用 (Application)

创建一个 Amazon Q 应用是起点。你需要为它指定一个名称和一个服务角色 ARN。这个服务角色是 Amazon Q 用来访问其他 AWS 服务(如 CloudWatch Logs)的。稍后创建数据源时,你还需要一个单独的服务角色来访问你的数据源。

  1. 准备一个服务角色: 如果还没有为 Amazon Q 创建过服务角色,你需要先创建一个。这个角色需要允许 q.amazonaws.com 承担,并且至少拥有向 CloudWatch Logs 写入的权限。一个简单的策略可能允许 logs:CreateLogGroup, logs:CreateLogStream, logs:PutLogEvents。在 IAM 控制台或使用 IAM CLI 创建并获取其 ARN。假设服务角色 ARN 是 arn:aws:iam::<your-account-id>:role/AmazonQApplicationServiceRole

  2. 创建应用: 使用 create-application 命令。

    bash
    aws q application create \
    --display-name "MyFirstQApplication" \
    --description "My first Amazon Q application created via CLI" \
    --role-arn "arn:aws:iam::<your-account-id>:role/AmazonQApplicationServiceRole" \
    --region us-east-1 # 确保使用支持Q的区域

    • --display-name: 应用的显示名称。
    • --description: 应用的描述。
    • --role-arn: Amazon Q 服务角色 ARN。
    • --region: 指定 AWS 区域。

    成功后,命令会输出应用的详细信息,包括 applicationId。记下这个 applicationId,后续操作会用到。

    json
    {
    "applicationArn": "arn:aws:q:us-east-1:<your-account-id>:application/<application-id>",
    "applicationId": "<application-id>"
    }

4.2 管理应用

  • 列出所有应用:

    bash
    aws q application list --region us-east-1

    输出是一个应用列表的 JSON 数组。

  • 查看特定应用详情:

    bash
    aws q application get \
    --application-id "<application-id>" \
    --region us-east-1

    输出包含应用的配置、状态等详细信息。

  • 更新应用: 你可以更新应用的显示名称或描述等。

    bash
    aws q application update \
    --application-id "<application-id>" \
    --display-name "UpdatedQApplicationName" \
    --description "This description has been updated." \
    --region us-east-1

  • 删除应用: 删除应用会删除其所有关联资源(索引、数据源等)。请谨慎操作!

    bash
    aws q application delete \
    --application-id "<application-id>" \
    --region us-east-1

4.3 创建索引 (Index)

一个应用至少需要一个索引来存储数据。你可以为一个应用创建多个索引,但通常只需要一个。

  1. 创建索引: 使用 create-index 命令,指定应用 ID 和索引名称。

    bash
    aws q index create \
    --application-id "<application-id>" \
    --display-name "MyFirstQIndex" \
    --description "Index for corporate documents" \
    --region us-east-1

    成功后,输出包含 indexId。记下它。

    json
    {
    "indexArn": "arn:aws:q:us-east-1:<your-account-id>:application/<application-id>/index/<index-id>",
    "indexId": "<index-id>"
    }

    创建索引需要一些时间(几分钟)才能变为 ACTIVE 状态。你可以使用 get-index 命令检查状态。

4.4 管理索引

  • 列出应用下的所有索引:

    bash
    aws q index list \
    --application-id "<application-id>" \
    --region us-east-1

  • 查看特定索引详情:

    bash
    aws q index get \
    --application-id "<application-id>" \
    --index-id "<index-id>" \
    --region us-east-1

  • 更新索引: (例如更新描述)

    bash
    aws q index update \
    --application-id "<application-id>" \
    --index-id "<index-id>" \
    --description "Updated index description." \
    --region us-east-east-1

  • 删除索引:

    bash
    aws q index delete \
    --application-id "<application-id>" \
    --index-id "<index-id>" \
    --region us-east-1

4.5 配置数据源 (Data Source)

数据源配置告诉 Amazon Q 从哪里拉取内容。Amazon Q 支持多种数据源类型,如 S3, Web Crawler, Confluence, SharePoint, Salesforce 等。配置每个数据源类型所需的参数各不相同。这里以 S3 数据源为例。

  1. 准备一个数据源服务角色: 这个角色需要允许 q.amazonaws.com 承担,并且拥有访问你的数据源的权限。对于 S3,它需要至少 s3:GetObjects3:ListBucket 权限。在 IAM 控制台或使用 IAM CLI 创建并获取其 ARN。假设服务角色 ARN 是 arn:aws:iam::<your-account-id>:role/AmazonQDataSourceServiceRole

  2. 创建数据源: 使用 create-data-source 命令。你需要指定应用 ID、索引 ID、数据源名称、数据源类型和配置详情。

    bash
    aws q data-source create \
    --application-id "<application-id>" \
    --index-id "<index-id>" \
    --display-name "MyS3DataSource" \
    --description "S3 bucket with corporate documents" \
    --type "S3" \
    --configuration '{"bucketName": "my-corporate-documents-bucket"}' \
    --role-arn "arn:aws:iam::<your-account-id>:role/AmazonQDataSourceServiceRole" \
    --region us-east-1

    • --type: 数据源类型,例如 “S3″。
    • --configuration: 这是最重要的参数,需要提供一个 JSON 字符串来配置数据源的连接细节。结构取决于 --type。对于 S3,需要 bucketName。其他数据源类型有不同的参数,请查阅对应数据源类型的 create-data-source CLI 文档获取详细的 configuration 结构。
    • --role-arn: 用于数据源的服务角色 ARN,Amazon Q 使用此角色访问你的数据源。

    成功后,输出包含 dataSourceId

    json
    {
    "dataSourceArn": "arn:aws:q:us-east-1:<your-account-id>:application/<application-id>/index/<index-id>/data-source/<data-source-id>",
    "dataSourceId": "<data-source-id>"
    }

    创建数据源也需要一点时间变为 ACTIVE 状态。

4.6 管理数据源

  • 列出应用下索引的所有数据源:

    bash
    aws q data-source list \
    --application-id "<application-id>" \
    --index-id "<index-id>" \
    --region us-east-1

  • 查看特定数据源详情:

    bash
    aws q data-source get \
    --application-id "<application-id>" \
    --index-id "<index-id>" \
    --data-source-id "<data-source-id>" \
    --region us-east-1

  • 更新数据源: 你可以更新数据源的配置或描述等。--configuration 参数需要提供完整的更新配置 JSON。

    bash
    aws q data-source update \
    --application-id "<application-id>" \
    --index-id "<index-id>" \
    --data-source-id "<data-source-id>" \
    --display-name "UpdatedS3DataSourceName" \
    --configuration '{"bucketName": "another-bucket-name", "inclusionPrefixes": ["documents/"]}' \
    --region us-east-1

  • 删除数据源:

    bash
    aws q data-source delete \
    --application-id "<application-id>" \
    --index-id "<index-id>" \
    --data-source-id "<data-source-id>" \
    --region us-east-1

4.7 同步数据源并摄取数据

创建数据源配置后,Amazon Q 并不会立即开始从数据源中拉取数据。你需要手动启动同步任务(或配置同步计划)。

  1. 启动数据源同步任务: 使用 start-data-source-sync-job 命令。

    bash
    aws q data-source start-data-source-sync-job \
    --application-id "<application-id>" \
    --index-id "<index-id>" \
    --data-source-id "<data-source-id>" \
    --region us-east-1

    成功后,命令会立即返回一个空的 JSON 对象 {},表示任务已成功启动。这不代表任务已完成或成功! 你需要监控任务的状态。

  2. 监控同步任务: 使用 list-data-source-sync-jobs 命令查看同步历史和当前状态。

    bash
    aws q data-source list-data-source-sync-jobs \
    --application-id "<application-id>" \
    --index-id "<index-id>" \
    --data-source-id "<data-source-id>" \
    --region us-east-1

    输出会列出最近的同步任务,包括 syncJobIdstartTimestatus (如 RUNNING, SUCCEEDED, FAILED, ABORTED)、endTime 以及处理的文件数量等信息。你需要等待 status 变为 SUCCEEDEDFAILED。如果任务失败,查看 CloudWatch Logs 可以找到更详细的错误信息(这需要你在创建应用的服务角色中配置了 CloudWatch Logs 权限)。

  3. 停止正在运行的同步任务:

    bash
    aws q data-source stop-data-source-sync-job \
    --application-id "<application-id>" \
    --index-id "<index-id>" \
    --data-source-id "<data-source-id>" \
    --region us-east-1

4.8 设置检索器 (Retriever) 和聊天应用 (Chat Application)

为了能够通过 Amazon Q 进行问答,你需要配置一个检索器来使用你的索引,并创建一个聊天应用来定义交互端点。

  1. 创建检索器: 通常你会使用 Amazon Q 的原生索引作为检索器。

    bash
    aws q retriever create \
    --application-id "<application-id>" \
    --type "NATIVE_INDEX" \
    --display-name "MyNativeIndexRetriever" \
    --configuration '{"nativeIndexConfiguration": {"indexId": "<index-id>"}}' \
    --region us-east-1

    --type "NATIVE_INDEX" 表示使用原生索引。--configuration 指定了要使用的 indexId。成功后,输出包含 retrieverId

  2. 管理检索器:

    • 列出:aws q retriever list --application-id "<application-id>" --region us-east-1
    • 查看:aws q retriever get --application-id "<application-id>" --retriever-id "<retriever-id>" --region us-east-1
    • 更新:aws q retriever update ...
    • 删除:aws q retriever delete ...
  3. 创建聊天应用: 关联你的应用和检索器。

    bash
    aws q chat-application create \
    --application-id "<application-id>" \
    --creator-mode "BUILDER_MODE" \
    --region us-east-1

    * --creator-mode 选择模式,通常开始使用 BUILDER_MODE

    成功后,输出包含 chatApplicationId

  4. 管理聊天应用:

    • 列出:aws q chat-application list --application-id "<application-id>" --region us-east-1
    • 查看:aws q chat-application get --application-id "<application-id>" --region us-east-1
    • 更新:aws q chat-application update ...
    • 删除:aws q chat-application delete ...

4.9 通过 CLI 进行交互式聊天 (Testing)

Amazon Q CLI 也提供了直接通过命令行与你的应用进行聊天的能力,这对于测试配置是否正确以及索引数据是否可检索非常有用。

  1. 启动聊天会话: 使用 start-chat-conversation 命令。

    bash
    aws q chat start-chat-conversation \
    --application-id "<application-id>" \
    --region us-east-1

    成功后,它将返回一个 conversationIdchatClientId

    json
    {
    "conversationId": "<conversation-id>",
    "chatClientId": "<chat-client-id>"
    }

    记下这两个 ID。

  2. 发送聊天请求: 使用 send-chat-request 命令,提供应用 ID, 会话 ID, 客户端 ID,以及用户的消息内容。

    bash
    aws q chat send-chat-request \
    --application-id "<application-id>" \
    --conversation-id "<conversation-id>" \
    --chat-client-id "<chat-client-id>" \
    --request '{"userMessage": "Tell me about our company's vacation policy"}' \
    --region us-east-1

    --request 参数需要一个 JSON 字符串,其中包含 userMessage 字段。

    成功后,输出将包含 Amazon Q 的响应:

    json
    {
    "response": {
    "systemMessage": "Based on the documents I have indexed, our company's vacation policy allows...",
    "sourceAttributions": [
    {
    "citationNumber": 1,
    "generatedText": "...annual leave...",
    "textMessage": "Document Title: Vacation Policy.pdf, Source: S3",
    "url": "s3://my-corporate-documents-bucket/policies/Vacation Policy.pdf",
    "updatedAt": 1678886400.0
    }
    // ... more source attributions
    ],
    "actionExplanation": "Responding to your question about the vacation policy based on retrieved documents."
    },
    "systemMessageId": "<system-message-id>"
    }

    输出中的 response 字段包含了 Amazon Q 生成的文本 (systemMessage) 和引用的数据源 (sourceAttributions)。

  3. 继续会话: 要在同一个会话中发送后续消息,只需再次调用 send-chat-request 命令,使用相同的 application-id, conversation-id, 和 chat-client-id,并提供新的 userMessage

    bash
    aws q chat send-chat-request \
    --application-id "<application-id>" \
    --conversation-id "<conversation-id>" \
    --chat-client-id "<chat-client-id>" \
    --request '{"userMessage": "What about sick leave?"}' \
    --region us-east-1

    CLI 方式的聊天主要用于快速测试和调试。对于最终用户交互,通常会通过 Amazon Q 控制台、集成的 IDEs 或其他应用程序界面进行。

第五章:高级应用与自动化

掌握了核心命令后,你可以开始利用 CLI 的强大能力进行自动化和更复杂的管理。

5.1 使用 jq 处理 CLI 输出

AWS CLI 默认输出 JSON 格式,这非常适合使用命令行工具如 jq 进行处理和过滤。jq 是一个轻量级且灵活的命令行 JSON 处理器。

安装 jq: 访问 jq 官网 获取安装指南。

示例:提取 Application ID

创建应用后,你可能想立即获取 applicationId 用于后续命令。

bash
aws q application create \
--display-name "AutomatedQApp" \
--role-arn "arn:aws:iam::<your-account-id>:role/AmazonQApplicationServiceRole" \
--region us-east-1 | jq -r '.applicationId'

这里的 | 符号将 aws q application create 命令的 JSON 输出管道传递给 jqjq -r '.applicationId' 表示:
* .applicationId: 从 JSON 输入中提取 applicationId 字段的值。
* -r: 输出原始字符串,而不是带引号的 JSON 字符串。

这个命令将直接输出 Application ID 字符串,你可以将其存储在 shell 变量中:

“`bash
APP_ID=$(aws q application create \
–display-name “AutomatedQApp” \
–role-arn “arn:aws:iam:::role/AmazonQApplicationServiceRole” \
–region us-east-1 | jq -r ‘.applicationId’)

echo “Created Application with ID: $APP_ID”
“`

示例:过滤数据源同步历史

查看同步历史并只显示失败的任务:

bash
aws q data-source list-data-source-sync-jobs \
--application-id "<application-id>" \
--index-id "<index-id>" \
--data-source-id "<data-source-id>" \
--region us-east-1 | jq '.syncJobHistory | map(select(.status == "FAILED"))'

这个命令链:
* 获取同步历史的 JSON。
* jq '.syncJobHistory':提取 syncJobHistory 数组。
* map(select(.status == "FAILED")):遍历数组,选择 (select) 状态 (status) 等于 “FAILED” 的对象,并形成一个新的数组。

jq 的强大之处在于你可以用它来构建复杂的查询和转换 JSON 数据,这对于自动化脚本来说是无价的。

5.2 脚本化 Amazon Q 资源创建流程

你可以编写 Bash、Python 或其他脚本来自动化整个 Amazon Q 应用的设置过程,从创建应用、索引、数据源到启动初始同步。

Bash 脚本示例(伪代码):

“`bash

!/bin/bash

— Configuration —

REGION=”us-east-1″
APP_NAME=”MyAutomatedQApp”
APP_DESCRIPTION=”Created via script”
APP_ROLE_ARN=”arn:aws:iam:::role/AmazonQApplicationServiceRole”
INDEX_NAME=”MyAutomatedIndex”
DS_NAME=”MyAutomatedS3DataSource”
DS_TYPE=”S3″
DS_CONFIG='{“bucketName”: “my-scripted-data-bucket”}’
DS_ROLE_ARN=”arn:aws:iam:::role/AmazonQDataSourceServiceRole”

— Create Application —

echo “Creating Application: $APP_NAME in region $REGION…”
APP_OUTPUT=$(aws q application create \
–display-name “$APP_NAME” \
–description “$APP_DESCRIPTION” \
–role-arn “$APP_ROLE_ARN” \
–region “$REGION” \
–output json) # Ensure JSON output

if [ $? -ne 0 ]; then
echo “Error creating application. Exiting.”
exit 1
fi

APP_ID=$(echo “$APP_OUTPUT” | jq -r ‘.applicationId’)
echo “Application created with ID: $APP_ID”

— Create Index —

echo “Creating Index: $INDEX_NAME for Application $APP_ID…”
INDEX_OUTPUT=$(aws q index create \
–application-id “$APP_ID” \
–display-name “$INDEX_NAME” \
–region “$REGION” \
–output json)

if [ $? -ne 0 ]; then
echo “Error creating index. Exiting.”
exit 1
fi

INDEX_ID=$(echo “$INDEX_OUTPUT” | jq -r ‘.indexId’)
echo “Index created with ID: $INDEX_ID”

— Create Data Source —

echo “Creating Data Source: $DS_NAME for Index $INDEX_ID…”
DS_OUTPUT=$(aws q data-source create \
–application-id “$APP_ID” \
–index-id “$INDEX_ID” \
–display-name “$DS_NAME” \
–type “$DS_TYPE” \
–configuration “$DS_CONFIG” \
–role-arn “$DS_ROLE_ARN” \
–region “$REGION” \
–output json)

if [ $? -ne 0 ]; then
echo “Error creating data source. Exiting.”
exit 1
fi

DS_ID=$(echo “$DS_OUTPUT” | jq -r ‘.dataSourceId’)
echo “Data Source created with ID: $DS_ID”

— Start Data Source Sync Job —

echo “Starting Data Source Sync Job for DS $DS_ID…”
aws q data-source start-data-source-sync-job \
–application-id “$APP_ID” \
–index-id “$INDEX_ID” \
–data-source-id “$DS_ID” \
–region “$REGION”

if [ $? -ne 0 ]; then
echo “Error starting sync job. Exiting.”
exit 1
fi

echo “Sync job started. Monitor status using list-data-source-sync-jobs.”

— Create Retriever (Native Index) —

echo “Creating Native Index Retriever for Index $INDEX_ID…”
RETRIEVER_OUTPUT=$(aws q retriever create \
–application-id “$APP_ID” \
–type “NATIVE_INDEX” \
–display-name “AutomatedRetriever” \
–configuration “{\”nativeIndexConfiguration\”: {\”indexId\”: \”$INDEX_ID\”}}” \
–region “$REGION” \
–output json)

if [ $? -ne 0 ]; then
echo “Error creating retriever. Exiting.”
exit 1
fi

RETRIEVER_ID=$(echo “$RETRIEVER_OUTPUT” | jq -r ‘.retrieverId’)
echo “Retriever created with ID: $RETRIEVER_ID”

echo “Amazon Q Application Setup Complete (initial sync running in background).”
echo “Application ID: $APP_ID”
echo “Index ID: $INDEX_ID”
echo “Data Source ID: $DS_ID”
echo “Retriever ID: $RETRIEVER_ID”

Optional: Add code here to poll list-data-source-sync-jobs until complete

“`

这个脚本展示了如何串联 CLI 命令,使用 jq 提取关键信息,并在发生错误时退出。这是实现 Infrastructure as Code (IaC) 的一个基础步骤。对于更复杂的 IaC,你可以考虑使用 AWS CDK 或 CloudFormation,它们也集成了对 Amazon Q 资源的支持。

5.3 管理大型配置(使用文件)

CLI 参数有时会很长,特别是 --configuration 参数包含复杂的 JSON 结构时。你可以将这些 JSON 配置保存在文件中,然后在 CLI 命令中引用文件路径,通常使用 file:// 前缀。

示例:使用文件创建复杂数据源配置

  1. 创建一个名为 s3-config.json 的文件,内容如下:

    json
    {
    "bucketName": "my-complex-s3-bucket",
    "inclusionPrefixes": [
    "docs/policy/",
    "docs/manuals/"
    ],
    "exclusionPatterns": [
    ".*\\.tmp$",
    "private/"
    ],
    "documentAttributeConfiguration": {
    "s3Attributes": [
    {
    "key": "language",
    "type": "STRING_LIST"
    }
    // Add more attributes based on S3 object metadata or custom mappings
    ]
    // Add configurations for other document types if needed
    }
    }

  2. create-data-source 命令中引用这个文件:

    bash
    aws q data-source create \
    --application-id "<application-id>" \
    --index-id "<index-id>" \
    --display-name "ComplexS3DataSourceFromFile" \
    --type "S3" \
    --configuration "file://s3-config.json" \
    --role-arn "arn:aws:iam::<your-account-id>:role/AmazonQDataSourceServiceRole" \
    --region us-east-1

这种方式让你的命令更整洁,并且更容易管理和版本控制复杂的配置。

第六章:故障排除与最佳实践

6.1 常见故障排除

  • 权限错误 (AccessDeniedException):
    • 检查你的 AWS 用户或角色是否有足够的权限调用 aws q 命令(q:* 或具体操作)。
    • 检查 Amazon Q 服务角色(用于应用)是否有足够的权限向 CloudWatch Logs 写入。
    • 检查 Amazon Q 数据源服务角色(用于数据源)是否有足够的权限访问你的数据源(如 S3, SharePoint 等)。
    • 确保服务角色信任策略允许 q.amazonaws.com 承担角色。
  • 资源未找到 (ResourceNotFoundException):
    • 检查你在命令中使用的 Application ID, Index ID, Data Source ID 等是否正确。
    • 确保你在正确的 AWS 区域执行命令。
  • 数据源同步失败 (DataSourceSyncJobStatus == FAILED):
    • 查看 CloudWatch Logs。这是诊断同步失败最重要的地方。查找与你的 Application ID 和 Data Source ID 相关的日志组。
    • 验证数据源服务角色权限是否正确。
    • 检查数据源配置是否正确(如 S3 bucket name, VPC 配置等)。
    • 确认数据源中的内容格式是否受支持。
  • 无效参数 (InvalidParameterException):
    • 检查命令参数是否正确,特别是 --configuration JSON 结构的语法和字段名。参考对应命令的 --help 输出或 AWS 文档。
    • 确认参数值是否符合要求(如 ID 格式、名称长度等)。
  • 等待资源状态: 创建某些资源(如 Index, Data Source)或启动同步任务后,它们需要时间才能变为 ACTIVESUCCEEDED 状态。在执行依赖于这些状态的后续操作之前,你可能需要在脚本中加入等待逻辑或手动检查状态。

6.2 最佳实践

  • 使用 AWS CLI v2: 确保使用最新版本的 AWS CLI v2,因为它包含了对最新服务的支持。
  • 指定区域: 始终在命令中明确指定 --region 参数,避免混淆。
  • 使用 JSON 输出: 使用 --output json 并结合 jq 来处理命令输出,这使得自动化和数据提取变得容易。
  • 遵循最低权限原则: 为 Amazon Q 服务角色和你的用户配置最小化所需的 IAM 权限。
  • 利用配置文件: 将频繁使用的参数(如 region, output format)保存在 AWS CLI 配置文件中 (~/.aws/config)。将复杂的 --configuration JSON 保存在单独的文件中,并在命令中引用。
  • 版本控制脚本: 将你的自动化脚本和配置文件存储在版本控制系统中(如 Git),以便跟踪更改、协作和回滚。
  • 错误处理: 在脚本中加入错误检查(如 Bash 中的 $? 或 Python 的 try/except)和日志记录,以便在自动化流程失败时能够及时发现并诊断问题。
  • 并行与串行: 对于不相关的资源创建,可以考虑并行执行命令。对于有依赖关系的(如必须先创建应用才能创建索引),则需要串行执行并可能需要等待状态变为 ACTIVE。

第七章:总结与展望

通过本文的学习,你应该已经掌握了 Amazon Q CLI 的基础和核心操作:

  • 理解了 Amazon Q 的资源模型及其与 CLI 命令的对应关系。
  • 完成了 AWS CLI 的安装与配置。
  • 学会了如何使用 aws q 命令创建、管理和删除 Application, Index, Data Source, Retriever, Chat Application 等核心资源。
  • 了解了如何启动和监控数据源同步任务。
  • 初步掌握了如何通过 CLI 进行 Amazon Q 的测试性交互。
  • 探索了利用 jq 处理 CLI 输出以及编写脚本进行自动化部署的技巧。
  • 了解了常见的故障排除方法和最佳实践。

Amazon Q CLI 是管理企业级 AI 助手 Amazon Q 的强大工具。掌握它将显著提升你的工作效率,让你能够以可重复、可扩展的方式构建、配置和维护 Amazon Q 应用。无论是自动化日常管理任务,还是将 Amazon Q 集成到你的 CI/CD 流程,CLI 都扮演着核心角色。

未来,随着 Amazon Q 功能的不断发展,CLI 也会持续更新以支持新的资源类型、参数和操作。持续关注 AWS CLI 的发布说明和 Amazon Q 的官方文档是保持你 CLI 技能与时俱进的关键。

现在,是时候打开你的终端,开始实践这些命令了!从简单的 aws q application list 开始,逐步构建你的第一个自动化 Amazon Q 部署脚本。祝你在快速掌握 Amazon Q CLI 的旅程中一切顺利!


发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部