

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

# 在预留容量实例集上运行构建
<a name="fleets"></a>

CodeBuild 提供以下计算队列：
+ 按需车队
+ 预留容量实例集

使用按需队列，为您的构建 CodeBuild 提供计算。构建完成后，计算机就会被销毁。按需实例集是完全托管式的，并包括自动扩展功能以应对需求激增。

**注意**  
按需实例集不支持 macOS。

CodeBuild 还提供预留容量队列，其中包含由 Amazon EC2 提供支持并由维护的 CodeBuild实例。使用预留容量实例集，您可以为构建环境配置一组专用实例。这些计算机保持闲置状态，可以立即处理生成或测试，并缩短构建持续时间。使用预留容量实例集，您的计算机将始终处于运行状态，并且只要预调配完毕，它们就会继续产生成本。

**重要**  
无论您运行实例多长时间，预留容量实例集的每个实例都会产生初始费用，之后可能会有额外的相关费用。有关更多信息，请参阅 [https://www.amazonaws.cn/codebuild/pricing/](https://www.amazonaws.cn/codebuild/pricing/)。

**Topics**
+ [创建预留容量实例集](#fleets.how-to)
+ [最佳实践](#fleets.best-practices)
+ [我能否在多个 CodeBuild 项目之间共享预留容量队列？](#fleets.share)
+ [基于属性的计算是如何工作的？](#fleets.attribute-compute)
+ [我能否为我的实例集手动指定 Amazon EC2 实例？](#fleets.manual-input-compute)
+ [哪些区域支持预留容量实例集？](#fleets.regions)
+ [如何配置 macOS 预留容量实例集？](#fleets.configure-macos)
+ [如何为预留容量实例集配置自定义亚马逊机器映像（AMI）？](#fleets.custom-ami)
+ [预留容量实例集的局限性](#fleets.limitations)
+ [预留容量实例集属性](fleets.reserved-capacity-fleets.md)
+ [预留容量样品包含 Amazon CodeBuild](reserved-capacity-samples.md)

## 创建预留容量实例集
<a name="fleets.how-to"></a>

按照以下说明创建预留容量实例集。

**创建预留容量实例集**

1. 登录 Amazon Web Services 管理控制台 并在 [https://console.aws.amazon.com/codesuite/codebuild](https://console.amazonaws.cn/codesuite/codebuild/home) /hom Amazon CodeBuild e 中打开控制台。

1. 在导航窗格中，选择**计算实例集**，然后选择**创建实例集**。

1. 在**计算实例集名称**文本字段中，输入实例集的名称。

1. 从**操作系统**下拉菜单中，选择操作系统。

1. 从**架构**下拉菜单中，选择架构。

1. （可选）选择**使用实例运行模式 - 可选**，以便直接在 Amazon EC2 实例而不是 Docker 容器上运行。然后选择**主要版本**和**次要版本**。

1. （可选）在**其他配置**中，执行以下操作：
   + 选择**配置 VPC - 可选**以将实例集连接到 VPC，以便在使用期间访问私有资源。
     + 从 **VPC** 下拉菜单中，选择您的 CodeBuild 队列将访问的 VPC。
     + 从**子网**下拉菜单中，选择 CodeBuild 应用于设置 VPC 配置的子网。
     + 从**安全组**下拉菜单中，选择 CodeBuild 应用于与您的 VPC 配合使用的安全组。
     + 在**实例集服务角色**字段中，选择已有服务角色。
**注意**  
确保实例集角色具有必要的权限。有关更多信息，请参阅 [允许用户为实例集服务角色添加权限策略](auth-and-access-control-iam-identity-based-access-control.md#customer-managed-policies-example-permission-policy-fleet-service-role)。
     + 如果您选择了 Amazon Linux 操作系统，请选择**定义代理配置 - 可选**，以便对您的预留容量实例应用网络访问控制。
     + 对于**默认行为**，选择在默认情况下是允许还是拒绝发往所有目标的传出流量。
     + 对于**代理规则**，选择**添加代理规则**以指定目标域或 IPs 允许或拒绝网络访问控制。
   + 选择**配置自定义 AMI - 可选**，以使用自定义亚马逊机器映像（AMI）。
     + 从 **AMI** 下拉菜单中，为您的实例集选择亚马逊机器映像（AMI）。
     + 在**实例集服务角色**字段中，选择已有服务角色。
**注意**  
确保实例集角色具有必要的权限。有关更多信息，请参阅 [允许用户为实例集服务角色添加权限策略](auth-and-access-control-iam-identity-based-access-control.md#customer-managed-policies-example-permission-policy-fleet-service-role)。

1. 在**容量配置**中，从**计算选择模式**中选择以下选项之一：
   + 如果您选择**引导式选择**，请执行以下操作：
     + 对于**计算**，请选择此实例集中包含的实例类型。
     + 在**容量**文本字段中，输入实例集中的最少实例数。
     + （可选）在**其他配置**中，执行以下操作：
       + 选择**配置扩展 - 可选**，以根据此配置自动扩展您的实例集。从**扩展模式 - 可选**下拉菜单中，选择在需求超过实例集容量时的行为。
   + 如果选择**自定义实例**，请执行以下操作：
     + 从**计算实例类型**下拉菜单中，选择此实例集中包含的实例类型。
     + 在**其他 EBS 卷大小 - 可选**文本字段中，输入提供的 64 GB 磁盘空间之外的额外容量。
     + 在**容量**文本字段中，输入实例集中的最少实例数。
     + （可选）在**其他配置**中，执行以下操作：
       + 选择**配置扩展 - 可选**，以根据此配置自动扩展您的实例集。从**扩展模式 - 可选**下拉菜单中，选择在需求超过实例集容量时的行为。

1. 选择**创建计算实例集**。

1. 创建计算队列后，创建一个新 CodeBuild 项目或编辑现有项目。从**环境**中，选择**预置模型**下的**预留容量**，然后在**实例集名称**下选择指定的实例集。

## 最佳实践
<a name="fleets.best-practices"></a>

使用预留容量实例集时，我们建议您遵循以下这些最佳实践。
+ 我们建议使用源代码缓存模式，通过缓存源代码来帮助提高构建性能。
+ 我们建议使用 Docker 层缓存，通过缓存现有 Docker 层来帮助提高构建性能。

## 我能否在多个 CodeBuild 项目之间共享预留容量队列？
<a name="fleets.share"></a>

可以，您可以通过在多个项目中使用实例集的容量来最大限度地提高其利用率。

**重要**  
使用预留容量特征时，同一账户内的其他项目可以访问实例集实例中缓存的数据，包括源文件、Docker 层和 buildspec 中指定的缓存目录。这是设计使然，让同一账户内的项目可以共享实例集实例。

## 基于属性的计算是如何工作的？
<a name="fleets.attribute-compute"></a>

如果您选择 `ATTRIBUTE_BASED_COMPUTE` 作为实例集的 `computeType`，则可以在名为 `computeConfiguration` 的新字段中指定属性。这些属性包括 v CPUs、内存、磁盘空间和`machineType`。此 `machineType` 为 `GENERAL` 或 `NVME`。指定一个或一些可用属性后， CodeBuild 将从支持的可用实例类型中选择一种计算类型作为最终版本`computeConfiguration`。

**注意**  
CodeBuild 将选择符合所有输入要求的最便宜的实例。所选实例的内存CPUs、v 和磁盘空间都将大于或等于输入要求。您可以在已创建或更新的实例集中检查已解析的 `computeConfiguration`。

如果您输入`computeConfiguration`的 a 无法满足 CodeBuild，则会收到验证异常。另请注意，如果 `computeConfiguration` 不适用于按需情况，则按需实例集溢出行为将被覆盖为队列行为。

## 我能否为我的实例集手动指定 Amazon EC2 实例？
<a name="fleets.manual-input-compute"></a>

可以，您可以通过选择**自定义实例**或配置 API 参数 `InstanceType`，直接在控制台中输入所需的 Amazon EC2 实例。此字段用于以下用途 APIs： CreateFleet UpdateFleet、 CreateProject、 UpdateProject 和 StartBuild。有关更多信息，请参阅 [Compute instance type](fleets.reserved-capacity-fleets.md#compute)。

## 哪些区域支持预留容量实例集？
<a name="fleets.regions"></a>

以下地区支持预留容量 Amazon Linux 和 Windows 队列 Amazon Web Services 区域：美国东部（弗吉尼亚北部）、美国东部（俄亥俄州）、美国西部（俄勒冈）、亚太地区（孟买）、亚太地区（新加坡）、亚太地区（悉尼）、亚太地区（东京）、欧洲（法兰克福）、欧洲（爱尔兰）和南美洲（圣保罗）。有关 Amazon Web Services 区域 何处 CodeBuild 可用的更多信息，请参阅[按地区划分的Amazon 服务](https://www.amazonaws.cn/about-aws/global-infrastructure/regional-product-services/)。

以下地区支持预留容量 macOS 中型舰队 Amazon Web Services 区域：美国东部（弗吉尼亚北部）、美国东部（俄亥俄州）、美国西部（俄勒冈）、亚太地区（悉尼）和欧洲（法兰克福）。预留容量 macOS 以下地区支持大型机群 Amazon Web Services 区域：美国东部（弗吉尼亚北部）、美国东部（俄亥俄州）、美国西部（俄勒冈）和亚太地区（悉尼）。

## 如何配置 macOS 预留容量实例集？
<a name="fleets.configure-macos"></a>

**配置 macOS 预留容量实例集**

1. 登录 Amazon Web Services 管理控制台 并在 [https://console.aws.amazon.com/codesuite/codebuild](https://console.amazonaws.cn/codesuite/codebuild/home) /hom Amazon CodeBuild e 中打开控制台。

1. 在导航窗格中，选择**计算实例集**，然后选择**创建实例集**。

1. 在**计算实例集名称**文本字段中，输入实例集的名称。

1. 在**操作系统**下拉菜单中，选择 **macOS**。

1. 在 “**计算**” 字段中，选择以下计算机类型之一：**Apple M2、24 GB 内存、8 v CPUs** 或 **Apple M2、32 GB 内存、12 v CPUs**。

1. 在**容量**文本字段中，输入实例集中的最少实例数。

1. （可选）要为实例集使用自定义映像，请参阅[如何为预留容量实例集配置自定义亚马逊机器映像（AMI）？](#fleets.custom-ami)，以确保您的亚马逊机器映像（AMI）满足所需的先决条件。

1. （可选）要使用您的实例集配置 VPC，请在**其他配置**中执行以下操作：
   + 从 **VPC-可选**下拉菜单中，选择您的 CodeBuild 队列将访问的 VPC。
   + 从**子网**下拉菜单中，选择 CodeBuild 应用于设置 VPC 配置的子网。
   + 从**安全组**下拉菜单中，选择 CodeBuild 应用于与您的 VPC 配合使用的安全组。
   + 在**实例集服务角色**字段中，选择已有服务角色。
**注意**  
确保实例集角色具有必要的权限。有关更多信息，请参阅 [允许用户为实例集服务角色添加权限策略](auth-and-access-control-iam-identity-based-access-control.md#customer-managed-policies-example-permission-policy-fleet-service-role)。

1. 选择**创建计算实例集**并等待实例集实例启动。启动后，容量将在`n/n`，提供的容量在*n*哪里。

1. 计算队列启动后，创建一个新 CodeBuild 项目或编辑现有项目。从**环境**中，选择**预置模型**下的**预留容量**，然后在**实例集名称**下选择指定的实例集。

## 如何为预留容量实例集配置自定义亚马逊机器映像（AMI）？
<a name="fleets.custom-ami"></a>

**为预留容量实例集配置自定义亚马逊机器映像（AMI）**

1. 登录 Amazon Web Services 管理控制台 并在 [https://console.aws.amazon.com/codesuite/codebuild](https://console.amazonaws.cn/codesuite/codebuild/home) /hom Amazon CodeBuild e 中打开控制台。

1. 在导航窗格中，选择**计算实例集**，然后选择**创建实例集**。

1. 在**计算实例集名称**文本字段中，输入实例集的名称。

1. 为实例集选择**自定义映像**，并确保您的亚马逊机器映像（AMI）满足以下先决条件：
   + 如果环境类型为 `MAC_ARM`，请确保 AMI **架构**为 64 位 `Mac-Arm`。
   + 如果环境类型为 `LINUX_EC2`，请确保 AMI **架构**为 64 位 `x86`。
   + 如果环境类型为 `ARM_EC2`，请确保 AMI **架构**为 64 位 `Arm`。
   + 如果环境类型为 `WINDOWS_EC2`，请确保 AMI **架构**为 64 位 `x86`。
   + AMI 允许 CodeBuild 服务**组织 ARN**。有关组织的列表 ARNs，请参阅[Amazon Machine Images (AMI)](fleets.reserved-capacity-fleets.md#ami)。
   + 如果 AMI 使用 Amazon KMS 密钥加密，则该 Amazon KMS 密钥还必须允许 CodeBuild 服务**组织 ID**。有关组织的列表 IDs，请参阅[Amazon Machine Images (AMI)](fleets.reserved-capacity-fleets.md#ami)。有关 Amazon KMS 密钥的更多信息，请参阅 *Amazon EC2 用户指南*中的[允许组织和 OUs 使用 KMS 密钥](https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/share-amis-with-organizations-and-OUs.html#allow-org-ou-to-use-key)。要向 CodeBuild 组织授予使用 KMS 密钥的权限，请在密钥策略中添加以下语句：

     ```
     {
         "Sid": "Allow access for organization root",
         "Effect": "Allow",
         "Principal": "*",
         "Action": [
             "kms:Describe*",
             "kms:List*",
             "kms:Get*",
             "kms:Encrypt",
             "kms:Decrypt",
             "kms:ReEncrypt*",
             "kms:GenerateDataKey*",
             "kms:CreateGrant"
         ],
         "Resource": "*",
         "Condition": {
             "StringEquals": {
                 "aws:PrincipalOrgID": "o-123example"
             }
         }
     }
     ```
   + 在**实例集服务角色**字段中，授予以下 Amazon EC2 权限：

------
#### [ JSON ]

****  

     ```
     {
         "Version":"2012-10-17",		 	 	 
         "Statement": [
             {
                 "Effect": "Allow",
                 "Action": [
                    "ec2:DescribeImages",
                    "ec2:DescribeSnapshots"
                 ],
                 "Resource": "*"
             }
         ]
     }
     ```

------

## 预留容量实例集的局限性
<a name="fleets.limitations"></a>

在预留容量实例集不支持的某些用例中，如果它们对您产生影响，请改用按需实例集：
+ 预留容量实例集不支持构建利用率指标。
+ macOS 预留容量实例集不支持调试会话。

有关限制和限额的更多信息，请参阅[计算实例集](limits.md#fleet-limits)。