

# COST09-BP03 动态供应资源
<a name="cost_manage_demand_resources_dynamic"></a>

资源按计划预置。这种预置可以基于需求（例如通过自动扩缩来实现），也可以基于时间（需求可以预测，基于时间提供资源）。这些方法可以尽可能减少过度预置或预置不足的情况。

 **在未建立这种最佳实践的情况下暴露的风险等级：**低 

## 实施指导
<a name="implementation-guidance"></a>

 AWS 客户可以通过多种方式增加可供应用程序使用的资源，并提供资源以满足需求。其中一个选项是使用 AWS 实例调度器，它可以自动启动和停止 Amazon Elastic Compute Cloud（Amazon EC2）及 Amazon Relational Database Service（Amazon RDS）实例。另一个选项是使用 AWS Auto Scaling，该服务让您可以根据应用程序或服务的需求，自动扩缩计算资源。根据需求提供资源，这样您就只需要为使用的资源付费，并且仅在有需要时启动资源，在不需要时终止资源，从而降低成本。

 [AWS 实例调度器](https://aws.amazon.com/solutions/implementations/instance-scheduler-on-aws/)让您可以将 Amazon EC2 和 Amazon RDS 实例配置为在指定的时间停止和启动，这样您就可以通过一致的时间模式满足对相同资源的需求，例如用户在每天早上八点访问 Amazon EC2 实例，晚上六点后就不再需要访问。该解决方案可停止不使用的资源，并在需要时启动它们，帮助降低运营成本。

![\[图中显示了使用 AWS 实例调度器优化成本。\]](http://docs.aws.amazon.com/zh_cn/wellarchitected/latest/cost-optimization-pillar/images/instance-scheduler-diagram.png)


 

您还可以通过简单的用户界面（UI）使用 AWS Systems Manager 快速设置功能，轻松地跨账户和区域来为 Amazon EC2 实例配置计划。您可以使用 AWS 实例调度器来计划 Amazon EC2 或 Amazon RDS 实例，也可以停止和启动现有实例。但是，您无法停止和启动属于自动扩缩组（ASG）或管理 Amazon Redshift 或 Amazon OpenSearch Service 等服务的实例。自动扩缩组对组中的实例和何时创建这些实例有自己的计划。

[AWS Auto Scaling](https://aws.amazon.com/autoscaling/) 有助于您调整容量以维持稳定、可预测的性能，并确保成本最低，以满足不断变化的需求。这是一项用来扩缩应用程序容量的完全托管式免费服务，与 Amazon EC2 实例和竞价型实例集、Amazon ECS、Amazon DynamoDB 与 Amazon Aurora 集成。自动扩缩提供自动资源发现功能，帮助在工作负载中找到可以配置的资源，它具有内置的扩缩策略来优化性能、成本或者在两者之间取得平衡，并提供预测性扩展来协助应对定期出现的峰值。

 可以通过多种扩缩选项来扩缩自动扩缩组：
+  始终保持当前实例级别 
+  手动缩放 
+  按计划扩展 
+  根据需求进行扩展 
+  使用预测式扩展 

 自动扩缩策略各不相同，可以分为动态扩缩策略和计划扩缩策略。动态策略为手动扩缩或动态扩缩，这可以是计划扩缩或者预测性扩缩。您可以针对动态、计划和预测性扩缩使用扩缩策略。还可以使用 [Amazon CloudWatch](https://aws.amazon.com/cloudwatch/) 中的指标和警报来触发工作负载的扩缩事件。我们建议您使用[启动模板](https://docs.aws.amazon.com/autoscaling/ec2/userguide/launch-templates.html)，确保可以访问最新功能和改进。当您使用启动配置时，并非所有的自动扩缩功能都可用。例如，您无法创建 Auto Scaling 组来同时启动竞价型实例和按需型实例或者指定多个实例类型。您必须使用启动模板来配置这些功能。使用启动模板时，建议您对每个模板进行版本控制。利用启动模板的版本控制，您可以创建全套参数的子集。然后，您可以重复使用它来创建同一启动模板的其他版本。

 可以使用 AWS Auto Scaling 或通过 [AWS API 或 SDK](https://aws.amazon.com/developer/tools/) 在代码中加入扩缩。这样省去了手动更改环境的操作成本，因而工作负载的总体成本得以降低，而且可以更快地执行更改。这还使您的工作负载资源配置随时与您的需求相匹配。为了遵循这一最佳实践，并为组织动态供应资源，您应该了解 AWS 云 中的水平和垂直扩缩，以及 Amazon EC2 实例上运行的应用程序的性质。您的云财务管理团队最好与技术团队合作，以遵循这一最佳实践。

 [弹性负载均衡（ELB）](https://aws.amazon.com/elasticloadbalancing/)通过在多种资源之间分配需求来帮助您扩缩规模。通过使用 ASG 和弹性负载均衡，可以按照最优方式路由流量来管理传入的请求，以便自动扩缩组中没有一个实例会发生负载过高的情况。请求将以轮询方式，在目标组的所有目标上分配，而不考虑容量或利用率。

 典型的指标可以是标准 Amazon 指标，例如 CPU 利用率、网络吞吐量以及弹性负载均衡观察到的请求和响应延迟。如果可能，应该使用指示客户体验的指标，通常是来自工作负载中的应用程序代码的自定义指标。在本文档中，为了详细说明如何动态满足需求，我们将自动扩缩划分为两类：基于需求的供应模型和基于时间的供应模型，并分别深入探讨这两种模型。

**基于需求的供应：**利用云的弹性来提供资源，根据近实时的需求状态来满足不断变化的需求。对于基于需求的供应，请使用 API 或服务功能，以编程方式改变架构中云资源的数量。这让您能够在架构中扩缩组件，并在需求高峰期间增加资源数量以保持性能，也可以在需求量降低时减少容量以降低成本。

![\[图中描述了基于需求的扩缩策略，例如简单/分步扩缩和目标跟踪。\]](http://docs.aws.amazon.com/zh_cn/wellarchitected/latest/cost-optimization-pillar/images/demand-based-supply.png)


 
+  **简单/步骤扩缩：**监控指标，按照客户定义的步骤手动添加/删除实例。
+  **目标跟踪：**类似恒温器的控制机制，可自动添加或删除实例，以维护客户定义的目标指标。

当采用基于需求的方法进行构建时，请注意两个重要事项。首先，了解您必须以多快的速度预置新资源。其次，了解供应和需求之间的差额将发生变化。您必须准备好应对需求变化的速度，并准备好应对资源故障。

**基于时间的供应：**基于时间的方法可以协调资源容量，以满足可预测或按时间明确定义的需求。此方法通常不依赖资源的利用水平。基于时间的方法可以确保资源在需要的特定时间可用，并且提供时不会因启动程序和系统或一致性检查而发生延迟。使用基于时间的方法，您可以在繁忙时段提供额外的资源或增加容量。

![\[图中描述了基于时间的扩缩策略，例如计划扩缩和预测性扩缩。\]](http://docs.aws.amazon.com/zh_cn/wellarchitected/latest/cost-optimization-pillar/images/time-based-supply.png)


 

您可以使用计划性或预测性自动扩缩，实施基于时间的方法。工作负载可以在规定的时间按计划横向扩展或缩减（例如办公时间开始时），从而确保用户就位或需求增加时资源可用。预测性扩缩使用相关模式进行横向扩展，而计划扩缩在预先规定的时间进行横向扩展。您还可以在自动扩缩组中使用[基于属性的实例类型选择（ABS）策略](https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-asg-instance-type-requirements.html)，该策略允许您将实例要求表示为一组属性，例如 vCPU、内存和存储。这还允许您在新一代实例类型发布时自动使用它们，并通过 Amazon EC2 竞价型实例访问更广泛的容量。Amazon EC2 Fleet 和 Amazon EC2 Auto Scaling 会选择并启动符合指定属性的实例，无需手动选择实例类型。

可以利用 [AWS API 和 SDK](https://aws.amazon.com/developer/tools/) 以及 [AWS CloudFormation](https://aws.amazon.com/cloudformation/)，在需要时自动预置和停用整个环境。此方法非常适合仅在规定的办公时间或时间段运行的开发或测试环境。您可以使用 API 来扩缩环境中的资源大小（垂直扩缩）。例如，可以通过更改实例大小或类纵向扩展生产工作负载。这可以通过停止和启动实例，以及选择不同的实例大小或类来实现。这种技巧也可以应用于其他资源，如 Amazon EBS 弹性卷，您可以在使用时对其进行修改以增加大小、调整性能（IOPS）或更改卷类型。

当采用基于时间的方法进行构建时，请注意两个重要事项。首先，使用模式的一致性如何？ 其次，如果模式发生更改会产生什么影响？ 您可以通过两种方式提高预测的准确性：监控工作负载和使用商业智能。如果您发现使用模式发生重大更改，可以调整时间，以确保提供覆盖范围。

## 实施步骤
<a name="implementation-steps"></a>
+ **配置计划扩缩：**对于可预测的需求变化，基于时间的扩缩可以及时提供正确的资源数量。如果资源创建和配置的速度不够快，无法响应需求变化，也可使用这种方法。根据工作负载分析，使用 AWS Auto Scaling 配置计划扩缩。要配置基于时间的计划，可以使用预测性扩缩而不是计划扩缩，根据预期或可预测的负载变化，提前增加自动扩缩组中的 Amazon EC2 实例数量。
+  **配置预测性扩缩：**使用预测性扩缩，可在流量流的每日和每周模式之前增加自动扩缩组中的 Amazon EC2 实例数量。如果您有定期的流量高峰和需要很长时间才能启动的应用程序，则应该考虑使用预测性扩缩。与本质上属于被动应对的单纯动态扩缩相比，预测性扩缩可帮助您在预计负载到来之前初始化容量，从而更快地扩缩。例如，如果用户在开始上班时开始使用工作负载，而在下班后不再使用，预测性扩缩可以在上班之前增加容量，这就消除了动态扩缩对流量变化作出反应的延迟。
+ **配置动态自动扩缩：**要根据活动工作负载指标配置扩缩，请使用自动扩缩。使用分析并配置自动扩缩以在正确的资源级别启动，并确认工作负载在所需的时间内横向缩减。您可以启动并自动扩展单个 Auto Scaling 组中的一组按需实例和竞价型实例。除了享受使用竞价型实例的折扣外，您还可以使用预留实例或 Savings Plan 获得常规按需实例定价的折扣费率。以上所有因素的综合作用是帮助您进一步节约 Amazon EC2 实例成本，同时帮助您获得应用程序所需的规模和性能。

## 资源
<a name="resources"></a>

 **相关文档：**
+  [AWS Auto Scaling](https://aws.amazon.com/autoscaling/) 
+  [AWS 实例调度器](https://aws.amazon.com/answers/infrastructure-management/instance-scheduler/) 
+  扩展 Auto Scaling 组的大小 
+  [Getting Started with Amazon EC2 Auto Scaling](https://docs.aws.amazon.com/autoscaling/ec2/userguide/GettingStartedTutorial.html) 
+  [Getting started with Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-getting-started.html) 
+  [Scheduled Scaling for Amazon EC2 Auto Scaling](https://docs.aws.amazon.com/autoscaling/ec2/userguide/schedule_time.html) 
+ [Predictive scaling for Amazon EC2 Auto Scaling](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-predictive-scaling.html)

 **相关视频：**
+ [Target Tracking Scaling Policies for Auto Scaling](https://www.youtube.com/watch?v=-RumeaoPB2M)
+ [AWS 实例调度器](https://www.youtube.com/watch?v=nTLEyo2NzUs)

 **相关示例：**
+ [基于属性选择实例类型用于 Amazon EC2 Fleet 的自动扩缩](https://aws.amazon.com/blogs/aws/new-attribute-based-instance-type-selection-for-ec2-auto-scaling-and-ec2-fleet/)
+ [Optimizing Amazon Elastic Container Service for cost using scheduled scaling](https://aws.amazon.com/blogs/containers/optimizing-amazon-elastic-container-service-for-cost-using-scheduled-scaling/)
+ [Predictive Scaling with Amazon EC2 Auto Scaling](https://aws.amazon.com/blogs/compute/introducing-native-support-for-predictive-scaling-with-amazon-ec2-auto-scaling/)
+ [如何将实例调度器和 CloudFormation 配合使用来计划 Amazon EC2 实例？](https://aws.amazon.com/premiumsupport/knowledge-center/stop-start-instance-scheduler/)