@aws-cdk/aws-autoscaling

中文文档
1.204.0发布于 2023/06/20Apache-2.0TypeScriptCommonJS近 30 天下载 12.8万

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

中文使用文档
文档目录19 节
  1. 自动缩放组
  2. 机器图像( AMIs)
  3. 自动缩放实例计数
  4. 步骤缩放
  5. 目标跟踪
  6. 预定缩放
  7. 使用 CloudFormation Init 配置实例
  8. 信号
  9. 更新策略
  10. 允许连接
  11. 最大实例寿命
  12. 实例监测
  13. 监测组
  14. 终止政策
  15. 保护新事件不被大规模终止
  16. 配置实例元数据服务
  17. 正在准备 IMDSv1
  18. 温暖池
  19. 今后的工作

Amazon EC2 自动缩放构建库


End-of-Support

AWS CDK v1在2023-06-01上达到了支持结束. 此软件包不再更新,用户应该迁移到 AWS CDK v2.

关于如何移徙的更多信息,请参见: 移动到 AWS CDK v2 指南。 。 。 .


这个模块是 AWS 云开发套件 项目.

自动缩放组

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

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 如果你不想的话 您可以启动任意连接的示例。 或者,您可以指定一个已有的安全 组以附加于启动的实例,而不是由该组创建新的实例.

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数字 :

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

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

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

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 图像的最新版本是 可通过即时选择其中一类:

创建图像的例子

注意: 选中的 Amazon Linux 图像将缓存于您 cdk.json,这样你的 自动缩放 组合不会自动改变 与你无关 变化。 要更新最新版本的 Amazon Linux, 请删除缓存项 context 区域 cdk.json。 。 。 .

我们将增加命令行选项,使这个步骤在未来更容易.

自动缩放实例计数

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

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

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

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

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

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(...);

步骤缩放

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

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

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

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

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%的利用率:

declare const autoScalingGroup: autoscaling.AutoScalingGroup;

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

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

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
});

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

declare const autoScalingGroup: autoscaling.AutoScalingGroup;

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

预定缩放

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

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

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

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

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 (英语) cDK的文档 aws-ec2 用于获取更多信息的图书馆.

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

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

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

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 程序作为其启动的一部分,以表示是否已启动 成功与否.

如果使用 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 文档 用于列出所有可用的组指标.

能够使用 groupMetrics 属性 :

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)],
});

终止政策

自动缩放用途 终止保险 用于确定在规模化事件期间首先终止哪些实例。 你个 可指定一种或多种终止保险政策 terminationPolicies 属性 :

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 缩放可以在发射后的任何时候终止实例 在自动缩放组中缩放,但以组为条件 终止 政策。 。 。 .

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

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 实例元数据服务 选项 允许IMDSv1和IMDSv2在与IMDS互动时同时执行IMDSv2.

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

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 :

const aspect = new autoscaling.AutoScalingGroupRequireImdsv2Aspect();

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

温暖池

自动缩放提议 温水池 能够减少申请延迟时间,因为申请的启动时间特别长。 您可以创建一个带有以下默认参数的温池:

declare const autoScalingGroup: autoscaling.AutoScalingGroup;

autoScalingGroup.addWarmPool();

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

declare const autoScalingGroup: autoscaling.AutoScalingGroup;

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

今后的工作

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

版本与发布记录

@aws-cdk/aws-autoscaling 共发布 288 个版本,首次发布于 2018/07/31;过去 12 个月发布了 0 个版本。

版本发布日期距今
1.204.0latest2023/06/203 年前
1.203.02023/06/013 年前
1.202.02023/05/223 年前
1.201.02023/05/113 年前
1.200.02023/04/273 年前
1.199.02023/04/213 年前

关于 @aws-cdk/aws-autoscaling 的常见问题

@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。作者已将其标记为弃用,新项目建议寻找替代方案。