

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在預留容量機群上執行組建
<a name="fleets"></a>

CodeBuild 提供下列運算機群：
+ 隨需機群
+ 預留容量機群

透過隨需機群，CodeBuild 為您的建置提供運算。這些機器會在建置完成時銷毀。隨需機群受到完整管理，並包含自動擴展功能，可處理需求激增。

**注意**  
隨需機群不支援 macOS。

CodeBuild 也提供預留容量機群，其中包含由 CodeBuild 維護且採用 Amazon EC2 技術的執行個體。使用預留容量機群，您可以為建置環境設定一組專用執行個體。這些機器保持閒置狀態，準備好立即處理組建或測試，並減少組建持續時間。使用預留容量機群，您的機器一律在執行中，只要佈建，就會持續產生成本。

**重要**  
無論您執行執行個體的時間有多長，預留容量機群都會產生每個執行個體的初始費用，之後可能會產生額外的相關費用。如需詳細資訊，請參閱[https://aws.amazon.com/codebuild/pricing/](https://aws.amazon.com/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)
+ [

## 如何為預留容量機群設定自訂 Amazon Machine Image (AMI)？
](#fleets.custom-ami)
+ [

## 預留容量機群的限制
](#fleets.limitations)
+ [

# 預留容量機群屬性
](fleets.reserved-capacity-fleets.md)
+ [

# 使用 的預留容量範例 AWS CodeBuild
](reserved-capacity-samples.md)

## 建立預留容量機群
<a name="fleets.how-to"></a>

使用下列指示來建立預留容量機群。

**建立預留容量機群**

1. 登入 AWS 管理主控台 並在 https：//[https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home) 開啟 AWS CodeBuild 主控台。

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 作業系統，請選取**定義代理組態 - 選用**，以套用預留容量執行個體的網路存取控制。
     + 針對**預設行為**，選擇預設允許或拒絕所有目的地的傳出流量。
     + 針對 **Proxy 規則**，選擇**新增 Proxy 規則**以指定目的地網域或 IPs，以允許或拒絕網路存取控制。
   + 選取**設定自訂 AMI - 選用**以使用自訂 Amazon Machine Image (AMI)。
     + 從 **AMI** 下拉式選單中，為您的機群選取 Amazon Machine Image (AMI)。
     + 在**機群服務角色**欄位中，選擇現有的服務角色。
**注意**  
請確定您的機群角色具有必要的許可。如需詳細資訊，請參閱[允許使用者新增機群服務角色的許可政策](auth-and-access-control-iam-identity-based-access-control.md#customer-managed-policies-example-permission-policy-fleet-service-role)。

1. 在**容量組態**中，從**運算選擇模式中**，選擇下列其中一項：
   + 如果您選擇**引導式選擇**，請執行下列動作：
     + 針對**運算**，選擇此機群中包含的執行個體類型。
     + 在**容量**文字欄位中，輸入機群中執行個體的最小數量。
     + （選用） **在其他組態**中，執行下列動作：
       + 選取**設定擴展 - 選用**，以根據此組態自動擴展機群。從**擴展模式 - 選用**下拉式功能表中，選擇需求超過機群容量時的行為。
   + 如果您選擇**自訂執行個體**，請執行下列動作：
     + 從**運算執行個體類型**下拉式功能表中，選取此機群中包含的執行個體類型。
     + 在**其他 EBS 磁碟區大小 - 選用**文字欄位中，輸入所提供的 64GB 磁碟空間以外的磁碟區。
     + 在**容量**文字欄位中，輸入機群中執行個體的最小數量。
     + （選用） **在其他組態**中，執行下列動作：
       + 選取**設定擴展 - 選用**，以根據此組態自動擴展機群。從**擴展模式 - 選用**下拉式功能表中，選擇需求超過機群容量時的行為。

1. 選擇**建立運算機群**。

1. 建立運算機群後，請建立新的 CodeBuild 專案或編輯現有的專案。在**環境中**，選擇**佈建模型**下的**預留容量**，然後在**機群名稱**下選擇指定的機群。

## 最佳實務
<a name="fleets.best-practices"></a>

使用預留容量機群時，建議您遵循這些最佳實務。
+ 我們建議您使用來源快取模式，透過快取來源來協助改善建置效能。
+ 我們建議您使用 Docker layer 快取，透過快取現有的 Docker layer 來協助改善建置效能。

## 我可以跨多個 CodeBuild 專案共用預留容量機群嗎？
<a name="fleets.share"></a>

可以，您可以將機群容量的使用率最大化，方法是跨多個專案使用。

**重要**  
使用預留容量功能時，同一帳戶中的其他專案可以存取機群執行個體上快取的資料，包括來源檔案、Docker layer 和 buildspec 中指定的快取目錄。這是根據設計，並允許相同帳戶中的專案共用機群執行個體。

## 屬性型運算如何運作？
<a name="fleets.attribute-compute"></a>

如果您選擇 `ATTRIBUTE_BASED_COMPUTE`做為機群的 `computeType`，您可以在名為 的新欄位中指定屬性`computeConfiguration`。這些屬性包括 vCPUs、記憶體、磁碟空間和 `machineType`。這是 `machineType` `GENERAL`或 `NVME`。指定一或多個可用屬性之後，CodeBuild 會從可用的支援執行個體類型中選擇運算類型，做為最終的 `computeConfiguration`。

**注意**  
CodeBuild 將選擇符合所有輸入需求最便宜的執行個體。所選執行個體的記憶體、vCPUs和磁碟空間都會大於或等於輸入需求。您可以在建立或更新的機群`computeConfiguration`中檢查已解析的 。

如果您輸入無法在 CodeBuild 中滿足`computeConfiguration`的 ，您將會收到驗證例外狀況。另請注意，如果 `computeConfiguration` 不適用於隨需，則會覆寫隨需機群溢位行為以佇列行為。

## 我可以手動指定機群的 Amazon EC2 執行個體嗎？
<a name="fleets.manual-input-compute"></a>

是，您可以透過選取自訂執行個體或設定 API 參數 ，在主控台中直接輸入所需的 Amazon EC2 執行個體`InstanceType`。 ****此欄位用於下列 APIs：CreateFleet、UpdateFleet、CreateProject、UpdateProject 和 StartBuild。如需詳細資訊，請參閱[Compute instance type](fleets.reserved-capacity-fleets.md#compute)。

## 哪些區域支援預留容量機群？
<a name="fleets.regions"></a>

下列支援預留容量 Amazon Linux 和 Windows 機群 AWS 區域：美國東部 （維吉尼亞北部）、美國東部 （俄亥俄）、美國西部 （奧勒岡）、亞太區域 （孟買）、亞太區域 （新加坡）、亞太區域 （雪梨）、亞太區域 （東京）、歐洲 （法蘭克福）、歐洲 （愛爾蘭） 和南美洲 （聖保羅）。如需 CodeBuild 可用位置的詳細資訊 AWS 區域 ，請參閱[AWS 依區域提供服務](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)。

預留容量 macOS Medium 機群支援以下項目 AWS 區域：美國東部 （維吉尼亞北部）、美國東部 （俄亥俄）、美國西部 （奧勒岡）、亞太區域 （雪梨） 和歐洲 （法蘭克福）。預留容量 macOS 支援大型機群 AWS 區域：美國東部 （維吉尼亞北部）、美國東部 （俄亥俄）、美國西部 （奧勒岡） 和亞太區域 （雪梨）。

## 如何設定預留容量 macOS 機群？
<a name="fleets.configure-macos"></a>

**設定預留容量 macOS 機群**

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home) 開啟 AWS CodeBuild 主控台。

1. 在導覽窗格中，選擇**運算機群**，然後選擇**建立機群**。

1. 在**運算機群名稱**文字欄位中，輸入機群的名稱。

1. 從**作業系統**下拉式功能表中，選擇 **macOS**。

1. 在**運算**欄位中，選擇下列其中一種運算機器類型：**Apple M2、24 GB 記憶體、8 個 vCPUs **或 **Apple M2、32 GB 記憶體、12 個 vCPUs**。

1. 在**容量**文字欄位中，輸入機群中執行個體的最小數量。

1. （選用） 若要為您的機群使用自訂映像，請參閱 [如何為預留容量機群設定自訂 Amazon Machine Image (AMI)？](#fleets.custom-ami) 以確保您的 Amazon Machine Image (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 專案或編輯現有的專案。在**環境中**，選擇**佈建模型**下的**預留容量**，然後在**機群名稱**下選擇指定的機群。

## 如何為預留容量機群設定自訂 Amazon Machine Image (AMI)？
<a name="fleets.custom-ami"></a>

**為預留容量機群設定自訂 Amazon Machine Image (AMI)**

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home) 開啟 AWS CodeBuild 主控台。

1. 在導覽窗格中，選擇**運算機群**，然後選擇**建立機群**。

1. 在**運算機群名稱**文字欄位中，輸入機群的名稱。

1. 選擇機群的**自訂映像**，並確保您的 Amazon Machine Image (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 使用 AWS KMS 金鑰加密， AWS KMS 金鑰也必須允許 CodeBuild 服務**組織 ID**。如需組織 IDs的清單，請參閱 [Amazon Machine Images (AMI)](fleets.reserved-capacity-fleets.md#ami)。如需 AWS KMS 金鑰的詳細資訊，請參閱《*Amazon EC2 使用者指南*》中的[允許組織和 OUs 使用 KMS 金鑰](https://docs.aws.amazon.com/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)。

# 預留容量機群屬性
<a name="fleets.reserved-capacity-fleets"></a>

預留容量機群包含下列屬性。如需預留容量機群的詳細資訊，請參閱 [在預留容量機群上執行組建](fleets.md)。

**作業系統**  
作業系統。下列作業系統可供使用：  
+ Amazon Linux
+ macOS
+ Windows Server 2019
+ Windows Server 2022

**Architecture**  
處理器架構。下列架構可供使用：  
+ x86\$164
+ Arm64

**環境類型**  
選取 **Amazon Linux** 時可用的環境類型。下列環境類型可供使用：  
+ Linux EC2
+ Linux GPU

**運算執行個體類型**  
機群執行個體的運算組態。    
**引導式選取**  
選取 vCPU、記憶體和磁碟空間設定，以指定不同的運算類型。如需依區域劃分的運算類型可用性資訊，請參閱 [關於預留容量環境類型](build-env-ref-compute-types.md#environment-reserved-capacity.types)。  
**自訂執行個體**  
手動指定所需的執行個體類型。

**Capacity**  
配置給機群的機器初始數量，定義可平行執行的組建數量。

**溢位行為**  
定義組建數量超過機群容量時的行為。    
**隨需**  
溢位建置會隨需在 CodeBuild 上執行。  
如果您在建立 VPC 連線機群時選擇將溢位行為設定為隨需，請務必將所需的 VPC 許可新增至專案服務角色。如需詳細資訊，請參閱[範例政策陳述式，以允許 CodeBuild AWS 存取建立 VPC 網路介面所需的服務](auth-and-access-control-iam-identity-based-access-control.md#customer-managed-policies-example-create-vpc-network-interface)。
如果您選擇將溢位行為設定為隨需，請注意，溢位建置將分別計費，類似於隨需 Amazon EC2。如需詳細資訊，請參閱[https://aws.amazon.com/codebuild/pricing/](https://aws.amazon.com/codebuild/pricing/)。  
**佇列**  
建置執行會放置在佇列中，直到機器可用為止。這會限制額外的成本，因為沒有配置額外的機器。

**Amazon Machine Image (AMI)**  
機群的 Amazon Machine Image (AMI) 屬性。CodeBuild 支援下列屬性：      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/codebuild/latest/userguide/fleets.reserved-capacity-fleets.html)

**其他組態**    
**VPC - 選用**  
CodeBuild 機群將存取的 VPC。如需詳細資訊，請參閱[AWS CodeBuild 搭配 Amazon Virtual Private Cloud 使用](vpc-support.md)。  
如果在呼叫 StartBuild API 時指定機群覆寫，CodeBuild 會忽略專案 VPC 組態。  
**子網路**  
CodeBuild 用來設定 VPC 組態的 VPC 子網路。請注意，預留容量機群僅支援單一可用區域中的一個子網路。此外，請確定您的子網路包含 NAT 閘道。  
**安全群組**  
CodeBuild 搭配 VPC 使用的 VPC 安全群組。確保您的安全群組允許傳出連線。  
**機群服務角色**  
從您帳戶中的現有服務角色定義機群的服務角色。  
**定義代理組態 - 選用**  
將網路存取控制套用至預留容量執行個體的代理組態。如需詳細資訊，請參閱[AWS CodeBuild 搭配受管代理伺服器使用](run-codebuild-in-managed-proxy-server.md)。  
Proxy 組態不支援 VPC、Windows 或 MacOS。  
**預設行為**  
定義傳出流量的行為。    
**Allow**  
根據預設，允許傳出流量到所有目的地。  
**拒絕**  
根據預設，拒絕所有目的地的傳出流量。  
**Proxy 規則**  
指定要允許或拒絕網路存取控制的目的地網域或 IPs。

# 使用 的預留容量範例 AWS CodeBuild
<a name="reserved-capacity-samples"></a>

這些範例可用於實驗 CodeBuild 中的預留容量機群。

**Topics**
+ [

## 使用預留容量範例進行快取
](#reserved-capacity-samples.caching)

## 使用預留容量範例進行快取
<a name="reserved-capacity-samples.caching"></a>

快取可以存放組建環境的可重複使用部分，並在多個組建間使用這些部分。此範例示範如何使用預留容量在建置專案中啟用快取。如需詳細資訊，請參閱[快取建置以改善效能](build-caching.md)。

您可以先在專案設定中指定一或多個快取模式：

```
Cache:
        Type: LOCAL
        Modes:
          - LOCAL_CUSTOM_CACHE
          - LOCAL_DOCKER_LAYER_CACHE
          - LOCAL_SOURCE_CACHE
```

**注意**  
請務必啟用特權模式，才能使用 Docker layer 快取。

您的專案 buildspec 設定應如下所示：

```
version: 0.2
      phases:
        build:
          commands:
            - echo testing local source cache
            - touch /codebuild/cache/workspace/foobar.txt
            - git checkout -b cached_branch
            - echo testing local docker layer cache
            - docker run alpine:3.14 2>&1 | grep 'Pulling from' || exit 1
            - echo testing local custom cache
            - touch foo
            - mkdir bar && ln -s foo bar/foo2
            - mkdir bar/bar && touch bar/bar/foo3 && touch bar/bar/foo4
            - "[ -f foo ] || exit 1"
            - "[ -L bar/foo2 ] || exit 1"
            - "[ -f bar/bar/foo3 ] || exit 1"
            - "[ -f bar/bar/foo4 ] || exit 1"
      cache:
        paths:
           - './foo'
           - './bar/**/*'
           - './bar/bar/foo3'
```

您可以從使用新專案執行組建開始，以植入快取。完成後，您應該使用覆寫的 buildspec 啟動另一個組建，如下所示：

```
version: 0.2
      phases:
        build:
          commands:
            - echo testing local source cache
            - git branch | if grep 'cached_branch'; then (exit 0); else (exit 1); fi
            - ls /codebuild/cache/workspace | if grep 'foobar.txt'; then (exit 0); else (exit 1); fi
            - echo testing local docker layer cache
            - docker run alpine:3.14 2>&1 | if grep 'Pulling from'; then (exit 1); else (exit 0); fi
            - echo testing local custom cache
            - "[ -f foo ] || exit 1"
            - "[ -L bar/foo2 ] || exit 1"
            - "[ -f bar/bar/foo3 ] || exit 1"
            - "[ -f bar/bar/foo4 ] || exit 1"
      cache:
        paths:
           - './foo'
           - './bar/**/*'
           - './bar/bar/foo3'
```