
AWS CLI 实战使用 describe-launch-configurations 查询 Auto Scaling 启动配置【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli本篇技术指南围绕 AWS CLI 官方示例文档 describe-launch-configurations.rst 展开系统讲解aws autoscaling describe-launch-configurations命令的两种典型用法按名称精确查询、分页批量遍历、返回 JSON 中每个字段的业务含义以及该命令背后的服务模型与 CLI 分页机制。读完本文你将能够独立完成启动配置的查询、结果解读与全量遍历并能理解NextToken、--starting-token、--max-items等分页参数的真实工作原理。命令概览describe-launch-configurations 是什么在 Amazon EC2 Auto Scaling 中启动配置Launch Configuration是定义 EC2 实例如何被启动的模板包含 AMI ID、实例类型、安全组、密钥对、块设备映射等核心参数。describe-launch-configurations用于获取当前账号与区域Region内启动配置的信息对应底层 API 操作DescribeLaunchConfigurations。从当前仓库的服务模型 service-2.json 可以看到该操作的定义HTTP 协议POST /Auto Scaling API 采用 Query/XML 风格协议所有操作共用根路径通过 Action 参数区分输入形状LaunchConfigurationNamesType输出形状LaunchConfigurationsType可能的错误InvalidNextTokenNextToken 无效或已过期、ResourceContentionFault服务端资源争用该命令的官方描述为 Gets information about the launch configurations in the account and Region即默认作用于当前账号和当前 Region受AWS_DEFAULT_REGION或--region控制。用法一按名称精确查询指定启动配置官方示例文档给出的第一种用法是通过--launch-configuration-names参数指定启动配置名称一次查询一个或多个指定的配置aws autoscaling describe-launch-configurations \ --launch-configuration-names my-launch-config从模型定义service-2.json可知LaunchConfigurationNames是一个列表参数单次最多可传 50 个名称。如果省略该参数则返回当前账号和区域内全部启动配置。输出字段逐一解读上述命令的典型输出如下示例来自官方文档以下逐字段解释{ LaunchConfigurations: [ { LaunchConfigurationName: my-launch-config, LaunchConfigurationARN: arn:aws:autoscaling:us-west-2:123456789012:launchConfiguration:98d3b196-4cf9-4e88-8ca1-8547c24ced8b:launchConfigurationName/my-launch-config, ImageId: ami-0528a5175983e7f28, KeyName: my-key-pair-uswest2, SecurityGroups: [ sg-05eaec502fcdadc2e ], ClassicLinkVPCSecurityGroups: [], UserData: , InstanceType: t2.micro, KernelId: , RamdiskId: , BlockDeviceMappings: [ { DeviceName: /dev/xvda, Ebs: { SnapshotId: snap-06c1606ba5ca274b1, VolumeSize: 8, VolumeType: gp2, DeleteOnTermination: true, Encrypted: false } } ], InstanceMonitoring: { Enabled: true }, CreatedTime: 2020-10-28T02:39:22.321Z, EbsOptimized: false, AssociatePublicIpAddress: true, MetadataOptions: { HttpTokens: required, HttpPutResponseHopLimit: 1, HttpEndpoint: disabled } } ] }对照 service-2.json 中 LaunchConfiguration 结构体 的成员定义各字段含义如下字段类型含义LaunchConfigurationNameString最长 255启动配置名称必返回字段之一LaunchConfigurationARNString启动配置的 Amazon 资源名称ARN唯一标识ImageIdString启动 EC2 实例所用的 AMI ID必返回字段KeyNameString实例关联的密钥对名称用于 SSH 登录SecurityGroupsList分配给 Auto Scaling 组内实例的安全组 ID 列表ClassicLinkVPCId/ClassicLinkVPCSecurityGroupsString / List仅用于向后兼容的 ClassicLink 遗留字段EC2-Classic 淘汰后通常为空UserDataString实例启动时执行的用户数据脚本上限 16 KBCLI 会代为做 base64 编码InstanceTypeString实例类型如 t2.micro必返回字段KernelId/RamdiskIdString与 AMI 关联的内核 ID / RAM 磁盘 ID默认 AMI 时为空串BlockDeviceMappingsList启动时挂载的块设备映射未显式配置时沿用 AMI 的默认映射InstanceMonitoringStructureEnabled: true表示详细监控false表示基本监控SpotPriceStringSpot 实例最高小时价格仅在启用 Spot 时出现IamInstanceProfileString实例关联的 IAM 实例配置文件名称或 ARNCreatedTimeTimestamp启动配置的创建时间必返回字段EbsOptimizedBoolean是否为 EBS 优化实例AssociatePublicIpAddressBoolean是否给实例分配公网 IPv4 地址默认子网默认分配非默认子网默认不分配PlacementTenancyString实例的置放租约default或dedicatedMetadataOptionsStructure实例元数据服务IMDS选项HttpTokensrequired/optional、HttpPutResponseHopLimitPUT 响应跳数上限、HttpEndpointenabled/disabled其中LaunchConfigurationName、ImageId、InstanceType、CreatedTime是模型的required字段见 service-2.json#L3811-L3818即每次返回都必然存在其余字段可能因创建时未配置而省略或为空。输出级联验证examples-1.json仓库中的服务示例文件 examples-1.json 保存了与 RST 文档一致的官方示例数据输入LaunchConfigurationNames: [my-launch-config]可用作测试与联调时构造 mock 响应的依据。此外配套的集成测试目录 tests/functional/autoscale 中也有针对 Auto Scaling 命令的断言用例读者可在本地运行pytest验证命令行为。用法二限制返回数量并分页遍历全部配置当账号下启动配置数量较多时官方文档给出了第二种用法——用--max-items限制单次返回条数aws autoscaling describe-launch-configurations \ --max-items 1如果输出中包含NextToken字段说明还有更多启动配置未返回。此时需要把NextToken的值传给下一次调用的--starting-token参数继续拉取后续数据aws autoscaling describe-launch-configurations \ --starting-token Z3M3LMPEXAMPLE注意示例中的Z3M3LMPEXAMPLE是文档占位符实际使用时必须使用前一次响应中返回的真实NextToken值。需要说明的是--max-items和--starting-token是AWS CLI 统一提供的分页参数其底层被映射到 API 的MaxRecords与NextToken参数。根据 service-2.json#L3924-L3931 的定义NextToken上一次调用返回的令牌用于获取下一批数据MaxRecords单次调用返回的最大条数默认 50最大 100。分页机制的源码级原理Auto Scaling 服务的分页配置定义在 paginators-1.json 中DescribeLaunchConfigurations的映射关系如下DescribeLaunchConfigurations: { input_token: NextToken, output_token: NextToken, limit_key: MaxRecords, result_key: LaunchConfigurations }四个键的含义input_token/output_token输入与输出中的令牌字段名均为NextToken构成上一页输出 → 下一页输入的闭环limit_key控制每页条数的 API 参数名即MaxRecordsresult_key响应中真正承载数据的列表字段即LaunchConfigurations。在 AWS CLI 侧分页能力由 customizations/paginate.py 统一实现对于任何可分页操作CLI 会隐藏服务各自不同的分页参数替换为统一的--starting-token和--max-items两个参数服务原生参数仍可用但不再显示在帮助文档中以保持向后兼容。该文件同时定义了这两个参数的官方帮助文本--starting-token指定分页起始位置的令牌即前一次被截断响应中的NextToken--max-items命令输出中返回的总条目数若可用条目多于该值输出中会携带NextToken下一次调用将其传给--starting-token即可继续。此外PageArgument 类负责参数类型映射string/integer/long 到 Python 原生类型并会在传入非正数的--max-items时向 stderr 打印警告Non-positive values for --max-items may result in undefined behavior。同时CLI v2 还约定不要直接单独解析并使用响应中的NextToken字段而应始终通过--starting-token传递。分页遍历的完整脚本模式在生产环境中手动翻页不现实推荐用--query结合循环实现全量拉取。下面是一个把多页结果汇总的 Shell 示例#!/usr/bin/env bash # 使用 --output text 与 --query 提取 NextToken循环翻页 token while :; do if [ -z $token ]; then resp$(aws autoscaling describe-launch-configurations --max-items 50) else resp$(aws autoscaling describe-launch-configurations \ --max-items 50 --starting-token $token) fi echo $resp | grep LaunchConfigurationName token$(echo $resp | grep NextToken | awk -F {print $4}) [ -z $token ] break done若只关心名称列表也可直接用内置查询aws autoscaling describe-launch-configurations \ --query LaunchConfigurations[].LaunchConfigurationName \ --output text实用参数速查下表汇总了describe-launch-configurations的常用参数及其取值约束依据 service-2.json 与 paginate.py参数对应 API 字段类型说明与约束--launch-configuration-namesLaunchConfigurationNamesList启动配置名称列表最多 50 个省略则返回全部--max-itemsMaxRecords经 limit_key 映射Integer单页返回条数API 层默认 50、最大 100传入非正数会触发警告--starting-tokenNextToken经 input_token 映射String上一页输出的NextToken值用于继续翻页--region—String指定查询区域默认取环境变量或配置文件--output—String输出格式json/text/table/yaml--query—StringJMESPath 表达式用于过滤输出字段--cli-input-json—String通过 JSON 文件传入全部参数注意 CLI v2 中若文件含分页参数会自动关闭分页关于最后一点根据 paginate.py#L300-L318 的升级警告在 AWS CLI v2 中若通过--cli-input-json传入包含分页参数的 JSON自动分页会被关闭v1 行为是忽略这些参数迁移到 v2 时应从输入 JSON 中移除分页参数。错误处理与常见问题该操作可能抛出的错误定义在 service-2.json#L414-L417InvalidNextToken传入的NextToken无效或已过期。通常是因为令牌来自其他 Region/账号或手动拼接/复用了过期令牌。解决方法是重新从头发起不带--starting-token的调用获取新的令牌。ResourceContentionFaultAuto Scaling 服务端出现资源争用。这是瞬时错误可通过重试解决如启用 AWS CLI 的--retries选项或外层脚本指数退避。其他常见问题查询不到配置确认--region与--launch-configuration-names拼写是否正确启动配置属于区域资源不同区域互不可见。需要完整字段但输出被截断若数据量大--max-items未设置时 API 默认每页最多返回 50 条务必检查输出中是否存在NextToken。关联操作与延伸阅读启动配置的生命周期由一组配套命令管理官方示例均可在 awscli/examples/autoscaling 目录找到create-launch-configuration.rst创建启动配置对应CreateLaunchConfigurationdelete-launch-configuration.rst删除启动配置对应DeleteLaunchConfigurationdescribe-auto-scaling-groups.rst查询 Auto Scaling 组可确认某启动配置被哪些组引用update-auto-scaling-group.rst更新 Auto Scaling 组包括切换其使用的启动配置。在实际运维中典型的排障顺序是先通过describe-launch-configurations核对实例模板AMI、实例类型、安全组、UserData再通过 describe-scaling-activities.rst 查看扩容活动记录从而定位实例启动失败或配置失配的问题。需要说明的是启动配置自 2023 年起 AWS 已不再支持新创建新项目建议改用启动模板Launch Template但存量资源的查询与审计仍高度依赖本文所讲的命令与分页机制。【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考