ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

使用 AWS SDK for JavaScript (v3) 操作 AWS Support:从工单创建到解决的完整实战指南

使用 AWS SDK for JavaScript (v3) 操作 AWS Support:从工单创建到解决的完整实战指南 示例工程教程后端【免费下载链接】aws-doc-sdk-examplesWelcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below.项目地址https://gitcode.com/gh_mirrors/aw/aws-doc-sdk-examples点击查看免费下载AWS Support 是亚马逊云科技面向账号提供的技术支持服务允许用户提交支持工单Case、上传附件、跟踪沟通记录并按严重级别升级问题。本文基于aws-doc-sdk-examples仓库中 javascriptv3/example_code/support/README.md 的技术骨架结合该目录下的完整源码实现系统讲解如何用 AWS SDK for JavaScript (v3) 的aws-sdk/client-support客户端完成服务列表查询、工单创建、附件上传、沟通记录查看与工单解决的端到端流程。读完本文你将能够独立运行仓库中的 9 个单动作示例与 1 个完整场景并理解每个 API 调用的参数含义与常见异常处理方式。AWS Support 示例概览该示例集展示了如何通过 SDK for JavaScript (v3) 与 AWS Support 服务交互。AWS Support 为用户使用亚马逊云科技提供技术支持其 API 的核心操作对象是支持工单Case工单包含主题subject、正文描述communicationBody、服务service、类别category与严重级别severity并可附带附件attachment。仓库中该模块的完整文件结构如下javascriptv3/example_code/support/ ├── actions/ # 8 个单动作示例 │ ├── add-attachments-to-set.js │ ├── add-communication-to-case.js │ ├── create-case.js │ ├── describe-attachment.js │ ├── describe-cases.js │ ├── describe-communications.js │ ├── describe-services.js │ └── describe-severity-levels.js ├── libs/client.js # 共享的 SupportClient 实例 ├── scenarios/basic.js # “Learn the basics” 完整场景 ├── tests/ # vitest 单元测试 │ ├── basic.unit.test.js │ └── hello.unit.test.js ├── hello.js # Hello Support 入门示例 ├── package.json └── README.md⚠ 运行前的成本与权限提示原 README 明确给出如下警告任何在生产或测试账号运行前都应知悉运行这些代码可能产生 AWS 账号费用详细信息请参阅 AWS 定价与免费套餐页面。运行测试同样可能产生费用。建议为代码授予最小权限least privilege——只授予完成当前任务所需的最小权限集合。本代码未经所有 AWS 区域测试运行前请确认目标区域支持 Support API。需要特别强调的是create-case.js会在你的账号中真实创建一个 Support 工单resolve-case.js会真实将其解决这些操作会写入账号的 Support 记录务必使用测试数据示例中统一使用IGNORE: Test case作为主题并在正文中标注This is a test. Please ignore.。前置条件与安装运行本模块前需要满足 javascriptv3/README.md 中列出的通用前置条件安装最新稳定版 Node.js通过共享配置文件~/.aws/credentials或~/.aws/config配置 AWS 凭证具体参见 AWS SDK for JavaScript (v3) 开发者指南安装依赖在该文档所在目录执行npm i。本模块的 package.json 声明了以下关键依赖依赖版本要求用途aws-sdk/client-support^3.245.0Support 服务客户端与各 Command 类inquirer/prompts^5.0.1场景中的交互式选择/确认提示aws-doc-sdk-examples/lib^1.0.1仓库共享工具库如retry重试函数vitest^1.6.0devDependency单元测试框架所有示例均采用ECMAscript 6 (ES6) 模块语法import/exportpackage.json中type: module。如需转换为 CommonJSrequire参见 AWS 官方的 JavaScript ES6/CommonJS 语法转换指南。Hello Support入门第一个 API 调用hello.js是了解该服务的第一步它仅调用DescribeServices列出当前账号可用的支持服务并输出数量。核心代码如下见 hello.jsimport { DescribeServicesCommand, SupportClient } from aws-sdk/client-support; // 将 region 改为你偏好的 AWS 区域。 const client new SupportClient({ region: us-east-1 }); const getServiceCount async () { try { const { services } await client.send(new DescribeServicesCommand({})); return services.length; } catch (err) { if (err.name SubscriptionRequiredException) { throw new Error( You must be subscribed to the AWS Support plan to use this feature., ); } throw err; } }; export const main async () { try { const count await getServiceCount(); console.log(Hello, AWS Support! There are ${count} services available.); } catch (err) { console.error(Failed to get service count: , err.message); } };运行方式node ./hello.js这段代码体现了两个贯穿全部示例的关键设计统一的客户端实例hello.js内联创建客户端而单动作示例通过 libs/client.js 共享同一个SupportClient实例new SupportClient({})避免重复初始化。SubscriptionRequiredException异常处理DescribeServices会校验账号是否已订阅 AWS Support 计划。若账号未订阅如仅使用免费账号且未购买支持计划SDK 会抛出该异常示例将其转换为用户友好的中文提示“You must be subscribed to the AWS Support plan to use this feature.”。这是整个模块的通用前置校验。单动作示例8 个核心 API 逐一详解所有单动作示例位于 actions/ 目录每个文件演示一个独立的 Support API 调用均以node ./actions/fileName运行。下面是每个动作的用途、参数与实现细节。AddAttachmentsToSet —— 创建附件集文件add-attachments-to-set.jsimport { AddAttachmentsToSetCommand } from aws-sdk/client-support; import { client } from ../libs/client.js; const response await client.send( new AddAttachmentsToSetCommand({ // 每个附件集最多 3 个附件单个附件大小上限 5 MB。 attachments: [ { fileName: example.txt, data: new TextEncoder().encode(some example text), }, ], }), ); console.log(response.attachmentSetId);要点附件数据必须是字节数组示例用TextEncoder().encode()将字符串编码为 UTF-8 字节。不传attachmentSetId时新建附件集传入已有的attachmentSetId则为现有附件集追加附件。返回的attachmentSetId之后通过AddCommunicationToCase或CreateCase与工单关联。CreateCase —— 创建支持工单文件create-case.jsconst response await client.send( new CreateCaseCommand({ subject: IGNORE: Test case, // 工单主题 serviceCode: service-quicksight-end-user, // 服务代码 severityCode: low, // 严重级别代码 categoryCode: end-user-support, // 类别代码 communicationBody: This is a test. Please ignore., // 正文描述 }), ); console.log(response.caseId);参数获取途径源码注释明确指出serviceCode/categoryCode调用DescribeServices查询每个服务的代码与类别代码severityCode调用DescribeSeverityLevels查询当前支持计划下可用的严重级别代码。⚠ 该动作会创建真实工单。若创建工单时希望同时附加文件可在参数中提供attachmentSetId。DescribeServices —— 列出可支持服务文件describe-services.jsconst response await client.send(new DescribeServicesCommand({})); const serviceNames response.services.map((service) service.name); console.log(serviceNames);返回的services数组中的每个元素包含name、code以及该服务下可选的categories类别列表是CreateCase参数选择的数据来源。DescribeSeverityLevels —— 查询严重级别文件describe-severity-levels.jsconst response await client.send(new DescribeSeverityLevelsCommand({})); console.log(response.severityLevels);源码注释强调可用的严重级别取决于账号所购买的 Support 计划——高级支持计划的级别选项比基础支持计划更丰富例如low、normal、high、urgent等。DescribeCases —— 查询工单列表文件describe-cases.jsconst response await client.send(new DescribeCasesCommand({})); const caseIds response.cases.map((supportCase) supportCase.caseId); console.log(caseIds);默认返回账号中未解决的工单。可传入参数进行过滤与扩展源码注释建议参考 SDK 的 TypeScript 定义DescribeCasesCommandInput了解全部可选参数例如afterTime按时间过滤includeCommunications是否在结果中包含沟通记录includeResolvedCases是否包含已解决工单nextToken分页令牌场景中用于翻页查找。DescribeCommunications —— 查询工单沟通记录文件describe-communications.jsconst response await client.send( new DescribeCommunicationsCommand({ caseId: CASE_ID, // 替换为现有工单 ID }), ); const text response.communications.map((item) item.body).join(\n); console.log(text);返回的communications数组中的每条记录包含body正文、timeCreated创建时间与attachmentSet该条沟通所附的附件列表可用于追溯工单的完整对话历史。DescribeAttachment —— 获取附件详情文件describe-attachment.jsconst response await client.send( new DescribeAttachmentCommand({ attachmentId: ATTACHMENT_ID, // 替换为现有附件 ID }), ); console.log(response.attachment?.fileName);attachmentId可以通过DescribeCommunications或DescribeCases的返回结果获取。响应中的attachment对象包含fileName文件名与data附件内容字节可用TextDecoder解码为文本。AddCommunicationToCase —— 向工单添加沟通文件add-communication-to-case.jsconst response await client.send( new AddCommunicationToCaseCommand({ communicationBody: Adding an attachment., caseId: CASE_ID, // 现有工单 ID attachmentSetId, // 可选现有附件集 ID用于给工单附加文件 }), );这是把“附件集”正式挂载到工单的关键一步communicationBody为必填的沟通内容attachmentSetId可选传入后该沟通会携带附件。ResolveCase —— 解决工单文件resolve-case.jsconst response await client.send( new ResolveCaseCommand({ caseId: CASE_ID }), ); console.log(response.finalCaseStatus);调用成功后响应中的finalCaseStatus为工单的最终状态如resolved。Learn the basics端到端工单生命周期场景scenarios/basic.js 是本模块最完整的实战场景将上述 8 个 API 串联成一条完整的业务流水线。原 README 列出的能力清单如下获取并展示可用服务与严重级别使用选定的服务、类别与严重级别创建支持工单获取并展示当天创建的未解决工单为新工单添加附件集与沟通记录查看新附件与沟通记录解决工单获取并展示当天已解决的工单。场景执行流程场景主流程main函数按顺序执行以下步骤校验支持计划订阅verifyAccount()调用DescribeServices捕获SubscriptionRequiredException并抛出友好错误确保后续操作可行选择服务getService()调用DescribeServices获取全部服务列表通过inquirer/prompts的select交互式选择器让用户挑选——为保持可读性列表被截断为前 10 项services.slice(0, 10)选择类别getCategory(service)基于所选服务的categories让用户挑选类别选择严重级别getSeverityLevel()调用DescribeSeverityLevels后让用户选择创建工单createCase({...})将三个选择组装进CreateCaseCommand主题为IGNORE: Test case正文为This is a test. Please ignore.返回并打印caseId列出今日未解决工单getTodaysOpenCases()计算当天零点startOfToday的 ISO 时间戳用DescribeCasesCommand({ includeCommunications: false, afterTime })查询当天工单并通过retry间隔 1000ms、最多重试 15 次等待工单可见若无任何工单则抛出“Expected more than 0 open cases”错误创建附件集createAttachmentSet()用AddAttachmentsToSetCommand上传一个example.txt内容some example text挂载附件集linkAttachmentSetToCase(attachmentSetId, caseId)调用AddCommunicationToCaseCommand沟通正文为Adding attachment set to case.列出沟通记录getCommunications(caseId)调用DescribeCommunicationsCommand逐条打印“Communication created on. Has attachments.”描述附件getFirstAttachment(communications)找到第一条携带附件集的沟通并取其attachmentId再由getAttachment()调用DescribeAttachmentCommand最后用TextDecoder().decode(attachment.data)解码并打印附件内容确认并解决工单resolveCase(caseId)通过inquirer.confirm询问用户是否解决确认后调用ResolveCaseCommand等待并展示已解决工单getTodaysResolvedCases(caseId)用DescribeCasesCommandincludeResolvedCases: true分页查找目标工单见下方findCase过滤出status resolved的记录并打印因已解决工单需要时间刷新外层使用retry间隔 20000ms、最多重试 15 次轮询。分页查找的实现细节场景中值得单独提炼的是findCase函数basic.js 的findCase部分export const findCase async ({ caseId, cases, nextToken }) { const foundCase cases.find((c) c.caseId caseId); if (foundCase) return foundCase; if (nextToken) { const response await client.send( new DescribeCasesCommand({ nextToken, includeResolvedCases: true }), ); return findCase({ caseId, cases: response.cases, nextToken: response.nextToken }); } throw new Error(${caseId} not found.); };它采用递归方式消费DescribeCases返回的nextToken分页令牌在当前页未命中目标工单时携带令牌请求下一页直到找到工单或令牌耗尽。这展示了 Support API 结果集较大时当天工单可能成百上千正确处理分页的标准范式。运行方式详解原 README 给出了三种运行形态运行单个动作node ./actions/fileName运行场景node ./scenarios/fileName带命令行选项运行node ./scenarios/fileName --option1 --option2源码注释说明选项由 Node.js 内置的util.parseArgs配置解析各脚本具体支持哪些选项需查看该文件内的parseArgs用法。此外所有示例文件hello.js、actions/*.js、scenarios/basic.js末尾都包含同一段“直接运行”守卫代码if (process.argv[1] fileURLToPath(import.meta.url)) { main(); }这是 ES6 模块下判断“当前文件是否被直接执行”而非被其他模块import的惯用法被导入时不自动触发副作用直接node运行时才执行main()因此各示例导出的函数可被测试或组合复用例如场景中的verifyAccount、createCase等被单元测试直接引用。单元测试与验证仓库为场景与入门示例提供了 vitest 单元测试位于 tests/basic.unit.test.jshello.unit.test.js运行方式见 package.json 的test脚本npm testbasic.unit.test.js的设计值得借鉴它通过vi.doMock(aws-sdk/client-support, ...)将SupportClient的send方法替换为vi.fn()模拟同时将inquirer/prompts的select/confirm替换为可控的 mock从而在不真实调用 AWS 的前提下验证每个函数的逻辑分支覆盖包括verifyAccount成功、失败以及SubscriptionRequiredException三种路径createCase返回caseIdgetTodaysOpenCases无工单时抛错getFirstAttachment对无附件沟通返回undefinedresolveCase在用户取消确认时不调用 SDKfindCase的递归分页与“未找到抛错”分支。运行整个 javascriptv3 目录测试时遵循 javascriptv3/README.md 的说明npm test运行单元测试npm run integration-test运行集成测试输出写入unit_test.log/integration_test.log同样注意运行测试可能产生费用。小结与延伸阅读通过本文你可以掌握使用aws-sdk/client-support完成 Support 工单全生命周期管理的完整套路先以DescribeServices/DescribeSeverityLevels准备元数据再以CreateCase建单、AddAttachmentsToSetAddCommunicationToCase追加附件与沟通、DescribeCases/DescribeCommunications/DescribeAttachment查询进度最后用ResolveCase收尾并配合retry与分页令牌处理最终一致性带来的时延问题。如需深入可继续查阅支持服务的官方用户指南与 API 参考SDK for JavaScript (v3) 的 Support 客户端参考文档DescribeCasesCommandInput、DescribeCommunicationsCommandInput等 TypeScript 接口定义仓库中 javascriptv3/README.md 关于依赖安装、Docker 镜像Beta与测试入口的全局说明。Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.SPDX-License-Identifier: Apache-2.0赞分享示例工程教程后端【免费下载链接】aws-doc-sdk-examplesWelcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below.项目地址https://gitcode.com/gh_mirrors/aw/aws-doc-sdk-examples点击查看免费下载相关推荐Linux 内核 BPF_PROG_RUN 详解从用户态执行 eBPF 程序、无副作用测试与 XDP 活帧Live Frames模式Linux 内核 BPF_PROG_RUN 详解从用户态执行 eBPF 程序、无副作用测试与 XDP 活帧Live Frames模式 本文围绕 Linux示例工程教程后端AWS SDK for JavaScript (v3) 操作 Amazon S3 完整实战指南AWS SDK for JavaScript v3 操作 Amazon S3 完整实战指南 本篇技术指南以 javascriptv3/example_code/示例工程教程后端RD-Agent Qlib 因子场景数据源解析HDF5 数据约定、生成脚本与 LLM 编码循环的集成机制RD Agent Qlib 因子场景数据源解析HDF5 数据约定、生成脚本与 LLM 编码循环的集成机制 本篇指南基于 RD Agent 中 Qlib 因子研示例工程教程后端上一篇掌握开源语音合成MaryTTS完整使用指南与10个实战技巧下一篇智能窗口管家告别手动拖拽三键打造专属数字工作台创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表