news 2026/9/14 19:57:57

深入解析 AWS CLI 中 aws application-signals list-service-dependents:查询指定服务的调用方(Dependents)列表

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
深入解析 AWS CLI 中 aws application-signals list-service-dependents:查询指定服务的调用方(Dependents)列表

深入解析 AWS CLI 中 aws application-signals list-service-dependents:查询指定服务的调用方(Dependents)列表

【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli

本文以 list-service-dependents 官方示例 为主线,完整讲解aws application-signals list-service-dependents命令的参数、输出结构与实际输出样例,并结合 aws-cli 仓库内打包的 Application Signals API 模型(API 版本 2024-04-15)逐项印证参数约束、时间取整规则与分页机制。读完本文,你可以直接用该命令排查“在给定时间窗口内,到底有哪些服务、Synthetics 金丝雀或 RUM 客户端调用了我的服务”,并正确理解KeyAttributesMaxResultsNextToken等关键参数。

1. ListServiceDependents 是做什么的

Application Signals(Amazon CloudWatch 的应用监控能力)通过自动发现应用拓扑,记录了实体之间的调用关系。list-service-dependents对应的 API 操作为ListServiceDependents,其官方定义(见 service-2.json 中operations.ListServiceDependentsdocumentation字段)为:

Returns the list of dependents that invoked the specified service during the provided time range. Dependents include other services, CloudWatch Synthetics canaries, and clients that are instrumented with CloudWatch RUM app monitors.

即:返回在指定时间范围内调用过某个服务的所有调用方(dependents)列表。这里的“调用方”不仅包括其他服务,还包括 CloudWatch Synthetics 金丝雀,以及接入了 CloudWatch RUM 应用监控的客户端。从 API 模型看,该操作还有几个值得注意的属性:

  • HTTP 方法为POST /service-dependents,成功响应码 200;
  • 标记为"readonly": true,即只读操作,不会修改任何资源;
  • 可能抛出ValidationException(参数校验失败)与ThrottlingException(请求限流)两类错误。

2. 官方示例命令逐行解读

官方示例文档 给出的完整命令如下:

aws application-signals list-service-dependents \ --start-time 1732021200 \ --end-time 1732107600 \ --key-attributes Environment=generic:default,Name=PetSite,Type=Service

各参数含义如下:

参数是否必填说明
--start-time查询时间窗起点。CLI 按 epoch 秒传递(如1732021200)。API 模型明确说明“Your requested start time will be rounded to the nearest hour”——请求时间会被取整到最接近的整点
--end-time查询时间窗终点,同样是 epoch 秒(如1732107600),同样按整点取整
--key-attributes用来指定“要查询哪个服务”的字符串键值对。API 文档要求至少提供TypeNameEnvironment三个属性
--max-results单次返回的最大结果数,缺省 50;模型约束为 1~100(见下文源码佐证)
--next-token上一次调用返回的分页游标,传入后获取下一页结果

2.1--key-attributes的键值规则

KeyAttributes在 API 模型中是一个字符串到字符串的 map,其取值规则在 service-2.json 的ListServiceDependentsInput.KeyAttributes文档中写得很清楚,各键的用途互斥:

  • Type:标识对象类型。示例中使用Type=Service表示按“服务”定位目标;
  • Name:对象名称,仅当TypeServiceRemoteServiceAWS::Service时使用。示例中的Name=PetSite即目标服务名;
  • Environment:对象所处的环境(服务部署位置/归属),示例中为generic:default
  • ResourceType:资源类型,仅当TypeResourceAWS::Resource时使用;
  • Identifier:资源对象的标识符,同样仅用于Resource/AWS::Resource类型。

从源码结构看,该 map 还有严格的基数约束:Attributesshape 定义"max": 4, "min": 1,即键值对数量必须为 1~4 个;键名KeyAttributeName的正则为[a-zA-Z]{1,50}(仅字母、最长 50),值KeyAttributeValue最长 1024。示例命令恰好传入了 3 个属性(EnvironmentNameType),符合最小必填集要求。

CLI 侧的Environment=generic:default,Name=PetSite,Type=Service写法是 aws-cli 的shorthand 语法Key=Value逗号分隔的键值对简写),CLI 会将其解析为 API 要求的 map 结构后再发送。

2.2 时间参数的取整行为

示例中的两个时间戳均为 epoch 秒。API 模型对输入/输出时间的说明有一致且重要的细节:请求时间会被取整到整点,且输出中的StartTime/EndTime显示的是 Application Signals 实际采用的时间——“It might not match your request exactly, because it was rounded to the nearest hour.” 因此解读响应时应以输出中的起止时间为准,而非自己传入的原始值。

