aws-cli 实战指南:使用aws autoscaling create-launch-configuration创建启动配置(9 个实用示例)
【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli
导读
create-launch-configuration是 AWS CLI 中用于创建 Auto Scaling 启动配置(Launch Configuration)的核心命令。启动配置定义了 Auto Scaling 组自动扩容时新启动 EC2 实例的模板:包括 AMI、实例类型、安全组、密钥对、用户数据、IAM 角色、监控级别、Spot 价格与块设备映射等。本文以 aws-cli 仓库中 create-launch-configuration.rst 官方示例文档为主线,完整继承其 9 个实战示例,并结合作者仓库中 service-2.json 的 API 模型定义与 paramfile.py 源码,深入讲解每个参数的取值、默认值与底层行为,帮助你从命令行层面全面掌握启动配置的创建、验证与最佳实践。
前提说明:启动配置是 Auto Scaling 的"老一代"实例模板方案。从 service-2.json 的 API 文档描述可见,AWS 官方强烈建议新项目优先使用启动模板(Launch Template),因为它支持 Auto Scaling 与 EC2 的完整功能。本文所有示例命令在 AWS CLI 环境中均可直接运行。
一、命令基础:语法、必需参数与无输出行为
1.1 底层 API 与参数模型
该命令对应 Auto Scaling API 的CreateLaunchConfiguration操作(POST 请求)。从 service-2.json 中的CreateLaunchConfigurationType结构定义看:
- 唯一必需参数:
LaunchConfigurationName(启动配置名称,在每个 Region 内对每个账户唯一); - 该操作可能抛出三类错误:
AlreadyExistsFault(同名配置已存在)、LimitExceededFault(超出账户启动配置配额上限)、ResourceContentionFault(资源竞争)。
1.2 命令成功时无输出
与原文档中所有示例的说明一致:该命令成功执行时不产生任何标准输出。这是 AWS CLI 的常规行为——异步/幂等型创建类命令默认静默成功。因此执行后建议通过describe-launch-configurations验证(见文末)。
1.3 最小可用命令
原文档示例 1 给出了最简形态,只需名称、AMI 与实例类型三个参数:
aws autoscaling create-launch-configuration \ --launch-configuration-name my-lc \ --image-id ami-04d5cc9b88example \ --instance-type m5.large从 API 模型看,ImageId与InstanceType并非强制必填——如果指定了InstanceId(基于已有实例创建),则两者均可省略。但作为通用实践,建议始终显式给出,避免依赖实例派生属性的不确定性。
二、创建带安全组、密钥对与引导脚本的启动配置
这是生产环境中最常见的组合用法。原文档示例 2 同时演示了三类参数:
aws autoscaling create-launch-configuration \ --launch-configuration-name my-lc \ --image-id ami-04d5cc9b88example \ --instance-type m5.large \ --security-groups sg-eb2af88example \ --key-name my-key-pair \ --user-data file://myuserdata.txt2.1 各参数说明
| 参数 | 说明 | 底层 API 字段 |
|---|---|---|
--security-groups | 分配给组内实例的安全组 ID 列表(注意传的是 ID 而非名称) | SecurityGroups |
--key-name | 用于 SSH 登录的 EC2 密钥对名称 | KeyName |
--user-data | 实例启动时执行的用户数据(引导脚本) | UserData |
2.2file://前缀的底层机制
--user-data file://myuserdata.txt中的file://前缀是 AWS CLI 的"参数文件加载"机制。在 paramfile.py 源码中可以看到该机制的实现:CLI 会识别file://前缀并调用get_file以文本模式读取文件内容作为参数值;对于二进制文件则需使用fileb://前缀。这意味着:
- 无需手动 base64 编码:API 模型的
UserData字段文档明确指出,使用命令行工具时 base64 编码由 CLI 自动完成,你只需用file://从文本文件加载内容即可; - 大小限制:用户数据上限为 16 KB;
- 如果脚本内容较短,也可以直接以普通字符串内联传入,但
file://方式更利于脚本的可维护性与转义处理。
2.3 引导脚本示例(myuserdata.txt 内容参考)
#!/bin/bash yum update -y yum install -y httpd systemctl start httpd systemctl enable httpd echo "Hello from Auto Scaling instance $(hostname -f)" > /var/www/html/index.html三、为启动配置绑定 IAM 角色
原文档示例 3 演示了如何让扩容出的实例自动获得 IAM 权限:
aws autoscaling create-launch-configuration \ --launch-configuration-name my-lc \ --image-id ami-04d5cc9b88example \ --instance-type m5.large \ --iam-instance-profile my-autoscaling-role3.1--iam-instance-profile参数要点
- 对应 API 字段
IamInstanceProfile,可接受实例配置文件名称或 ARN; - 实例配置文件(Instance Profile)是 IAM 角色的容器,实例启动后会以临时凭证形式获得该角色权限,供实例内应用调用 S3、DynamoDB 等 AWS 服务;
- 常见实践:先创建 IAM 角色 → 将角色附加到实例配置文件(同名)→ 在此处传入配置文件名称。官方示例文档 create-launch-configuration.rst 中的
my-autoscaling-role即为角色名与配置文件同名的情况;examples-1.json 中官方注册的示例还提供了含IamInstanceProfile、SecurityGroups组合的完整输入样例,可作为参考。
四、启用 EC2 详细监控(CloudWatch 指标粒度)
原文档示例 4 通过--instance-monitoring控制监控级别:
aws autoscaling create-launch-configuration \ --launch-configuration-name my-lc \ --image-id ami-04d5cc9b88example \ --instance-type m5.large \ --instance-monitoring Enabled=true4.1 监控粒度的成本权衡
API 模型对InstanceMonitoring字段有明确说明,这里有几个关键事实需要掌握:
- 默认值为
true(详细监控已启用),CloudWatch 每 1 分钟生成一次指标,会产生额外费用; - 设为
false时,CloudWatch 每 5 分钟生成一次指标; - 详细监控对需要快速响应伸缩告警的场景(如基于 CPU 利用率的扩展策略)有实际价值,但需自行评估成本;
- CLI 语法为结构体形式
Enabled=true,等价于 JSON 形式{"Enabled": true}。
五、创建纯 Spot 实例的启动配置
原文档示例 5 演示了如何让 Auto Scaling 组只使用 Spot 实例:
aws autoscaling create-launch-configuration \ --launch-configuration-name my-lc \ --image-id ami-04d5cc9b88example \ --instance-type m5.large \ --spot-price "0.50"5.1--spot-price参数细节
- 对应 API 字段
SpotPrice,含义是愿意为每个 Spot 实例支付的最高小时价格; - 有效范围为最小值 0.001(美元/小时);
- 当你的出价高于当前 Spot 市场价格时,Spot 实例才会被启动;出价被超出后,实例可能被回收;
- 指定该参数后,该启动配置将仅以 Spot 作为购买选项(不混合按需实例);
- 注意:修改最高价需要新建启动配置(启动配置不可变),且正在运行的实例会继续运行,只要其当前最高价仍高于当时 Spot 价格。
六、基于已有 EC2 实例创建启动配置
原文档示例 6 展示了从运行中的实例"克隆"配置的能力,并演示了两个覆盖参数:
aws autoscaling create-launch-configuration \ --launch-configuration-name my-lc-from-instance \ --instance-id i-0123a456700123456 \ --instance-type m5.large \ --no-associate-public-ip-address \ --placement-tenancy dedicated6.1 派生规则与覆盖行为
- 指定
InstanceId后,启动配置会从该实例派生 AMI、实例类型等属性,但块设备映射不会自动派生; - 如需自定义块设备映射或覆盖其他实例属性,须在同一请求中显式指定(对应示例 7/8/9);
- 示例中
--no-associate-public-ip-address是布尔参数的取反写法,等价于--associate-public-ip-address false,即禁止 Auto Scaling 为实例分配公网 IPv4; --placement-tenancy dedicated将实例置于单租户硬件(dedicated tenancy),只能启动到 VPC 中;合法值为default或dedicated;- 联动条件:API 模型指出,一旦指定了
AssociatePublicIpAddress或PlacementTenancy,创建 Auto Scaling 组时必须同时指定VPCZoneIdentifier(至少一个子网)。
七、块设备映射:EBS 卷、实例存储卷与设备抑制
块设备映射(Block Device Mapping)决定实例启动时挂载哪些块设备。原文档示例 7、8、9 分别演示了三种典型场景,均以 JSON 数组形式传给--block-device-mappings。
7.1 示例 7:附加一个 EBS gp3 数据卷
aws autoscaling create-launch-configuration \ --launch-configuration-name my-lc \ --image-id ami-04d5cc9b88example \ --instance-type m5.large \ --block-device-mappings '[{"DeviceName":"/dev/sdh","Ebs":{"VolumeSize":20,"VolumeType":"gp3"}}]'要点:
DeviceName为设备挂载点(如/dev/sdh);Ebs.VolumeSize为卷大小(GiB),示例为 20;Ebs.VolumeType为卷类型(如gp3、gp2、io1等);- 若需加密、IOPS 等高级属性,可在
Ebs对象内继续扩展(如"Encrypted":true)。
7.2 示例 8:附加实例存储卷(Ephemeral)
aws autoscaling create-launch-configuration \ --launch-configuration-name my-lc \ --image-id ami-04d5cc9b88example \ --instance-type m5.large \ --block-device-mappings '[{"DeviceName":"/dev/sdc","VirtualName":"ephemeral1"}]'要点:
VirtualName: "ephemeral1"表示使用实例存储(临时存储)卷,数据不持久,实例停止/终止后数据丢失;- 并非所有实例类型都提供实例存储,需与所选实例类型匹配。
7.3 示例 9:抑制 AMI 默认块设备(NoDevice)
aws autoscaling create-launch-configuration \ --launch-configuration-name my-lc \ --image-id ami-04d5cc9b88example \ --instance-type m5.large \ --block-device-mappings '[{"DeviceName":"/dev/sdf","NoDevice":""}]'要点:
- AMI 自带块设备映射,默认会被继承(对应 API 文档:默认使用 AMI 块设备映射);
- 当需要阻止某个设备在启动时挂载时,用
"NoDevice":""明确抑制,例如示例中抑制/dev/sdf; - 这一机制常用于避免 AMI 中多余数据卷被意外挂载。
7.4 JSON 引号规范(重要)
三个示例都以内联 JSON 字符串传递,原文档特别提示了引号规则:JSON 属性名与字符串值需使用双引号,整个 JSON 需用单引号包裹,避免与 shell 冲突。若 JSON 较复杂,更推荐使用file://mapping.json方式从文件加载(机制同 2.2 节),既规避转义问题又便于复用。
八、创建后的验证与常见错误排查
8.1 验证命令
由于创建命令静默无输出,推荐创建后执行:
# 查看指定启动配置 aws autoscaling describe-launch-configurations \ --launch-configuration-names my-lc # 列出全部启动配置(可加 --max-items 分页) aws autoscaling describe-launch-configurations输出中包含名称、AMI、实例类型、创建时间、安全组、密钥对、Spot 价格、块设备映射等完整属性,可与预期一一核对。对应示例文档位于 describe-launch-configurations.rst。
8.2 常见错误与对策
| 报错场景 | 原因 | 对策 |
|---|---|---|
AlreadyExistsFault | 同一 Region 内配置名重复 | 换名,或先执行 delete-launch-configuration.rst 删除旧配置 |
LimitExceededFault | 超出账户启动配置配额 | 调用describe-account-limits查看配额并清理无用配置 |
| 公网 IP/租期参数被忽略 | 创建 Auto Scaling 组时未指定子网 | 创建组时通过--vpc-zone-identifier指定至少一个子网 |
8.3 清理与生命周期提示
启动配置创建后不可修改(无 update 操作),任何变更都需要新建配置。确认不再使用后应及时删除:
aws autoscaling delete-launch-configuration --launch-configuration-name my-lc九、总结:启动配置 vs 启动模板
综合原文档与 service-2.json 中的 API 文档声明,可以给出以下结论:
- 本命令价值:
create-launch-configuration仍是管理存量 Auto Scaling 基础设施、理解实例模板参数模型的重要命令行工具,上述 9 个示例覆盖了安全、身份、监控、成本(Spot)、存储(EBS/实例存储)与网络(公网 IP、租期)六大维度的配置; - AWS 官方立场:官方 API 文档明确"强烈建议不要使用启动配置",因为它们无法提供 Auto Scaling 与 EC2 的完整功能(如混合实例策略、版本化模板等),新项目应使用启动模板;
- 迁移思路:如果项目正从启动配置迁移,可先通过
describe-launch-configurations导出当前参数,再映射为启动模板的等价字段,最后更新 Auto Scaling 组的--launch-template引用。
无论选择哪种方案,理解本文的参数模型(默认值、联动条件、引号规范、静默输出行为)都能帮助你在命令行层面做出正确、可复现的配置决策。
【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考