aws-cli 实战指南:使用 `aws autoscaling create-launch-configuration` 创建启动配置(9 个实用示例)
2026/9/15 17:52:23 网站建设 项目流程

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 模型看,ImageIdInstanceType并非强制必填——如果指定了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.txt

2.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-role

3.1--iam-instance-profile参数要点

  • 对应 API 字段IamInstanceProfile,可接受实例配置文件名称或 ARN
  • 实例配置文件(Instance Profile)是 IAM 角色的容器,实例启动后会以临时凭证形式获得该角色权限,供实例内应用调用 S3、DynamoDB 等 AWS 服务;
  • 常见实践:先创建 IAM 角色 → 将角色附加到实例配置文件(同名)→ 在此处传入配置文件名称。官方示例文档 create-launch-configuration.rst 中的my-autoscaling-role即为角色名与配置文件同名的情况;examples-1.json 中官方注册的示例还提供了含IamInstanceProfileSecurityGroups组合的完整输入样例,可作为参考。

四、启用 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=true

4.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 dedicated

6.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 中;合法值为defaultdedicated
  • 联动条件:API 模型指出,一旦指定了AssociatePublicIpAddressPlacementTenancy,创建 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为卷类型(如gp3gp2io1等);
  • 若需加密、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 文档声明,可以给出以下结论:

  1. 本命令价值create-launch-configuration仍是管理存量 Auto Scaling 基础设施、理解实例模板参数模型的重要命令行工具,上述 9 个示例覆盖了安全、身份、监控、成本(Spot)、存储(EBS/实例存储)与网络(公网 IP、租期)六大维度的配置;
  2. AWS 官方立场:官方 API 文档明确"强烈建议不要使用启动配置",因为它们无法提供 Auto Scaling 与 EC2 的完整功能(如混合实例策略、版本化模板等),新项目应使用启动模板;
  3. 迁移思路:如果项目正从启动配置迁移,可先通过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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询