3. 完整输出结构与字段解析

官方示例给出的完整响应如下(原样继承自 示例文档):

{ "ServiceDependents": [{ "OperationName": "", "DependentKeyAttributes": { "Identifier": "pet-api-canary-hao", "ResourceType": "AWS::Synthetics::Canary", "Type": "AWS::Resource" }, "DependentOperationName": "", "MetricReferences": [] }, { "OperationName": "", "DependentKeyAttributes": { "Identifier": "PetSite", "ResourceType": "AWS::Synthetics::Canary", "Type": "AWS::Resource" }, "DependentOperationName": "", "MetricReferences": [] }], "StartTime": "2024-12-24T05:00:00+00:00", "EndTime": "2024-12-25T06:00:01+00:00" }

对照 API 模型中ListServiceDependentsOutput的字段定义,各字段含义如下:

  • ServiceDependents(必填):调用方数组,模型约束为 0~100 个元素(ServiceDependentsshape 定义"max": 100)。示例中返回了两个调用方,均为 Synthetics 金丝雀——pet-api-canary-haoPetSite,其TypeAWS::ResourceResourceTypeAWS::Synthetics::Canary。注意这里用的是Identifier而非Name,与第 2.1 节“Identifier仅用于AWS::Resource类型”的规则完全一致;
  • OperationName:被调用实体上的操作名(模型约束 1~255 字符)。示例中为空字符串,因为金丝雀调用未携带操作粒度信息;
  • DependentKeyAttributes:调用方自身的键值属性 map,规则与入参的KeyAttributes相同(1~4 个键值对);
  • DependentOperationName:当调用方本身是一个服务、且从一个具体操作发起调用时,该操作名显示在此处;
  • MetricReferences:Application Signals 为该调用方发现的 CloudWatch 指标引用数组。每个MetricReference必填NamespaceMetricTypeMetricName三个字段,可选Dimensions(0~30 个维度)与AccountId。示例中该数组为空[],而相邻的 list-service-dependencies 示例 中则展示了非空的完整形态:Namespace=ApplicationSignalsMetricType分别为LATENCY/FAULT/ERROR,对应MetricNameLatency/Fault/Error,并带有EnvironmentOperationRemoteEnvironmentRemoteOperationRemoteServiceService六个维度。这说明:拿到MetricReferences后可以直接组合出 CloudWatch 指标查询条件;
  • StartTime/EndTime(必填):服务端实际采用的时间窗口,按整点取整后回显。示例输出显示为2024-12-24T05:00:00+00:002024-12-25T06:00:01+00:00,注意返回的是 ISO 8601 格式,与输入时的 epoch 秒格式不同;
  • NextToken(可选):当结果被截断时返回,用于翻页。

4. 源码级佐证:参数约束与分页实现

aws-cli 将 Application Signals 的服务模型完整打包在 awscli/botocore/data/application-signals/ 目录下(当前仓库收录的 API 版本为 2024-04-15,含 30 个操作)。从 service-2.json 可以确认以下实现事实:

  1. 必填参数ListServiceDependentsInput"required"数组为["StartTime", "EndTime", "KeyAttributes"],与 CLI 必填参数一一对应。缺少任一必填参数会触发模型声明的ValidationException

  2. MaxResults约束ListServiceDependentsMaxResultsshape 定义为{"type": "integer", "box": true, "max": 100, "min": 1},即--max-results合法取值 1~100,缺省 50;

  3. 分页定义:paginators-1.json 中明确注册了该操作的分页器:

    "ListServiceDependents": { "input_token": "NextToken", "output_token": "NextToken", "limit_key": "MaxResults", "result_key": "ServiceDependents" }

    这带来两个实际用法:一是手动翻页,将上一次响应中的NextToken作为下一次调用的--next-token传入;二是利用 aws-cli 的aws paginate子命令(该子命令正是读取paginators-1.json自动生成翻页逻辑),一次性拉取全部分页,无需手写 token 传递循环。

从源码结构看,result_keyServiceDependents意味着paginate聚合时展开的正是该数组;limit_keyMaxResults意味着aws paginate application-signals list-service-dependents --max-items N可通过分页器内部自动换算每页大小。

5. 与 list-service-dependencies 的配合使用:上下游调用关系

