

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Elastic Beanstalk 环境的容量配置
配置

本主题介绍为您的 Elastic Beanstalk 环境配置 Auto Scaling 容量的不同方法。您可以使用 Elastic Beanstalk 控制台、EB CLI Amazon CLI、或命名空间选项。

**重要**  
`EnableSpot` 选项设置可能导致 Elastic Beanstalk 将具有启动配置的现有环境迁移到启动模板。此行为需要具备管理启动模板的必要权限。这些权限包含在我们的托管式策略中。如果您使用自定义策略而非托管式策略，则在更新环境配置时，创建或更新环境可能会失败。有关更多信息和重要注意事项，请参阅[将 Elastic Beanstalk 环境迁移到启动模板](environments-cfg-autoscaling-launch-templates.md)。

## 使用控制台的配置
控制台

您可以通过在 [Elastic Beanstalk 控制台](environments-console.md)中环境的**配置**页面上编辑**容量**来配置自动扩缩组的容量管理方式。

**在 Elastic Beanstalk 控制台中配置自动扩缩组容量**

1. 打开 [Elastic Beanstalk](https://console.amazonaws.cn/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 Amazon Web Services 区域

1. 在导航窗格中，选择 **Environments**（环境），然后从列表中选择环境的名称。

1. 在导航窗格中，选择 **Configuration (配置)**。

1. 在 **Capacity (容量)** 配置类别中，选择 **Edit (编辑)**。

1. 在 **Auto Scaling group (Auto Scaling 组)** 部分中，配置以下设置。
   + **Environment type (环境类型)** - 选择 **Load balanced (负载均衡)**。
   + **Min instances (最小实例数)** - 组在任何时间均应包含的最小 EC2 实例数。组从最小计数开始，当满足扩展触发条件时，则添加实例。
   + **Max instances (最大实例数)** - 组在任何时间均应包含的最大 EC2 实例数。
**注意**  
如果您使用滚动更新，请确保最大实例计数高于滚动更新的 [**Minimum instances in service (使用的最小实例数)** 设置](using-features.rollingupdates.md#rollingupdates-configure)。
   + **机群组合** (Fleet composition) — 默认值为**按需实例**。要启用 *Spot 实例*请求，请选择**组合购买选项和实例**。
**重要**  
`EnableSpot` 选项设置可能导致 Elastic Beanstalk 将具有启动配置的现有环境迁移到启动模板。此行为需要具备管理启动模板的必要权限。这些权限包含在我们的托管式策略中。如果您使用自定义策略而非托管式策略，则在更新环境配置时，创建或更新环境可能会失败。有关更多信息和重要注意事项，请参阅[将 Elastic Beanstalk 环境迁移到启动模板](environments-cfg-autoscaling-launch-templates.md)。

     如果选择启用 *Spot 实例*请求，请启用以下选项：
     + **竞价型分配策略**：根据可用容量、价格和实例类型选择，确定在您的环境中管理和预置竞价型实例的方法。从*容量优化型策略*（默认）、*价格容量优化新房策略*、*容量优化优先性策略*或*最低价格策略*中选择。有关每种分配策略的描述和更多信息，请参阅[竞价型实例的分配策略](environments-cfg-autoscaling-spot-allocation-strategy.md)。
     + **最高 Spot 价格** — 有关竞价型实例最高价格选项的建议，请参阅《*Amazon EC2 用户指南*》中的[竞价型实例定价历史记录](https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/using-spot-instances-history.html)。
     + **按需基准** (On-Demand base) – 向外扩展环境时，在考虑 Spot 实例之前，Auto Scaling 组预配置的最小按需实例数。
     + **按需上方基准** (On-Demand above base)– Auto Scaling 组在按需基本实例之外调配的任何额外容量中，按需实例所占的百分比。
**注意**  
**按需型实例基本比例**和**超出基本比例的按需实例百分比**选项与前面列出的**最小数量**和**最大数量***实例*选项相关联。有关这些选项和例子的更多信息，请参阅 [Elastic Beanstalk 环境的竞价型实例支持](environments-cfg-autoscaling-spot.md)。
     + **容量重新平衡**：仅当自动扩缩组中至少有一个竞价型实例时，此选项才适用。启用此功能后，EC2 会在中断前自动尝试替换自动扩缩组中的竞价型实例，以最大限度地减少竞价型实例中断对应用程序的影响。有关更多信息，请参阅《Amazon EC2 Auto Scaling User Guide》** 中的 [Capacity Rebalancing](https://docs.amazonaws.cn/autoscaling/ec2/userguide/capacity-rebalance.html)
   + **架构**：EC2 实例的处理器架构。处理器架构决定了下一个字段中可用的 EC2 实例类型。
   + **实例类型**：为运行应用程序而启动的 Amazon EC2 实例的类型。有关更多信息，请参阅 [实例类型](using-features.managing.ec2.console.md#using-features.managing.ec2.instancetypes)。
   + **AMI ID** - Elastic Beanstalk 用来启动环境中的 Amazon EC2 实例的计算机映像。有关更多信息，请参阅 [AMI ID](using-features.managing.ec2.console.md#using-features.managing.ec2.customami)。
   + **Availability Zones (可用区)** - 选择环境实例要跨越的可用区的数量。默认情况下，Auto Scaling 组会在所有可用区中均匀启动实例。要将实例集中在少数几个区域中，请选择要使用的区域数。对于生产环境而言，至少要使用两个区域，以确保当一个可用区中断服务时您的应用程序仍然可用。
   + **Placement (放置)**（可选）- 选择要使用的可用区。如果您的实例需要连接至特定区域中的资源或者您购买了区域特定的[预留实例](https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/concepts-on-demand-reserved-instances.html)，请使用此设置。如果您在自定义 VPC 中启动环境，则无法配置此选项。在自定义 VPC 中，您需要为分配给环境的子网选择可用区。
   + **Scaling cooldown (扩展冷却时间)** - 在扩展之后、在继续评估触发器之前等待实例启动或终止的时间（以秒为单位）。有关更多信息，请参阅[扩展冷却时间](https://docs.amazonaws.cn/autoscaling/ec2/userguide/Cooldown.html)。

1. 要保存更改，请选择页面底部的 **Apply**（应用）。

## 使用命名空间选项进行配置
命名空间选项

Elastic Beanstalk 在以下两个命名空间中提供了用于 Auto Scaling 设置的[配置选项](command-options.md)：[`aws:autoscaling:asg`](command-options-general.md#command-options-general-autoscalingasg) 和 [`aws:ec2:instances`](command-options-general.md#command-options-general-ec2instances)。

### aws:autoscaling:asg 命名空间


[`aws:autoscaling:asg`](command-options-general.md#command-options-general-autoscalingasg) 命名空间提供了用于整体调整和可用性的选项。

以下[配置文件](ebextensions.md)示例配置 Auto Scaling 组以便使用两到四个实例、特定可用区和 12 分钟（720 秒）的冷却时间。它为竞价型实例启用了[容量重新平衡](https://docs.amazonaws.cn/autoscaling/ec2/userguide/capacity-rebalance.html)。只有在 [`aws:ec2:instances`](command-options-general.md#command-options-general-ec2instances) 命名空间中将 `EnableSpot` 设置为 `true` 时，`EnableCapacityRebalancing` 选项才会生效，如下面的配置文件示例所示。

```
option_settings:
  aws:autoscaling:asg:
    Availability Zones: Any
    Cooldown: '720'
    Custom Availability Zones: 'us-west-2a,us-west-2b'
    MaxSize: '4'
    MinSize: '2'
    EnableCapacityRebalancing: true
```

### aws:ec2:instances 命名空间


**注意**  
当您更新环境配置并从 `InstanceTypes` 选项中删除一个或多个实例类型时，Elastic Beanstalk 会终止在任何已删除的实例类型上运行的任何 Amazon EC2 实例。然后，您环境的 Auto Scaling 组根据需要启动新实例，以使用当前指定的实例类型来完成所需的容量。

[`aws:ec2:instances`](command-options-general.md#command-options-general-ec2instances) 命名空间提供与环境的实例相关的选项，包括 Spot 实例管理。它是 [`aws:autoscaling:launchconfiguration`](command-options-general.md#command-options-general-autoscalinglaunchconfiguration) 和 [`aws:autoscaling:asg`](command-options-general.md#command-options-general-autoscalingasg) 的补充。

以下[配置文件](ebextensions.md)示例配置 Auto Scaling 组，以便为环境启用 Spot 实例请求。它指定了三种可以使用的实例类型。至少采用一个按需实例作为基准容量，并采用 33% 的按需实例作为补充用的任何额外容量。

此配置将[竞价型分配策略](environments-cfg-autoscaling-spot-allocation-strategy.md)设置为 `capacity-optimized-prioritized`。这种特殊的分配策略根据 `InstanceTypes` 选项中指定的实例类型的顺序确定实例从实例池中启动的优先级。如果未指定 `SpotAllocationStrategy`，则其默认为 `capacity-optimized`。

```
option_settings:
  aws:ec2:instances:
    EnableSpot: true
    InstanceTypes: 't2.micro,t3.micro,t3.small'    
    SpotAllocationStrategy: capacity-optimized-prioritized
    SpotFleetOnDemandBase: '1'
    SpotFleetOnDemandAboveBasePercentage: '33'
```

要选择 Spot 实例类型，请使用 [Spot Instance Advisor](https://www.amazonaws.cn/ec2/spot/instance-advisor/)。

**重要**  
`EnableSpot` 选项设置可能导致 Elastic Beanstalk 将具有启动配置的现有环境迁移到启动模板。此行为需要具备管理启动模板的必要权限。这些权限包含在我们的托管式策略中。如果您使用自定义策略而非托管式策略，则在更新环境配置时，创建或更新环境可能会失败。有关更多信息和重要注意事项，请参阅[将 Elastic Beanstalk 环境迁移到启动模板](environments-cfg-autoscaling-launch-templates.md)。

## 使用 Amazon CLI
Amazon CLI

本节提供了一些示例，说明如何使用 Amazon CLI [create-](https://docs.amazonaws.cn/cli/latest/reference/elasticbeanstalk/create-environment.html) environment 命令通过这些部分中描述的 Auto Scaling 和 Capacity 选项来配置您的环境。您会注意到，此示例中还配置了前面[命名空间配置选项](#environments-cfg-autoscaling-namespace)一节中所述的 [`aws:autoscaling:asg`](command-options-general.md#command-options-general-autoscalingasg) 和 [`aws:ec2:instances`](command-options-general.md#command-options-general-ec2instances) 的命名空间设置。

 Amazon 命令行界面提供用于创建和配置 Elastic Beanstalk 环境的命令。使用 `--option-settings` 选项，您可以传入 Elastic Beanstalk 支持的命名空间选项。这意味着前面描述的[命名空间配置选项](#environments-cfg-autoscaling-namespace)可以传递到适用的 Amazon CLI 命令中，以配置您的 Elastic Beanstalk 环境。

**注意**  
您还可以使用带有 `--option-settings` 的 [update-environment](https://docs.amazonaws.cn/cli/latest/reference/elasticbeanstalk/update-environment.html) 命令来添加或更新命名空间选项。如果您需要从环境中移除任何命名空间选项，请使用带有 `--options-to-remove` 的 **update-environment** 命令。

以下示例会创建一个新环境。有关传入的选项的更多上下文信息，请参阅上一个[命名空间配置选项](#environments-cfg-autoscaling-namespace)主题。

列出的第一个选项，即 [aws:autoscaling:launchconfiguration](command-options-general.md#command-options-general-autoscalinglaunchconfiguration) 命名空间中的 `IamInstanceProfile`，是 Elastic Beanstalk [实例配置文件](concepts-roles-instance.md)。创建新环境时需要该选项。

**Example ：使用 Auto Scaling 选项创建环境（命名空间选项内联）**  

```
aws elasticbeanstalk create-environment \
--region us-east-1 \
--application-name my-app \
--environment-name my-env \
--solution-stack-name "64bit Amazon Linux 2023 v4.3.0 running Python 3.12" \
--option-settings \
Namespace=aws:autoscaling:launchconfiguration,OptionName=IamInstanceProfile,Value=aws-elasticbeanstalk-ec2-role
Namespace=aws:autoscaling:asg,OptionName=Availability Zones,Value=Any \
Namespace=aws:autoscaling:asg,OptionName=Cooldown,Value=720 \
Namespace=aws:autoscaling:asg,OptionName=Custom Availability Zones,Value=us-west-2a,us-west-2b \
Namespace=aws:autoscaling:asg,OptionName=MaxSize,Value=4 \
Namespace=aws:autoscaling:asg,OptionName=MinSize,Value=2 \
Namespace=aws:autoscaling:asg,OptionName=EnableCapacityRebalancing,Value=true \
Namespace=aws:ec2:instances,OptionName=EnableSpot,Value=true \
Namespace=aws:ec2:instances,OptionName=InstanceTypes,Value=t2.micro,t3.micro,t3.small \
Namespace=aws:ec2:instances,OptionName=SpotAllocationStrategy,Value=capacity-optimized-prioritized \
Namespace=aws:ec2:instances,OptionName=SpotFleetOnDemandBase,Value=1 \
Namespace=aws:ec2:instances,OptionName=SpotFleetOnDemandAboveBasePercentage,Value=33
```





**重要**  
`EnableSpot` 选项设置可能导致 Elastic Beanstalk 将具有启动配置的现有环境迁移到启动模板。此行为需要具备管理启动模板的必要权限。这些权限包含在我们的托管式策略中。如果您使用自定义策略而非托管式策略，则在更新环境配置时，创建或更新环境可能会失败。有关更多信息和重要注意事项，请参阅[将 Elastic Beanstalk 环境迁移到启动模板](environments-cfg-autoscaling-launch-templates.md)。





作为替代方法，请使用 `options.json` 文件来指定命名空间选项，而不是将其内联。

**Example ：使用 Auto Scaling 选项创建环境（`options.json` 文件中的命名空间选项）**  

```
aws elasticbeanstalk create-environment \
--region us-east-1 \
--application-name my-app \
--environment-name my-env \
--solution-stack-name "64bit Amazon Linux 2023 v4.3.0 running Python 3.12"
--option-settings file://options.json
```

**Example**  

```
### example options.json ###
[
    {
        "Namespace": "aws:autoscaling:launchconfiguration",
        "OptionName": "IamInstanceProfile",
        "Value": "aws-elasticbeanstalk-ec2-role"
    },
    {
        "Namespace": "aws:autoscaling:asg",
        "OptionName": "Availability Zones",
        "Value": "Any"
    },
    {
        "Namespace": "aws:autoscaling:asg",
        "OptionName": "Cooldown",
        "Value": "720"
    },
    {
        "Namespace": "aws:autoscaling:asg",
        "OptionName": "Custom Availability Zones",
        "Value": "us-west-2a,us-west-2b"
    },
    {
        "Namespace": "aws:autoscaling:asg",
        "OptionName": "MaxSize",
        "Value": "4"
    },
    {
        "Namespace": "aws:autoscaling:asg",
        "OptionName": "MinSize",
        "Value": "2"
    },
    {
        "Namespace": "aws:autoscaling:asg",
        "OptionName": "EnableCapacityRebalancing",
        "Value": "true"
    },
    {
        "Namespace": "aws:ec2:instances",
        "OptionName": "EnableSpot",
        "Value": "true"
    },
    {
        "Namespace": "aws:ec2:instances",
        "OptionName": "InstanceTypes",
        "Value": "t2.micro,t3.micro,t3.small"
    },
    {
        "Namespace": "aws:ec2:instances",
        "OptionName": "SpotAllocationStrategy",
        "Value": "capacity-optimized-prioritized"
    },
    {
        "Namespace": "aws:ec2:instances",
        "OptionName": "SpotFleetOnDemandBase",
        "Value": "1"
    },
    {
        "Namespace": "aws:ec2:instances",
        "OptionName": "SpotFleetOnDemandAboveBasePercentage",
        "Value": "33"
    }
]
```

## 使用 EB CLI 进行配置
EB CLI

使用 [**eb create**](eb3-create.md) 命令创建环境时，可以指定几个与环境的 Auto Scaling 组相关的选项。这些选项可帮助您控制环境的容量。

`--single`  
使用一个 Amazon EC2 实例创建环境，并且不使用负载均衡器。如果您未使用此选项，负载均衡器会被添加到创建的环境中。

`--enable-spot`  
为您的环境启用 Spot 实例请求。  
`enable-spot` 选项设置可能导致 Elastic Beanstalk 将具有启动配置的现有环境迁移到启动模板。此行为需要具备管理启动模板的必要权限。这些权限包含在我们的托管式策略中。如果您使用自定义策略而非托管式策略，则在更新环境配置时，创建或更新环境可能会失败。有关更多信息和重要注意事项，请参阅[将 Elastic Beanstalk 环境迁移到启动模板](environments-cfg-autoscaling-launch-templates.md)。
只有 [**eb create**](eb3-create.md) 命令的以下这些选项才能与 `--enable-spot` 一起使用。    
`--instance-types`  
列出您希望环境使用的 Amazon EC2 实例类型。  
`--spot-max-price`  
您愿意为 Spot 实例支付的每单位小时的最高价（美元）。有关竞价型实例最高价格选项的建议，请参阅《*Amazon EC2 用户指南*》中的[竞价型实例定价历史记录](https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/using-spot-instances-history.html)。  
`--on-demand-base-capacity`  
扩展环境时，在考虑 Spot 实例之前，Auto Scaling 组预配置的最小按需实例数。  
`--on-demand-above-base-capacity`  
Auto Scaling 组在 `--on-demand-base-capacity` 选项指定的超过的实例数作为额外容量预配置的按需实例的百分比。

以下示例创建一个环境，并配置 Auto Scaling 组以便为新环境启用 Spot 实例请求。在此示例中，可以使用这三种实例类型。

```
$ eb create --enable-spot --instance-types "t2.micro,t3.micro,t3.small"
```

**重要**  
还有另一个名称类似的选项，称为 `--instance-type`（无“s”），EB CLI 仅在处理按需实例时识别该选项。请勿将 `--instance-type`（无“s”）与 `--enable-spot` 选项一同使用。如果您这样做，EB CLI 将忽略它。请改为将 `--instance-types`（带有“s”）与 `--enable-spot` 选项一同使用。