
【免费下载链接】context-hub项目地址https://gitcode.com/gh_mirrors/co/context-hub点击查看免费下载本文基于 context-hub 仓库中的 AWS EC2 Auto Scaling JavaScript v3 指南系统讲解如何在 Node.js / JavaScript 项目中通过aws-sdk/client-auto-scaling完成伸缩组的检查、期望容量调整、组配置更新、目标组挂载、目标追踪伸缩策略创建以及实例刷新Instance Refresh驱动的发布流程。读完本文你将掌握该 SDK 的完整命令模式与可复制的代码骨架并理解它与 Application Auto Scaling、EC2、ELBv2 相关包之间的职责边界。适用边界Golden Rule在 context-hub 的 AWS 文档体系中aws-sdk/client-auto-scaling的定位非常明确它只用于管理 EC2 Auto Scaling group覆盖以下操作列出与检查伸缩组DescribeAutoScalingGroups更改期望容量SetDesiredCapacity更新组设置UpdateAutoScalingGroup挂载已有的 ELBv2 目标组AttachLoadBalancerTargetGroups创建伸缩策略PutScalingPolicy启动实例刷新StartInstanceRefresh与查询伸缩活动DescribeScalingActivities不要把这个包用于其他 AWS 扩缩容体系边界如下目标场景应使用的包参考文档ECS 服务、DynamoDB、Aurora、Lambda 预留并发、SageMaker 等接入 Application Auto Scaling 的服务aws-sdk/client-application-auto-scalingApplication Auto Scaling 指南创建/更新 Launch Template、检查底层 EC2 实例aws-sdk/client-ec2EC2 指南创建 Target Group 与负载均衡器挂载前置条件aws-sdk/client-elastic-load-balancing-v2ELBv2 指南从仓库文档结构看application-auto-scaling与auto-scaling是并列的两个 doc 条目二者的 npm 包名高度相似是最容易混淆的一对包官方指南在Common Pitfalls中也把不要混淆 EC2 Auto Scaling 与 Application Auto Scaling列为第一条。安装npm install aws-sdk/client-auto-scaling常用配套包npm install aws-sdk/client-ec2 aws-sdk/client-elastic-load-balancing-v2 aws-sdk/credential-providers指南中的示例统一使用 ESM import 和 AWS SDK v3 的命令模式client.send(new Command(input))。每个命令都是显式 import 的类而不是从 client 上取方法——这是 SDK v3 模块化设计的核心用法。凭据与 Region 配置AutoScalingClient使用 AWS SDK for JavaScript v3 的标准凭据提供器链credential provider chain。本地开发时需要设置 region 并提供 profile 或直连凭据。推荐的本地配置使用共享 profileexport AWS_REGIONus-east-1 export AWS_PROFILEdev也可以直接使用环境变量凭据export AWS_REGIONus-east-1 export AWS_ACCESS_KEY_IDYOUR_ACCESS_KEY_ID export AWS_SECRET_ACCESS_KEYYOUR_SECRET_ACCESS_KEY export AWS_SESSION_TOKENYOUR_SESSION_TOKEN一个关键约束EC2 Auto Scaling 是区域性regional服务。Auto Scaling group、Launch Template、子网以及任何已挂载的目标组必须位于同一 region。如果凭据配置方式不确定可以参考同仓库的 credential-providers 指南其中对fromIni()、fromNodeProviderChain()等显式凭据来源有完整说明。初始化客户端import { AutoScalingClient } from aws-sdk/client-auto-scaling; export const autoScaling new AutoScalingClient({ region: process.env.AWS_REGION ?? us-east-1, });对大多数服务端应用来说每个 region 共享一个 client 实例即可。region 通过构造参数传入未显式指定时会回退到AWS_REGION环境变量示例中再用?? us-east-1兜底。核心用法1. 列出并检查 Auto Scaling GroupDescribeAutoScalingGroupsCommand是确认账户和 region 中存在预期伸缩组的最快方式。分页遍历写法如下import { AutoScalingClient, DescribeAutoScalingGroupsCommand, } from aws-sdk/client-auto-scaling; const autoScaling new AutoScalingClient({ region: process.env.AWS_REGION ?? us-east-1, }); let nextToken; do { const page await autoScaling.send( new DescribeAutoScalingGroupsCommand({ MaxRecords: 20, NextToken: nextToken, }), ); for (const group of page.AutoScalingGroups ?? []) { console.log({ name: group.AutoScalingGroupName, minSize: group.MinSize, maxSize: group.MaxSize, desiredCapacity: group.DesiredCapacity, instances: group.Instances?.length ?? 0, }); } nextToken page.NextToken; } while (nextToken);要点MaxRecords控制单页返回的伸缩组数量配合NextToken做游标分页NextToken消失即表示遍历结束响应字段AutoScalingGroups、Instances都可能缺省示例统一用?? []/?.length ?? 0做防御性处理这在 SDK 响应是可选字段optional的 TypeScript 类型定义下是必要习惯。只检查某一个组时传入AutoScalingGroupNamesconst response await autoScaling.send( new DescribeAutoScalingGroupsCommand({ AutoScalingGroupNames: [web-prod-asg], }), ); const group response.AutoScalingGroups?.[0]; console.log(group?.AutoScalingGroupName, group?.LaunchTemplate, group?.VPCZoneIdentifier);2. 立即调整期望容量当你希望把伸缩组立刻调整到某个已知规模时使用SetDesiredCapacityCommandimport { AutoScalingClient, SetDesiredCapacityCommand, } from aws-sdk/client-auto-scaling; const autoScaling new AutoScalingClient({ region: process.env.AWS_REGION ?? us-east-1, }); await autoScaling.send( new SetDesiredCapacityCommand({ AutoScalingGroupName: web-prod-asg, DesiredCapacity: 6, HonorCooldown: true, }), );参数说明DesiredCapacity目标实例数必须保持在组的MinSize与MaxSize范围内否则会失败或行为不符合预期HonorCooldown: true表示尊重伸缩组当前的冷却期设置冷却期内可能不会立即执行。3. 更新组的容量边界或 Launch Template 设置UpdateAutoScalingGroupCommand用于修改稳态配置min/max size、期望容量、健康检查类型与宽限期、子网、Launch Template 引用等。import { AutoScalingClient, UpdateAutoScalingGroupCommand, } from aws-sdk/client-auto-scaling; const autoScaling new AutoScalingClient({ region: process.env.AWS_REGION ?? us-east-1, }); await autoScaling.send( new UpdateAutoScalingGroupCommand({ AutoScalingGroupName: web-prod-asg, MinSize: 2, MaxSize: 10, DesiredCapacity: 4, HealthCheckType: EC2, HealthCheckGracePeriod: 300, LaunchTemplate: { LaunchTemplateName: web-prod-template, Version: $Latest, }, }), );要点HealthCheckType: EC2表示使用 EC2 实例健康检查另一可选值为ELB此时以负载均衡健康状态为准HealthCheckGracePeriod: 300是新建实例投入健康判定前的宽限秒数如果在这里引用 Launch Template该 Launch Template 必须已经存在于 EC2——本包不会创建它创建/更新 Launch Template 属于aws-sdk/client-ec2的职责可参考 EC2 指南Version: $Latest是 Launch Template 的伪版本号代表始终使用最新版本。4. 挂载已存在的 Target GroupAttachLoadBalancerTargetGroupsCommand用于把已经存在于 ELBv2 的目标组挂到伸缩组上import { AttachLoadBalancerTargetGroupsCommand, AutoScalingClient, } from aws-sdk/client-auto-scaling; const autoScaling new AutoScalingClient({ region: process.env.AWS_REGION ?? us-east-1, }); await autoScaling.send( new AttachLoadBalancerTargetGroupsCommand({ AutoScalingGroupName: web-prod-asg, TargetGroupARNs: [ arn:aws:elasticloadbalancing:us-east-1:123456789012:targetgroup/web-blue/0123456789abcdef, ], }), );这是一个明确的先后依赖关系目标组必须先通过aws-sdk/client-elastic-load-balancing-v2创建创建时还需要已存在的 VPCALB 还需要至少两个可用区的子网与安全组详见 ELBv2 指南AttachLoadBalancerTargetGroups只负责关联这一步。同理TargetGroupARNs中的目标组、子网、伸缩组必须同 region。5. 创建目标追踪伸缩策略当你希望 Auto Scaling 按某个指标自动向目标值收敛时用PutScalingPolicyCommand并指定PolicyType: TargetTrackingScalingimport { AutoScalingClient, PutScalingPolicyCommand, } from aws-sdk/client-auto-scaling; const autoScaling new AutoScalingClient({ region: process.env.AWS_REGION ?? us-east-1, }); const response await autoScaling.send( new PutScalingPolicyCommand({ AutoScalingGroupName: web-prod-asg, PolicyName: cpu-target-50, PolicyType: TargetTrackingScaling, EstimatedInstanceWarmup: 300, TargetTrackingConfiguration: { PredefinedMetricSpecification: { PredefinedMetricType: ASGAverageCPUUtilization, }, TargetValue: 50, }, }), ); console.log(response.PolicyARN);参数说明PolicyType: TargetTrackingScaling策略类型为目标追踪另一种常见类型是StepScaling阶梯伸缩TargetTrackingConfiguration.PredefinedMetricSpecification使用 AWS 预定义指标。ASGAverageCPUUtilization即ASG 内实例的平均 CPU 利用率使用预定义指标意味着你不需要自己先建 CloudWatch 告警TargetValue: 50把 CPU 利用率维持在 50% 附近EstimatedInstanceWarmup: 300估算新实例从启动到贡献产能所需秒数300 秒用于避免连续扩容时高估新实例的产能响应返回PolicyARN是后续删除、排查该策略的唯一标识。对比参考Application Auto Scaling 侧的对应示例注册 ECS 服务目标 ECSServiceAverageCPUUtilization指标见 Application Auto Scaling 指南其PutScalingPolicyCommand需要ServiceNamespace/ResourceId/ScalableDimension三个定位参数而 EC2 Auto Scaling 侧只需AutoScalingGroupName——这正是两个包在参数形态上的显著区别。6. 用 Instance Refresh 灰度发布新的 Launch Template 版本当你更新了组的 Launch Template 引用或混合实例策略后用StartInstanceRefreshCommand让实例逐步替换到新配置上import { AutoScalingClient, DescribeInstanceRefreshesCommand, StartInstanceRefreshCommand, } from aws-sdk/client-auto-scaling; const autoScaling new AutoScalingClient({ region: process.env.AWS_REGION ?? us-east-1, }); const started await autoScaling.send( new StartInstanceRefreshCommand({ AutoScalingGroupName: web-prod-asg, Strategy: Rolling, Preferences: { MinHealthyPercentage: 90, InstanceWarmup: 300, }, }), ); console.log(started.InstanceRefreshId); const refreshes await autoScaling.send( new DescribeInstanceRefreshesCommand({ AutoScalingGroupName: web-prod-asg, InstanceRefreshIds: [started.InstanceRefreshId], }), ); for (const refresh of refreshes.InstanceRefreshes ?? []) { console.log( refresh.InstanceRefreshId, refresh.Status, refresh.PercentageComplete, refresh.StatusReason, ); }参数与行为说明Strategy: Rolling滚动替换策略逐批终止旧实例并拉起新实例另一策略是CodeDeploy配合 CodeDeploy 做零停机部署Preferences.MinHealthyPercentage: 90刷新过程中保证至少 90% 的实例处于健康状态牺牲吞吐换取发布安全Preferences.InstanceWarmup: 300刷新流程中认定新实例就绪所需的秒数StartInstanceRefreshCommand启动刷新后立即返回返回的InstanceRefreshId是异步任务的句柄如需完成状态必须轮询DescribeInstanceRefreshesCommand观察Status、PercentageComplete、StatusReason三个字段。7. 检查最近的伸缩活动当需要回答为什么发生了扩容/缩容/启动/终止/刷新时用DescribeScalingActivitiesCommandimport { AutoScalingClient, DescribeScalingActivitiesCommand, } from aws-sdk/client-auto-scaling; const autoScaling new AutoScalingClient({ region: process.env.AWS_REGION ?? us-east-1, }); const response await autoScaling.send( new DescribeScalingActivitiesCommand({ AutoScalingGroupName: web-prod-asg, MaxRecords: 20, }), ); for (const activity of response.Activities ?? []) { console.log({ id: activity.ActivityId, status: activity.StatusCode, description: activity.Description, cause: activity.Cause, startTime: activity.StartTime, endTime: activity.EndTime, }); }每条活动记录包含ActivityId、StatusCode如Pending/Successful/Failed、Description人可读描述通常含触发的策略名、Cause触发原因与起止时间。排障时CauseDescription的组合通常能直接定位是哪个策略或哪次手动操作导致了容量变化。常见坑Common Pitfalls原文档列出的六条易错点是实战中最值得对照检查的清单不要混淆 EC2 Auto Scaling 与 Application Auto Scaling。两个包名相似aws-sdk/client-auto-scalingvsaws-sdk/client-application-auto-scaling但管理的是完全不同的 AWS 服务体系。不要以为这个包会创建 Launch Template、Target Group 或 Load Balancer。它们都是其他 AWS 服务管理的独立资源本包只负责引用与挂载。不要把DesiredCapacity设到MinSize/MaxSize边界之外。不要在源码中硬编码 AWS 凭据。使用环境变量、共享配置文件profile或 IAM 角色。不要期待StartInstanceRefreshCommand或伸缩策略变更会阻塞到组进入稳态。它们是异步操作进度要靠DescribeInstanceRefreshesCommand和DescribeScalingActivitiesCommand轮询确认。不要在伸缩组、Launch Template 与已挂载目标组之间混用 region。版本范围与命名本指南针对aws-sdk/client-auto-scaling3.1007.0示例使用模块化 AWS SDK for JavaScript v3 客户端与显式命令 importnpm 包名为aws-sdk/client-auto-scaling运行时客户端类为AutoScalingClient——引用文档与写 import 语句时注意区分这两种名称。延伸阅读仓库内相关文档Application Auto Scaling JavaScript v3 指南ECS / DynamoDB / Aurora / Lambda 等服务扩缩容的姊妹文档可作为本包边界判定的对照EC2 JavaScript v3 指南Launch Template 与底层实例管理Elastic Load Balancing v2 JavaScript v3 指南目标组与负载均衡器创建前置条件credential-providers 指南fromIni()、STS assume-role 等显式凭据方案的完整用法。这些文档与本文档同属 context-hub 的 AWS doc 内容集入口文件为各目录下的DOC.md可通过chub search aws auto scaling/chub get检索获取详见仓库 README 与 llms.txt 中的命令说明。赞分享【免费下载链接】context-hub项目地址https://gitcode.com/gh_mirrors/co/context-hub点击查看免费下载相关推荐rsuite Loader 加载动画速度控制speed 属性取值与实现原理全解析rsuite Loader 加载动画速度控制speed 属性取值与实现原理全解析 本篇文章聚焦 rsuite 的 Loader 加载指示组件围绕 speed如何高效节省磁盘空间终极游戏压缩工具CompactGUI实战指南如何高效节省磁盘空间终极游戏压缩工具CompactGUI实战指南 你是否曾为大型游戏占用过多磁盘空间而烦恼当你发现SSD空间不足时是删除游戏还是购买新硬盘桌面应用存储AWS Auto Scaling 技术指南从容量策略到 CloudWatch 协同的弹性伸缩实践AWS Auto Scaling 技术指南从容量策略到 CloudWatch 协同的弹性伸缩实践 AWS Auto Scaling 是 AWS 生态中负责按文档教程知识库上一篇高级定制与DIY如何修改BH1750引脚、明暗阈值并开发I2C传感器积木扩展源师兄下一篇EasyXMen目录结构全解BSWCode、RTOS、Drivers、Examples各目录分工详解创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考