排查调用链时,list-service-dependents(谁调用了我)通常需要与 list-service-dependencies 示例(我调用了谁)成对使用。两条命令的参数结构完全同构(--start-time--end-time--key-attributes及相同的分页参数),差异仅在结果方向:

  • list-service-dependents返回ServiceDependents数组,每项含DependentKeyAttributes/DependentOperationName
  • list-service-dependencies返回ServiceDependencies数组,每项含DependencyKeyAttributes/DependencyOperationName,且其MetricReferences通常非空(示例中返回了LatencyFaultError三条带完整维度的指标引用)。

因此一个典型的排查流程是:先用list-service-dependents锁定上游调用方,再用list-service-dependencies查看下游依赖及对应的ApplicationSignals命名空间指标,必要时把MetricReferences中的Namespace/MetricName/Dimensions直接用于 CloudWatch 指标查询做进一步下钻。

6. 使用注意事项小结

  1. 前提条件:目标服务必须已被 Application Signals 发现/接入(否则时间窗口内没有拓扑数据,ServiceDependents可能为空数组——模型允许min: 0);
  2. 时间格式:命令行传入 epoch 秒;输出回显为 ISO 8601 且按整点取整,核对窗口时以输出值为准;
  3. KeyAttributes 最小集:必须包含TypeNameEnvironment(服务类对象)或TypeIdentifierResourceType(资源类对象),键值对总数不超过 4;
  4. 分页:单页最多 100 条、默认 50 条;结果集较大时检查响应中是否出现NextToken,并配合--next-tokenaws paginate获取完整列表;
  5. 限流:API 声明可能抛出ThrottlingException,批量脚本中建议对 429 类错误做退避重试(aws-cli 内置的 retry 机制会自动处理部分限流场景)。

以上内容均以当前仓库中的示例文档与 API 模型为准:示例命令来自 awscli/examples/application-signals/list-service-dependents.rst,参数约束与分页器来自 awscli/botocore/data/application-signals/2024-04-15/service-2.json 与 awscli/botocore/data/application-signals/2024-04-15/paginators-1.json,可直接在仓库中查阅核对。

【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/14 19:57:08

Flutter跨平台天气应用开发:和风天气API与鸿蒙适配

1. 项目背景与核心需求天气预报应用作为移动开发领域的经典练手项目,看似简单却涵盖了网络请求、数据解析、UI渲染等核心开发技能。这次我们要用Flutter框架结合retrofit库,对接和风天气API,打造一个鸿蒙系统兼容的天气应用城市卡片组件。选择…

作者头像 李华
网站建设 2026/9/14 19:55:32

仓颉+Harness实战:从零跑通AI微服务编排

1. 项目概述:为什么一个“Harness实战”值得专门写篇踩坑记录? 最近在用仓颉语言做模型能力编排时,真正把 deepseek harness 跑通、调通、跑稳,前后花了将近三周——不是因为代码写不出来,而是因为整个链路里埋了太多“…

作者头像 李华
网站建设 2026/9/14 19:55:30

生物医药创新生态:跨国药企与本土力量的协同研发

1. 项目背景解析:生物医药创新生态的协同进化拜耳Co.Lab共创平台的这次入驻事件,本质上是跨国药企与本土创新力量在研发模式上的深度重构。作为全球生命科学领域的百年巨头,拜耳近年来通过Co.Lab这种开放式创新平台,正在将传统的&…

作者头像 李华
网站建设 2026/9/14 19:55:26

Python+AI实战教程:从爬虫到自动化报表的工程化路径

1. 这套PythonAI教程到底值不值得花600集时间学?——一个带过37个转行学员的老手真实拆解我带过37个零基础转行做数据分析和自动化开发的学员,平均年龄28.6岁,其中21个是文科背景、5个是传统制造业从业者、还有3个是教培行业转型的老师。他们…

作者头像 李华
网站建设 2026/9/14 19:54:23

从ArcFace到工程落地:猪脸识别技术解析与实现

简介:京东JDD大赛猪脸识别项目以商品猪个体身份识别为赛题,涵盖数据预处理、模型训练、测试与可视化全流程,适合计算机、数学、电子信息等专业学生用于课程设计、期末大作业或毕业设计参考。压缩包共61个文件,其中24个Python脚本构…

作者头像 李华
网站建设 2026/9/14 19:52:54

上帝视角拍摄全攻略:从设备选型到后期处理的实战指南

你有没有过这种经历——站在天桥上往下看,脚下的车流和人潮突然变成一幅会动的画,你明明没有参与其中,却好像把一切都收在眼底。这种从现实里抽离出去、俯视全局的感觉,正是"上帝视角"最迷人的地方,英文里常…

作者头像 李华