aws::autoscaling的cdk构造库

aws-cdk.aws-autoscaling的Python项目详细描述


Amazon EC2自动缩放构造库


Stability: Stable


这个模块是AWS Cloud Development Kit项目的一部分。

机队

自动缩放组

AutoScalingGroup表示运行代码的多个实例。你 选择舰队的大小、实例类型和操作系统映像:

importautoscaling=require('@aws-cdk/aws-autoscaling');importec2=require('@aws-cdk/aws-ec2');newautoscaling.AutoScalingGroup(this,'ASG',{vpc,instanceType: ec2.InstanceType.of(ec2.InstanceClass.BURSTABLE2,ec2.InstanceSize.MICRO),machineImage: newec2.AmazonLinuxImage()// get the latest Amazon Linux image});

NOTE: AutoScalingGroup has an property called allowAllOutbound (allowing the instances to contact the internet) which is set to true by default. Be sure to set this to false if you don't want your instances to be able to start arbitrary connections.

机器图像(AMI)

amis控制在启动ec2实例时启动的操作系统。EC2 库包含选择要使用的ami的结构。

根据ami的类型,您可以选择不同的方式。

最新版本的amazon linux和microsoft windows映像是 可通过实例化其中一个类来选择:

// Pick a Windows edition to useconstwindows=newec2.WindowsImage(ec2.WindowsVersion.WINDOWS_SERVER_2019_ENGLISH_FULL_BASE);// Pick the right Amazon Linux edition. All arguments shown are optional// and will default to these values when omitted.constamznLinux=newec2.AmazonLinuxImage({generation: ec2.AmazonLinuxGeneration.AMAZON_LINUX,edition: ec2.AmazonLinuxEdition.STANDARD,virtualization: ec2.AmazonLinuxVirt.HVM,storage: ec2.AmazonLinuxStorage.GENERAL_PURPOSE,});// For other custom (Linux) images, instantiate a `GenericLinuxImage` with// a map giving the AMI to in for each region:constlinux=newec2.GenericLinuxImage({'us-east-1':'ami-97785bed','eu-west-1':'ami-12345678',// ...});

NOTE: The Amazon Linux images selected will be cached in your cdk.json, so that your AutoScalingGroups don't automatically change out from under you when you're making unrelated changes. To update to the latest version of Amazon Linux, remove the cache entry from the context section of your cdk.json.

We will add command-line options to make this step easier in the future.

自动缩放实例计数

自动缩放组使增加和减少组中的实例数成为可能, 响应(或提前)工作量的变化。

创建自动缩放组时,指定minCapacitymaxCapacity。对指标作出响应的自动调整策略永远不会变得更高 或低于指示的容量(但计划的缩放操作可能 下面)。

有三种方法可以扩展您的容量:

  • 响应度量(也称为步骤缩放);例如,您 如果集群中的CPU使用率开始上升,可能需要缩小规模, 当它再次下降时放大。
  • 尝试在给定值周围保留某个度量 目标跟踪缩放);您可能希望自动缩放到 保持你的CPU使用率在50%左右。
  • 按计划执行;您可能需要围绕流量组织缩放 你所期望的流量,通过在早上扩展和在 傍晚。

自动缩放的一般模式如下:

constautoScalingGroup=newautoscaling.AutoScalingGroup(this,'ASG',{minCapacity: 5,maxCapacity: 100// ...});// Step scalingautoScalingGroup.scaleOnMetric(...);// Target tracking scalingautoScalingGroup.scaleOnCpuUtilization(...);autoScalingGroup.scaleOnIncomingBytes(...);autoScalingGroup.scaleOnOutgoingBytes(...);autoScalingGroup.scaleOnRequestCount(...);autoScalingGroup.scaleToTrackMetric(...);// Scheduled scalingautoScalingGroup.scaleOnSchedule(...);

阶跃缩放

这种类型的缩放按确定步骤进行缩放 配置,以响应度量值。例如,您的扩展策略 根据表示平均工作池使用量的度量进行缩放 可能是这样的:

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

(注意,这不一定是推荐的扩展策略,但是 一个可能的。您必须确定哪些阈值适合您)。

请注意,要设置此缩放策略,必须发出 表示实例中工作机利用率的度量。之后, 您可以这样配置缩放:

constworkerUtilizationMetric=newcloudwatch.Metric({namespace:'MyService',metricName:'WorkerUtilization'});capacity.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,});

autoscaling构造库将创建所需的cloudwatch警报和 为您自动调整策略。

目标跟踪缩放

这种类型的缩放可缩放以使度量值保持在某个值附近 你更喜欢。有四种类型的预定义度量可以跟踪,或者可以 选择跟踪自定义度量。如果您选择跟踪自定义度量, 注意,度量必须以某种方式表示实例利用率 (如果度量值高于目标值,则自动缩放将缩小,并缩放 如果指标低于目标)。

如果配置多个目标跟踪策略,则自动缩放将使用 产量最高的人。

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

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

要在进出实例的平均网络流量上进行扩展,请执行以下操作:

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

按每个实例的平均请求计数进行缩放(仅适用于 已附加到应用程序加载的自动缩放组 平衡器):

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

计划缩放

这种缩放用于根据时间更改容量。它的工作原理是 更改的minCapacitymaxCapacitydesiredCapacity “自动缩放”组,因此可用于两个目的:

  • 通过设置minCapacity高或 低的maxCapacity
  • 静止的允许常规缩放操作执行其工作,但限制 它们可以扩展的范围(通过设置minCapacitymaxCapacity但随着时间的推移,它们的范围会改变)。

计划表示为cron表达式。Schedule类有一个帮助构建cron表达式的cron方法。

下面的例子在早上扩展舰队,回到自然状态 夜间缩放(如有必要,可一直缩小到1个实例):

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

允许连接

有关详细信息,请参阅@aws-cdk/aws-ec2包的文档 关于允许实例支持的资源之间的连接。

未来工作

  • []CloudWatch事件(当前无法添加,因为AutoscalingGroup ARN是 必须创建此规则,并且不能从cloudformation访问此规则)。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java CompletableFuture runAsync与新线程   java JSP c:forEach items属性无法解析变量   Java SQL优化   java setStreamMute(流环)将文本静音为语音   java运行Spring应用程序问题   Java性能为什么响应时间会随着时间的推移而增加?   ApacheSpark如何在java中构建编码器   java如何将流<Map<output,Long>>转换为Map<output,Long>   java如何定位iOS设备型号?   java将Arraylist转换为要通过Whatsapp共享的项目列表   java能否保证@PostConstruct方法的调用顺序?   java Flyway如何仅为迁移而不是整个应用程序配置事务超时   在Java中调整输出,使其美观整洁   从列表中查找证书到期日期。pem和。使用Java的pub密钥文件   java JavaFX8无法在SplitPane容器中找到任何节点   Java流来查找列表中的事件