# @aws-cdk/aws-autoscaling 中文文档

规范地址：https://npmcn.com/package/%40aws-cdk/aws-autoscaling/

版本：1\.204\.0
npm 元数据更新时间：2023-11-21T10:14:00.934Z
中文译文更新时间：2026-11-07T11:36:07.489Z
软件包许可：Apache-2\.0

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40aws-cdk/aws-autoscaling
原文对照：https://npmcn.com/package/%40aws-cdk/aws-autoscaling/?lang=original
项目主页：https://github.com/aws/aws-cdk
源码仓库：https://github.com/aws/aws-cdk

弃用说明：AWS CDK v1 has reached End-of-Support on 2023-06-01\. This package is no longer being updated, and users should migrate to AWS CDK v2\. For more information on how to migrate, see https://docs\.aws\.amazon\.com/cdk/v2/guide/migrating-v2\.html

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：3.3 MB，41 个文件
- 模块格式：CommonJS
- TypeScript 类型：包内自带
- Node.js 要求：\>= 14\.15\.0
- 运行依赖：9 个
- peer 依赖：@aws-cdk/aws-autoscaling-common 1\.204\.0，@aws-cdk/aws-cloudwatch 1\.204\.0，@aws-cdk/aws-ec2 1\.204\.0，@aws-cdk/aws-elasticloadbalancing 1\.204\.0，@aws-cdk/aws-elasticloadbalancingv2 1\.204\.0，@aws-cdk/aws-iam 1\.204\.0，@aws-cdk/aws-sns 1\.204\.0，@aws-cdk/core 1\.204\.0，constructs ^3\.3\.69
- 首次发布：2018-07-31T13:27:49.189Z
- 最新版本发布：2023-06-19T21:09:45.088Z
- 近 30 天下载量：128177（2026-10-07 至 2026-11-05，npm 官方下载统计）
- 已发布版本数：288（近 12 个月 0 个）

## 中文简介

AWS 的 CDK 构建库: 自动缩放

## 安装

```sh
npm install @aws-cdk/aws-autoscaling
```

也可以使用：`pnpm add @aws-cdk/aws-autoscaling`、`yarn add @aws-cdk/aws-autoscaling`、`bun add @aws-cdk/aws-autoscaling`

## README

# Amazon EC2 自动缩放构建库

* * *

![End-of-Support](https://img.shields.io/badge/End--of--Support-critical.svg?style=for-the-badge)

> AWS CDK v1在2023-06-01上达到了支持结束. 此软件包不再更新,用户应该迁移到 AWS CDK v2.
> 
> 关于如何移徙的更多信息,请参见: [_移动到 AWS CDK v2_ 指南](https://docs.aws.amazon.com/cdk/v2/guide/migrating-v2.html)。 。 。 .

* * *

这个模块是 [AWS 云开发套件](https://github.com/aws/aws-cdk) 项目.

## 自动缩放组

一个 `AutoScalingGroup` 代表您运行代码的若干实例。 你个 选择机队大小,实例类型和OS图像 :

```ts
declare const vpc: ec2.Vpc;

new autoscaling.AutoScalingGroup(this, 'ASG', {
  vpc,
  instanceType: ec2.InstanceType.of(ec2.InstanceClass.BURSTABLE2, ec2.InstanceSize.MICRO),
  machineImage: new ec2.AmazonLinuxImage() // get the latest Amazon Linux image
});
```

注:自动缩放 组有一个财产叫 `allowAllOutbound` (允许实例与 互联网) `true` 默认。 一定要把这个设置到 `false` 如果你不想的话 您可以启动任意连接的示例。 或者,您可以指定一个已有的安全 组以附加于启动的实例,而不是由该组创建新的实例.

```ts
declare const vpc: ec2.Vpc;

const mySecurityGroup = new ec2.SecurityGroup(this, 'SecurityGroup', { vpc });
new autoscaling.AutoScalingGroup(this, 'ASG', {
  vpc,
  instanceType: ec2.InstanceType.of(ec2.InstanceClass.BURSTABLE2, ec2.InstanceSize.MICRO),
  machineImage: new ec2.AmazonLinuxImage(),
  securityGroup: mySecurityGroup,
});
```

或者您可以创建 `AutoScalingGroup` 从a `LaunchTemplate`数字 :

```ts
declare const vpc: ec2.Vpc;
declare const launchTemplate: ec2.LaunchTemplate;

new autoscaling.AutoScalingGroup(this, 'ASG', {
  vpc,
  launchTemplate: launchTemplate
});
```

要推出Spot和按需实例的组合和/或多种实例类型,可以创建 `AutoScalingGroup` 混合供资政策:

```ts
declare const vpc: ec2.Vpc;
declare const launchTemplate1: ec2.LaunchTemplate;
declare const launchTemplate2: ec2.LaunchTemplate;

new autoscaling.AutoScalingGroup(this, 'ASG', {
  vpc,
  mixedInstancesPolicy: {
    instancesDistribution: {
      onDemandPercentageAboveBaseCapacity: 50, // Mix Spot and On-Demand instances
    },
    launchTemplate: launchTemplate1,
    launchTemplateOverrides: [ // Mix multiple instance types
      { instanceType: new ec2.InstanceType('t3.micro') },
      { instanceType: new ec2.InstanceType('t3a.micro') },
      { instanceType: new ec2.InstanceType('t4g.micro'), launchTemplate: launchTemplate2 },
    ],
  }
});
```

## 机器图像( AMIs)

AMIs 控制您启动 EC2 实例时启动的操作系统 。 欧共体2 库中包含用于选择您要使用的 AMI 的构造 .

根据AMI的种类,你选择不同的方式.

Amazon Linux 和 Microsoft Windows 图像的最新版本是 可通过即时选择其中一类:

[创建图像的例子](https://npmcn.com/package/%40aws-cdk/aws-autoscaling/test/example.images.lit.ts)

> 注意: 选中的 Amazon Linux 图像将缓存于您 `cdk.json`,这样你的 自动缩放 组合不会自动改变 与你无关 变化。 要更新最新版本的 Amazon Linux, 请删除缓存项 `context` 区域 `cdk.json`。 。 。 .
> 
> 我们将增加命令行选项,使这个步骤在未来更容易.

## 自动缩放实例计数

自动缩放 团体可以提高和减少团体中的案件数量, 由于工作量的变化(或是在工作量变化之前).

创建自动缩放组时,指定一个 `minCapacity` (单位:千美元) `maxCapacity`. 适应度量衡的自动升级政策永远不会更高 或低于所示能力(但预定规模行动可能见 页:1.

有三种方法可以扩大你的能力:

-   **针对一个衡量标准** (也称为步缩;例如: 如果整个集群的 CPU 使用量开始上升, 可能想要扩大范围, 当它再次降下的时候.
-   **试图在某个值周围保持一定的度量** (又称: 目标跟踪缩放);您可能想要自动缩放到 cPU使用率保持在50%左右.
-   **按计划**; 您可能想要在交通中组织您的缩放 通过在上午缩小和在 边.

自动缩放的一般模式将像这样:

```ts
declare const vpc: ec2.Vpc;
declare const instanceType: ec2.InstanceType;
declare const machineImage: ec2.IMachineImage;

const autoScalingGroup = new autoscaling.AutoScalingGroup(this, 'ASG', {
  vpc,
  instanceType,
  machineImage,

  minCapacity: 5,
  maxCapacity: 100
  // ...
});

// Then call one of the scaling methods (explained below)
//
// autoScalingGroup.scaleOnMetric(...);
//
// autoScalingGroup.scaleOnCpuUtilization(...);
// autoScalingGroup.scaleOnIncomingBytes(...);
// autoScalingGroup.scaleOnOutgoingBytes(...);
// autoScalingGroup.scaleOnRequestCount(...);
// autoScalingGroup.scaleToTrackMetric(...);
//
// autoScalingGroup.scaleOnSchedule(...);
```

### 步骤缩放

在决定步骤中,这类缩放缩放 配置,以响应度量值。 例如,您的缩放策略 缩放,以响应代表您平均员工总数使用的计量标准 也许是这样的:

```plaintext
 Scaling        -1          (no change)          +1       +3
            │        │                       │        │        │
            ├────────┼───────────────────────┼────────┼────────┤
            │        │                       │        │        │
Worker use  0%      10%                     50%       70%     100%
```

(注意,这不一定是一个推荐的缩放战略,而是 一个可能的。 您必须确定哪些阈值适合您).

请注意,为了制定这一规模化战略,你必须发出一个 代表您从实例中的工人使用量。 在那之后,我们.., 您可以配置这样的缩放 :

```ts
declare const autoScalingGroup: autoscaling.AutoScalingGroup;

const workerUtilizationMetric = new cloudwatch.Metric({
    namespace: 'MyService',
    metricName: 'WorkerUtilization'
});

autoScalingGroup.scaleOnMetric('ScaleToCPU', {
  metric: workerUtilizationMetric,
  scalingSteps: [
    { upper: 10, change: -1 },
    { lower: 50, change: +1 },
    { lower: 70, change: +3 },
  ],

  // Change this to AdjustmentType.PERCENT_CHANGE_IN_CAPACITY to interpret the
  // 'change' numbers before as percentages instead of capacity counts.
  adjustmentType: autoscaling.AdjustmentType.CHANGE_IN_CAPACITY,
});
```

自动缩放构建库将创建所需的 Cloud Watch 提醒和 自动缩放您的策略 .

### 目标跟踪

此类缩放尺度的出入取出,以保持一个数值左右的度量衡 你更喜欢 预定义的衡量标准有四种类型,可以跟踪,也可以 选择跟踪自定义度量衡。 如果你选择跟踪一个自定义的度量衡, 注意衡量标准必须在某种程度上代表实例的利用 (如果衡量标准高于目标,自动缩放将缩小范围,并缩小范围) 如果衡量标准低于目标.

如果您配置了多个目标跟踪策略, AutoScaling 将使用 它能产生最高的能力.

以下示例缩放以保持您实例的 CPU 使用量 50%的利用率:

```ts
declare const autoScalingGroup: autoscaling.AutoScalingGroup;

autoScalingGroup.scaleOnCpuUtilization('KeepSpareCPU', {
  targetUtilizationPercent: 50
});
```

要在您的情况中以平均网络流量为单位:

```ts
declare const autoScalingGroup: autoscaling.AutoScalingGroup;

autoScalingGroup.scaleOnIncomingBytes('LimitIngressPerInstance', {
    targetBytesPerSecond: 10 * 1024 * 1024 // 10 MB/s
});
autoScalingGroup.scaleOnOutgoingBytes('LimitEgressPerInstance', {
    targetBytesPerSecond: 10 * 1024 * 1024 // 10 MB/s
});
```

以每个实例的平均请求数缩放( 自动缩放 已附加到应用程序加载的组 余额:

```ts
declare const autoScalingGroup: autoscaling.AutoScalingGroup;

autoScalingGroup.scaleOnRequestCount('LimitRPS', {
    targetRequestsPerSecond: 1000
});
```

### 预定缩放

这种类型的缩放被用于根据时间改变能力. 它的作用由 变化 `minCapacity`, (中文(简体) ), `maxCapacity` 财务报告和审定财务报表 `desiredCapacity` 会 议 日 程 和 议 程 自动缩放组,因此可用于两个目的:

-   通过设置列表缩放 `minCapacity` 高点或 页:1 `maxCapacity` 低点.
-   仍允许常规规模行动履行职责,但限制 它们可以缩小的范围(通过设置两者) `minCapacity` 财务报告和审定财务报表 `maxCapacity` 但随着时间推移而改变范围.

时间表以克龙语表示。 这个 `Schedule` 类有一个 `cron` 用于帮助构建 cron 表达式的方法.

下面的例子显示 舰队在早上出海 回到自然 夜间缩放( 必要时, 一直缩放到1个实例) :

```ts
declare const autoScalingGroup: autoscaling.AutoScalingGroup;

autoScalingGroup.scaleOnSchedule('PrescaleInTheMorning', {
  schedule: autoscaling.Schedule.cron({ hour: '8', minute: '0' }),
  minCapacity: 20,
});

autoScalingGroup.scaleOnSchedule('AllowDownscalingAtNight', {
  schedule: autoscaling.Schedule.cron({ hour: '20', minute: '0' }),
  minCapacity: 1
});
```

## 使用 CloudFormation Init 配置实例

可以使用 CloudFormation 输入机制来配置 自动缩放组中的实例。 你可以写文件给它,运行命令, 启动服务等。 见文件 [AWS:: CloudFormation:: init (英语)](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-init.html) cDK的文档 `aws-ec2` 用于获取更多信息的图书馆.

当您为自动缩放组指定 CloudFormation Init 配置时 :

-   你们 _必须_ 另具体说明 `signals` 配置云长 应当等待实例成功配置自己.
-   你们 _应_ 还指定一个 `updatePolicy` 来配置实例 当自动缩放组更新(例如, 当AMI更新时. 如果您未指定更新策略, a _滚动 更新_ 默认选择.

以下是使用 CloudFormation Init 编写文件到 启动时实例主机 :

```ts
declare const vpc: ec2.Vpc;
declare const instanceType: ec2.InstanceType;
declare const machineImage: ec2.IMachineImage;

new autoscaling.AutoScalingGroup(this, 'ASG', {
  vpc,
  instanceType,
  machineImage,

  // ...

  init: ec2.CloudFormationInit.fromElements(
    ec2.InitFile.fromString('/etc/my_instance', 'This got written during instance startup'),
  ),
  signals: autoscaling.Signals.waitForAll({
    timeout: Duration.minutes(10),
  }),
});
```

## 信号

在正常操作中, CloudFormation 将发送创建或更新命令到 一个自动缩放组, 无需等待即可继续部署 联 合 国 _自动缩放组中的实例_。 。 。 .

配置 `signals` 告诉 CloudFormation 等待特定数量 自动缩放组中已启动( 或未启动) 实例 在继续前进之前 一个实例应该执行 [`cfn-signal`](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-signal.html) 程序作为其启动的一部分,以表示是否已启动 成功与否.

如果使用 CloudFormation 输入支持(在上一节描述), 适当呼吁 `cfn-signal` 自动添加到 自动缩放组的用户数据 。 如果你没有使用 `signals` 直接说,你是 负责给自己加上这样的称呼.

以下类型 `Signals` 备有:

-   `Signals.waitForAll([options])`: 等待所有时间 `desiredCapacity` 实例数量 开始(建议).
-   `Signals.waitForMinCapacity([options])`: 等待一个 `minCapacity` 实例数量 开始(如果等待所有事件的时间太长而你高兴的话) 和最少数的健康宿主.
-   `Signals.waitForCount(count, [options])`:等待特定数量的示例 开始 .

有两个 `options` 您可以配置 :

-   `timeout`:允许一个主机启动的最大时间. 如果主机不报告 在这段时间内,成功被视为失败。 默认为5分钟.
-   `minSuccessPercentage`: 需要保持健康以便 更新以成功。 如果您设定此值低于 100, 一定百分比的主机可能 报告失败,但仍认为部署成功。 默认为100%.

## 更新策略

这个 _更新策略_ 描述定义运行时会发生什么情况 中,将修改自动缩放组。 例如,如果向用户数据添加命令 在自动缩放组中,是否将已有实例替换为新实例 已执行新用户数据 ? 还是"老"事件继续发生?

建议始终使用更新政策,否则您目前的状况 实例还取决于您以前的情况,而不仅仅是您 源代码. 这降低了你的部署的可复制性.

现提供下列最新政策:

-   `UpdatePolicy.none()`: 撇开现有实例(不建议).
-   `UpdatePolicy.rollingUpdate([options])`:逐步取代现有的 实例,以小批次出现。 无论何时, 案件总数大致相同。 如果部署 需要回滚,新的例将被替换为"旧" 再次配置 .
-   `UpdatePolicy.replacingUpdate([options])`: 建立一个全新的副本 中。 一次自动缩放组 已成功创建( 如果 `signals` 实值 在自动缩放组上配置的旧自动缩放组被删除 . 如果需要回滚部署, 新的自动缩放组是 删除,旧的则保持不变.

## 允许连接

见文件 `@aws-cdk/aws-ec2` 需要更多信息的软件包 关于允许由实例支持的资源之间的连接.

## 最大实例寿命

要启用最大实例寿命支持, 请指定 `maxInstanceLifetime` 属性 联 合 国 `AutoscalingGroup` 资源。 数值必须是7至365天(含). 要清除先前设定的值, 请未定义此属性 .

## 实例监测

要禁用详细实例监测, 请指定 `instanceMonitoring` 属性 联 合 国 `AutoscalingGroup` 资源为 `Monitoring.BASIC`. 否则详细监测 将启用.

## 监测组

组度量衡用于监视组级属性;它们描述组而不是其任何实例(如GroupMaxSize,组最大大小). 为了能够对组指标进行监测,使用 `groupMetrics` 属性. 所有组的度量衡均以1分的颗粒性报告,无需再加电.

见 [EC2 文档](https://docs.aws.amazon.com/autoscaling/ec2/userguide/as-instance-monitoring.html#as-group-metrics) 用于列出所有可用的组指标.

能够使用 `groupMetrics` 属性 :

```ts
declare const vpc: ec2.Vpc;
declare const instanceType: ec2.InstanceType;
declare const machineImage: ec2.IMachineImage;

// Enable monitoring of all group metrics
new autoscaling.AutoScalingGroup(this, 'ASG', {
  vpc,
  instanceType,
  machineImage,

  // ...

  groupMetrics: [autoscaling.GroupMetrics.all()],
});

// Enable monitoring for a subset of group metrics
new autoscaling.AutoScalingGroup(this, 'ASG', {
  vpc,
  instanceType,
  machineImage,

  // ...

  groupMetrics: [new autoscaling.GroupMetrics(autoscaling.GroupMetric.MIN_SIZE, autoscaling.GroupMetric.MAX_SIZE)],
});
```

## 终止政策

自动缩放用途 [终止保险](https://docs.aws.amazon.com/autoscaling/ec2/userguide/as-instance-termination.html) 用于确定在规模化事件期间首先终止哪些实例。 你个 可指定一种或多种终止保险政策 `terminationPolicies` 属性 :

```ts
declare const vpc: ec2.Vpc;
declare const instanceType: ec2.InstanceType;
declare const machineImage: ec2.IMachineImage;

new autoscaling.AutoScalingGroup(this, 'ASG', {
  vpc,
  instanceType,
  machineImage,

  // ...

  terminationPolicies: [
    autoscaling.TerminationPolicy.OLDEST_INSTANCE,
    autoscaling.TerminationPolicy.DEFAULT,
  ],
});
```

## 保护新事件不被大规模终止

默认情况下, Auto 缩放可以在发射后的任何时候终止实例 在自动缩放组中缩放,但以组为条件 [终止 政策](https://docs.aws.amazon.com/autoscaling/ec2/userguide/as-instance-termination.html)。 。 。 .

不过,您不妨保护新启动的个案不会在 如果它们要运行关键应用程序,但不应过早 终止。 EC2 亚马逊ECS能力供应商要求这个属性是: 设置为 `true`。 。 。 .

```ts
declare const vpc: ec2.Vpc;
declare const instanceType: ec2.InstanceType;
declare const machineImage: ec2.IMachineImage;

new autoscaling.AutoScalingGroup(this, 'ASG', {
  vpc,
  instanceType,
  machineImage,

  // ...

  newInstancesProtectedFromScaleIn: true,
});
```

## 配置实例元数据服务

### 正在准备 IMDSv1

您可以配置 [EC2 实例元数据服务](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html) 选项 允许IMDSv1和IMDSv2在与IMDS互动时同时执行IMDSv2.

为了一个人 `AutoScalingGroup`设置 `requireImdsv2` 属性. 下面的例子显示, IMDSv2 需要单曲 `AutoScalingGroup`数字 :

```ts
declare const vpc: ec2.Vpc;
declare const instanceType: ec2.InstanceType;
declare const machineImage: ec2.IMachineImage;

new autoscaling.AutoScalingGroup(this, 'ASG', {
  vpc,
  instanceType,
  machineImage,

  // ...

  requireImdsv2: true,
});
```

您还可以使用 `AutoScalingGroupRequireImdsv2Aspect` 以应用到多个自动缩放组. 下面的例子说明: `AutoScalingGroupRequireImdsv2Aspect` 用于对堆栈中的所有自动缩放组要求 IMDSv2 :

```ts
const aspect = new autoscaling.AutoScalingGroupRequireImdsv2Aspect();

Aspects.of(this).add(aspect);
```

## 温暖池

自动缩放提议 [温水池](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-warm-pools.html) 能够减少申请延迟时间,因为申请的启动时间特别长。 您可以创建一个带有以下默认参数的温池:

```ts
declare const autoScalingGroup: autoscaling.AutoScalingGroup;

autoScalingGroup.addWarmPool();
```

您也可以通过配置参数自定义取暖池 :

```ts
declare const autoScalingGroup: autoscaling.AutoScalingGroup;

autoScalingGroup.addWarmPool({
  minSize: 1,
  reuseOnScaleIn: true,
});
```

## 今后的工作

-   [ ] Cloud Watch Evolutions( 无法作为自动缩放组 ARN 添加) 为制定此规则所必需, 无法从 CloudFormation 访问此规则 .

## 常见问题

### @aws-cdk/aws-autoscaling 是什么？

AWS 的 CDK 构建库: 自动缩放注意：该包已被作者标记为弃用——AWS CDK v1 has reached End-of-Support on 2023-06-01\. This package is no longer being updated, and users should migrate to AWS CDK v2\. For more information on how to migrate, see https://docs\.aws\.amazon\.com/cdk/v2/guide/migrating-v2\.html

### 如何安装 @aws-cdk/aws-autoscaling？

在项目目录运行 npm install @aws-cdk/aws-autoscaling，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：@aws-cdk/aws-autoscaling-common（1\.204\.0）、@aws-cdk/aws-cloudwatch（1\.204\.0）、@aws-cdk/aws-ec2（1\.204\.0）、@aws-cdk/aws-elasticloadbalancing（1\.204\.0）、@aws-cdk/aws-elasticloadbalancingv2（1\.204\.0）、@aws-cdk/aws-iam（1\.204\.0）、@aws-cdk/aws-sns（1\.204\.0）、@aws-cdk/core（1\.204\.0）、constructs（^3\.3\.69）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。

### @aws-cdk/aws-autoscaling 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @aws-cdk/aws-autoscaling 支持 ESM 还是 CommonJS？

以 CommonJS 形式发布，可以直接 require\(\)；在 ES Module 项目中也可以用 import 引入（Node\.js 会把 module\.exports 作为默认导出）。

### @aws-cdk/aws-autoscaling 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js \>= 14\.15\.0。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### @aws-cdk/aws-autoscaling 可以商用吗？

@aws-cdk/aws-autoscaling 使用 Apache-2\.0 许可。宽松许可：允许商业使用、修改和再分发，并附带明确的专利授权；分发时需保留许可与 NOTICE 文件，修改过的文件要注明改动。以上为概括，不构成法律意见，请以许可原文为准。

### @aws-cdk/aws-autoscaling 的下载量有多少？

根据 npm 官方下载统计，@aws-cdk/aws-autoscaling 在 2026/10/07 – 2026/11/05 这 30 天内被下载 128,177 次，日均约 4,273 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @aws-cdk/aws-autoscaling 还在维护吗？

最新版本 1\.204\.0 发布于 2023/06/20（3 年前）；至今共发布 288 个版本，其中过去 12 个月发布了 0 个；首次发布于 2018/07/31。作者已将其标记为弃用，新项目建议寻找替代方案。

