

Amazon CodeCatalyst 不再向新客戶開放。現有客戶可以繼續正常使用該服務。如需詳細資訊，請參閱[如何從 CodeCatalyst 遷移](migration.md)。

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

# 設定運算和執行時間映像
<a name="workflows-working-compute"></a>

在 CodeCatalyst 工作流程中，您可以指定 CodeCatalyst 用來執行工作流程動作的運算和執行時間環境映像。

*運算*是指由 CodeCatalyst 管理和維護以執行工作流程動作的運算引擎 (CPU、記憶體和作業系統）。

**注意**  
如果運算定義為工作流程的屬性，則無法定義為該工作流程中任何動作的屬性。同樣地，如果運算定義為任何動作的屬性，則無法在工作流程中定義。

*執行時間環境映像*是 CodeCatalyst 在其中執行工作流程動作的 Docker 容器。Docker 容器會在您選擇的運算平台上執行，並包含工作流程動作可能需要的作業系統和額外工具，例如 AWS CLI、Node.js 和 .tar。

**Topics**
+ [運算類型](#compute.types)
+ [運算機群](#compute.fleets)
+ [隨需機群屬性](#compute.on-demand)
+ [佈建的機群屬性](#compute.provisioned-fleets)
+ [建立佈建機群](projects-create-compute-resource.md)
+ [編輯佈建的機群](edit-compute-resource.md)
+ [刪除佈建的機群](delete-compute-resource.md)
+ [將機群或運算指派給動作](workflows-assign-compute-resource.md)
+ [跨動作共用運算](compute-sharing.md)
+ [指定執行時間環境映像](build-images.md)

## 運算類型
<a name="compute.types"></a>

CodeCatalyst 提供下列運算類型：
+ Amazon EC2
+ AWS Lambda

Amazon EC2 在動作執行期間提供最佳化的彈性，Lambda 則提供最佳化的動作啟動速度。Lambda 支援更快速的工作流程動作執行，因為啟動延遲較低。Lambda 可讓您執行基本工作流程，以建置、測試和部署具有常見執行時間的無伺服器應用程式。這些執行時間包括 Node.js、Python、Java、.NET 和 Go。不過，Lambda 不支援某些使用案例，如果它們影響到您，請使用 Amazon EC2 運算類型：
+ Lambda 不支援來自指定登錄檔的執行期環境映像。
+ Lambda 不支援需要根許可的工具。對於 `yum`或 等工具`rpm`，請使用 Amazon EC2 運算類型或其他不需要根許可的工具。
+ Lambda 不支援 Docker 組建或執行。不支援下列使用 Docker 映像的動作：部署 AWS CloudFormation 堆疊、部署至 Amazon ECS、Amazon S3 發佈、 AWS CDK 引導、 AWS CDK 部署、 AWS Lambda 叫用 和 GitHub 動作。Lambda 運算也不支援在 CodeCatalyst GitHub 動作中執行的 Docker 型 GitHub 動作。您可以使用不需要根許可的替代方案，例如 Podman。
+ Lambda 不支援寫入 外部的檔案`/tmp`。設定工作流程動作時，您可以重新設定工具以安裝或寫入 `/tmp`。如果您有安裝 的建置動作`npm`，請務必將其設定為安裝到 `/tmp`。
+ Lambda 不支援超過 15 分鐘的執行時間。

## 運算機群
<a name="compute.fleets"></a>

CodeCatalyst 提供下列運算機群：
+ 隨需機群
+ 佈建的機群

透過隨需機群，當工作流程動作開始時，工作流程會佈建所需的資源。這些機器會在動作完成時銷毀。您只需支付執行動作的分鐘數。隨需機群受到完全管理，並包含自動擴展功能來處理需求激增。

CodeCatalyst 也提供佈建機群，其中包含由 CodeCatalyst 維護、採用 Amazon EC2 技術的機器。使用佈建機群，您可以設定一組專用機器來執行工作流程動作。這些機器保持閒置狀態，準備好立即處理動作。使用佈建機群時，您的機器一律在執行中，只要佈建，就會產生成本。

若要建立、更新或刪除機群，您必須擁有**空間管理員**角色或**專案管理員**角色。

## 隨需機群屬性
<a name="compute.on-demand"></a>

CodeCatalyst 提供下列隨需機群：

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/codecatalyst/latest/userguide/workflows-working-compute.html)

**注意**  
隨需機群的規格會根據您的帳單方案而有所不同。如需詳細資訊，請參閱[ 定價](https://codecatalyst.aws/explore/pricing)。

如果未選取機群，CodeCatalyst 會使用 `Linux.x86-64.Large`。

## 佈建的機群屬性
<a name="compute.provisioned-fleets"></a>

佈建的機群包含下列屬性：

**作業系統**  
作業系統。下列作業系統可供使用：  
+ Amazon Linux 2
+ Windows Server 2022
**注意**  
只有建置動作支援 Windows 機群。其他動作目前不支援 Windows。

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

**機器類型**  
每個執行個體的機器類型。下列機器類型可供使用：      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/codecatalyst/latest/userguide/workflows-working-compute.html)

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

**擴展模式**  
定義動作數量超過機群容量時的行為。    
**隨需佈建額外容量**  
其他機器會隨需設定，自動擴展以回應執行中的新動作，然後在動作完成時縮減至基本容量。這可能會產生額外的成本，因為您按分鐘為執行中的每部機器付費。  
**等待直到有額外的機群容量可用**  
動作執行會放置在佇列中，直到機器可用為止。這可限制額外的成本，因為沒有配置額外的機器。

# 建立佈建機群
<a name="projects-create-compute-resource"></a>

使用以下指示來建立佈建機群。

**注意**  
佈建的機群將在閒置 2 週後停用。如果再次使用，它們將自動重新啟用，但此重新啟用可能會導致延遲發生。

**建立佈建機群**

1. 在導覽窗格中，選擇 **CI/CD**，然後選擇**運算**。

1. 選擇**建立佈建機群**。

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

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

1. 從**機器類型**下拉式選單中，選擇機器的機器類型。

1. 在**容量**文字欄位中，輸入機群中的機器數量上限。

1. 從**擴展模式**下拉式功能表中，選擇所需的溢位行為。如需有關這些欄位的詳細資訊，請參閱 [佈建的機群屬性](workflows-working-compute.md#compute.provisioned-fleets)。

1. 選擇**建立**。

建立佈建機群之後，您就可以將其指派給 動作。如需詳細資訊，請參閱[將機群或運算指派給動作](workflows-assign-compute-resource.md)。

# 編輯佈建的機群
<a name="edit-compute-resource"></a>

使用下列指示來編輯佈建機群。

**注意**  
佈建的機群將在閒置 2 週後停用。如果再次使用，它們將自動重新啟用，但此重新啟用可能會導致延遲發生。

**編輯佈建機群**

1. 在導覽窗格中，選擇 **CI/CD**，然後選擇**運算**。

1. 在**佈建機群**清單中，選擇您要編輯的機群。

1. 選擇**編輯**。

1. 在**容量**文字欄位中，輸入機群中的機器數量上限。

1. 從**擴展模式**下拉式功能表中，選擇所需的溢位行為。如需有關這些欄位的詳細資訊，請參閱 [佈建的機群屬性](workflows-working-compute.md#compute.provisioned-fleets)。

1. 選擇**儲存**。

# 刪除佈建的機群
<a name="delete-compute-resource"></a>

使用下列指示來刪除佈建的機群。

**刪除佈建的機群**
**警告**  
刪除佈建機群之前，請先從動作的 YAML 程式碼中刪除 `Fleet` 屬性，將其從所有動作中移除。刪除佈建機群之後繼續參考的任何動作，都會在下次動作執行時失敗。

1. 在導覽窗格中，選擇 **CI/CD**，然後選擇**運算**。

1. 在**佈建機群**清單中，選擇您要刪除的機群。

1. 選擇 **刪除**。

1. 輸入 **delete** 以確認刪除。

1. 選擇**刪除**。

# 將機群或運算指派給動作
<a name="workflows-assign-compute-resource"></a>

根據預設，工作流程動作會使用`Linux.x86-64.Large`隨需機群搭配 Amazon EC2 運算類型。若要改用佈建機群，或使用不同的隨需機群，例如 `Linux.x86-64.2XLarge`，請使用下列指示。

------
#### [ Visual ]

**開始之前**
+ 如果您想要指派佈建機群，您必須先建立佈建機群。如需詳細資訊，請參閱[建立佈建機群](projects-create-compute-resource.md)。

**將佈建的機群或不同的機群類型指派給動作**

1. 在 https：//[https://codecatalyst.aws/](https://codecatalyst.aws/) 開啟 CodeCatalyst 主控台。

1. 選擇您的專案。

1. 在導覽窗格中，選擇 **CI/CD**，然後選擇**工作流程**。

1. 選擇工作流程的名稱。您可以依定義工作流程的來源儲存庫或分支名稱進行篩選，或依工作流程名稱或狀態進行篩選。

1. 選擇**編輯**。

1. 選擇**視覺化**。

1. 在工作流程圖表中，選擇您要指派佈建機群或新機群類型的動作。

1. 選擇 **Configuration** (組態) 索引標籤。

1. 在**運算機群**中，執行下列動作：

   指定將執行工作流程或工作流程動作的機器或機群。使用隨需機群時，當動作開始時，工作流程會佈建所需的資源，並在動作完成時銷毀機器。隨需機群的範例：`Linux.x86-64.Large`、`Linux.x86-64.XLarge`。如需隨需機群的詳細資訊，請參閱 [隨需機群屬性](workflows-working-compute.md#compute.on-demand)。

   使用佈建機群，您可以設定一組專用機器來執行工作流程動作。這些機器保持閒置狀態，準備好立即處理動作。如需佈建機群的詳細資訊，請參閱 [佈建的機群屬性](workflows-working-compute.md#compute.provisioned-fleets)。

   如果省略 `Fleet` ，則預設值為 `Linux.x86-64.Large`。

1. （選用） 選擇**驗證**以在遞交之前驗證工作流程的 YAML 程式碼。

1. 選擇**遞交**，輸入遞交訊息，然後再次選擇**遞交**。

------
#### [ YAML ]

**開始之前**
+ 如果您想要指派佈建機群，您必須先建立佈建機群。如需詳細資訊，請參閱[建立佈建機群](projects-create-compute-resource.md)。

**將佈建的機群或不同的機群類型指派給動作**

1. 在 https：//[https://codecatalyst.aws/](https://codecatalyst.aws/) 開啟 CodeCatalyst 主控台。

1. 選擇您的專案。

1. 在導覽窗格中，選擇 **CI/CD**，然後選擇**工作流程**。

1. 選擇工作流程的名稱。您可以依定義工作流程的來源儲存庫或分支名稱進行篩選，或依工作流程名稱或狀態進行篩選。

1. 選擇**編輯**。

1. 選擇 **YAML**。

1. 尋找您要指派佈建機群或新機群類型的動作。

1. 在 動作中，新增 `Compute` 屬性，並將 `Fleet` 設定為機群名稱或隨需機群類型。如需詳細資訊，請參閱 中 動作`Fleet`屬性[建置和測試動作 YAML](build-action-ref.md)的描述。

1. （選用） 選擇**驗證**以在遞交之前驗證工作流程的 YAML 程式碼。

1. 選擇**遞交**，輸入遞交訊息，然後再次選擇**遞交**。

------

# 跨動作共用運算
<a name="compute-sharing"></a>

根據預設，工作流程中的動作會在[機群](workflows-working-compute.md#compute.fleets)中的不同執行個體上執行。此行為為動作提供輸入狀態的隔離和可預測性。預設行為需要明確組態，才能在動作之間共用內容，例如檔案和變數。

運算共用是一項功能，可讓您在相同執行個體上執行工作流程中的所有動作。使用運算共用可以提供更快的工作流程執行時間，因為佈建執行個體所花費的時間較少。您也可以在動作之間共用檔案 （成品），而無需額外的工作流程組態。

使用運算共用執行工作流程時，預設或指定機群中的執行個體會保留在該工作流程中所有動作的期間。當工作流程執行完成時，會釋出執行個體保留。

**Topics**
+ [在共用運算上執行多個動作](#how-to-compute-share)
+ [運算共用的考量](#compare-compute-sharing)
+ [開啟運算共用](#compute-sharing-steps)
+ [範例](#compute-sharing-examples)

## 在共用運算上執行多個動作
<a name="how-to-compute-share"></a>

您可以在工作流程層級使用定義 YAML 中的 `Compute` 屬性，指定 動作的機群和運算共用屬性。您也可以使用 CodeCatalyst 中的視覺化編輯器來設定運算屬性。若要指定機群，請設定現有機群的名稱、將運算類型設定為 **EC2**，然後開啟運算共用。

**注意**  
運算共用只有在運算類型設定為 **EC2** 且 Windows Server 2022 作業系統不支援時才支援。如需運算機群、運算類型和屬性的詳細資訊，請參閱 [設定運算和執行時間映像](workflows-working-compute.md)。

**注意**  
如果您位於免費方案，而且在工作流程定義 YAML 中手動指定 `Linux.x86-64.XLarge`或 機`Linux.x86-64.2XLarge`群，則動作仍會在預設機群 () 上執行`Linux.x86-64.Large`。如需運算可用性和定價的詳細資訊，請參閱 [方案選項的表格](https://codecatalyst.aws/explore/pricing)。

開啟運算共用時，包含工作流程來源的資料夾會自動跨動作複製。您不需要設定輸出成品，並在整個工作流程定義 (YAML 檔案） 中將其參考為輸入成品。身為工作流程作者，您需要使用輸入和輸出來連接環境變數，就像不使用運算共用一樣。如果您想要在工作流程來源以外的動作之間共用資料夾，請考慮檔案快取。如需詳細資訊，請參閱 [在動作之間共用成品和檔案](workflows-working-artifacts.md) 和 [在工作流程執行之間快取檔案](workflows-caching.md)。

工作流程定義檔案所在的來源儲存庫由標籤 識別`WorkflowSource`。使用運算共用時，工作流程來源會下載在參考的第一個動作中，並自動供工作流程執行中的後續動作使用。透過新增、修改或移除檔案等動作對包含工作流程來源的資料夾所做的任何變更，也會在工作流程的後續動作中顯示。您可以在任何工作流程動作中參考位於工作流程來源資料夾中的檔案，就像不使用運算共用一樣。如需詳細資訊，請參閱[參考來源儲存庫檔案](workflows-sources-reference-files.md)。

**注意**  
運算共用工作流程需要指定嚴格的動作序列，因此無法設定平行動作。雖然可以在序列中的任何動作設定輸出成品，但不支援輸入成品。

## 運算共用的考量
<a name="compare-compute-sharing"></a>

您可以使用運算共用來執行工作流程，以加速工作流程執行，並在使用相同執行個體的工作流程中共用動作之間的內容。請考慮下列事項，以判斷使用運算共用是否適合您的案例：


|   | 運算共用 | 不使用運算共用 | 
| --- | --- | --- | 
|  運算類型  |  Amazon EC2  |  Amazon EC2、AWS Lambda  | 
|  執行個體佈建  |  在相同執行個體上執行的動作  |  在個別執行個體上執行的動作  | 
|  作業系統  |  Amazon Linux 2  |  Amazon Linux 2、Windows Server 2022 （僅限建置動作）  | 
|  參考檔案  |  `$CATALYST_SOURCE_DIR_WorkflowSource`, `/sources/WorkflowSource/`  |  `$CATALYST_SOURCE_DIR_WorkflowSource`, `/sources/WorkflowSource/`  | 
|  Workflow 結構  |  動作只能循序執行  |  動作可以平行執行  | 
|  跨工作流程動作存取資料  |  存取快取工作流程來源 (`WorkflowSource`)  |  存取共用成品的輸出 （需要額外組態）  | 

## 開啟運算共用
<a name="compute-sharing-steps"></a>

使用下列指示來開啟工作流程的運算共用。

------
#### [ Visual ]

**使用視覺化編輯器開啟運算共用**

1. 開啟 CodeCatalyst 主控台，網址為 https：//[https://codecatalyst.aws/](https://codecatalyst.aws/)。

1. 選擇您的專案。

1. 在導覽窗格中，選擇 **CI/CD**，然後選擇**工作流程**。

1. 選擇工作流程的名稱。

1. 選擇**編輯**。

1. 選擇**視覺化**。

1. 選擇**工作流程屬性**。

1. 從**運算類型**下拉式選單中，選擇 **EC2**。

1. （選用） 從**運算機群 - 選用**下拉式功能表中，選擇您要用來執行工作流程動作的機群。您可以選擇隨需機群，或建立和選擇佈建機群。如需詳細資訊，請參閱 [建立佈建機群](projects-create-compute-resource.md) 和 [將機群或運算指派給動作](workflows-assign-compute-resource.md) 

1. 切換切換以開啟運算共用，並在相同機群上執行工作流程中的動作。

1. （選用） 選擇工作流程的執行模式。如需詳細資訊，請參閱[設定執行的佇列行為](workflows-configure-runs.md)。

1. 選擇**遞交**，輸入遞交訊息，然後再次選擇**遞交**。

------
#### [ YAML ]

**使用 YAML 編輯器開啟運算共用**

1. 開啟 CodeCatalyst 主控台，網址為 https：//[https://codecatalyst.aws/](https://codecatalyst.aws/)。

1. 選擇您的專案。

1. 在導覽窗格中，選擇 **CI/CD**，然後選擇**工作流程**。

1. 選擇工作流程的名稱。

1. 選擇**編輯**。

1. 選擇 **YAML**。

1. 開啟運算共用，將 `SharedInstance` 欄位設定為 `TRUE`，並將 欄位`Type`設定為 `EC2`。將 `Fleet`設定為您想要用來執行工作流程動作的運算機群。您可以選擇隨需機群，或建立和選擇佈建機群。如需詳細資訊，請參閱 [建立佈建機群](projects-create-compute-resource.md) 和 [將機群或運算指派給動作](workflows-assign-compute-resource.md)

   在工作流程 YAML 中，新增類似下列的程式碼：

   ```
     Name: MyWorkflow
     SchemaVersion: "1.0"
     Compute: # Define compute configuration.
       Type: EC2
       Fleet: MyFleet # Optionally, choose an on-demand or provisioned fleet.
       SharedInstance: true # Turn on compute sharing. Default is False.
     Actions:
       BuildFirst:
         Identifier: aws/build@v1
         Inputs:
           Sources:
             - WorkflowSource
         Configuration:
           Steps:
             - Run: ...
             ...
   ```

1. （選用） 選擇**驗證**以在遞交之前驗證工作流程的 YAML 程式碼。

1. 選擇**遞交**，輸入遞交訊息，然後再次選擇**遞交**。

------

## 範例
<a name="compute-sharing-examples"></a>

**Topics**
+ [範例：Amazon S3 Publish](#compute-share-s3)

### 範例：Amazon S3 Publish
<a name="compute-share-s3"></a>

下列工作流程範例示範如何以兩種方式執行 Amazon S3 Publish 動作：先使用輸入成品，再使用運算共用。使用運算共用時，不需要輸入成品，因為您可以存取快取的 `WorkflowSource`。此外，不再需要建置動作中的輸出成品。S3 Publish 動作設定為使用明確`DependsOn`屬性來維護循序動作；建置動作必須成功執行，S3 Publish 動作才能執行。
+ 如果沒有運算共用，您需要使用輸入成品，並與後續動作共用輸出：

  ```
  Name: S3PublishUsingInputArtifact
  SchemaVersion: "1.0"
  Actions:
    Build:
      Identifier: aws/build@v1
      Outputs:
        Artifacts:
          - Name: ArtifactToPublish
            Files: [output.zip]
      Inputs:
        Sources:
          - WorkflowSource
      Configuration:
        Steps:
          - Run: ./build.sh # Build script that generates output.zip
    PublishToS3:
      Identifier: aws/s3-publish@v1
      Inputs:
        Artifacts:
        - ArtifactToPublish
      Environment:
        Connections:
          - Role: codecatalyst-deployment-role
            Name: dev-deployment-role
        Name: dev-connection
      Configuration:
        SourcePath: output.zip
        DestinationBucketName: amzn-s3-demo-bucket
  ```
+ 將 `SharedInstance`設定為 以使用運算共用時`TRUE`，您可以在相同執行個體上執行多個動作，並透過指定單一工作流程來源來共用成品。輸入成品並非必要項目，也無法指定：

  ```
  Name: S3PublishUsingComputeSharing
  SchemaVersion: "1.0"
  Compute: 
    Type: EC2
    Fleet: dev-fleet
    SharedInstance: TRUE
  Actions:
    Build:
      Identifier: aws/build@v1
      Inputs:
        Sources:
          - WorkflowSource
      Configuration:
        Steps:
          - Run: ./build.sh # Build script that generates output.zip
    PublishToS3:
      Identifier: aws/s3-publish@v1
      DependsOn: 
        - Build
      Environment:
        Connections:
          - Role: codecatalyst-deployment-role
            Name: dev-deployment-role
        Name: dev-connection
      Configuration:
        SourcePath: output.zip
        DestinationBucketName: amzn-s3-demo-bucket
  ```

# 指定執行時間環境映像
<a name="build-images"></a>

*執行時間環境映像*是 CodeCatalyst 在其中執行工作流程動作的 Docker 容器。Docker 容器會在您選擇的運算平台上執行，並包含工作流程動作可能需要的作業系統和額外工具，例如 AWS CLI、Node.js 和 .tar。

根據預設，工作流程動作會在 CodeCatalyst 提供和維護的其中一個[作用中映像](#build-curated-images)上執行。只有建置和測試動作支援自訂映像。如需詳細資訊，請參閱[將自訂執行期環境 Docker 映像指派給 動作](#build-images-specify)。

**Topics**
+ [作用中映像](#build-curated-images)
+ [如果作用中映像不包含我需要的工具，該怎麼辦？](#build-images-more-tools)
+ [將自訂執行期環境 Docker 映像指派給 動作](#build-images-specify)
+ [範例](#workflows-working-custom-image-ex)

## 作用中映像
<a name="build-curated-images"></a>

*作用中映像*是 CodeCatalyst 完全支援的執行期環境映像，並包含預先安裝的工具。目前有兩組作用中映像：一組在 2024 年 3 月發行，另一組在 2022 年 11 月發行。

動作是否使用 2024 年 3 月或 2022 年 11 月映像取決於動作：
+ 在 2024 年 3 月 26 日或之後新增至工作流程的建置和測試動作，將在其 YAML 定義中包含明確指定 [2024 年 3 月映像](#build.default-image)的`Container`區段。您可以選擇性地移除 `Container`區段，以還原至 [2022 年 11 月的映像](#build.previous-image)。
+ 在 2024 年 3 月 26 日之前新增至工作流程的建置和測試動作，*將不會*在其 YAML 定義中包含 `Container`區段，因此將使用 [2022 年 11 月的映像](#build.previous-image)。您可以保留 2022 年 11 月的映像，也可以進行升級。若要升級映像，請在視覺化編輯器中開啟動作，選擇**組態**索引標籤，然後從**執行期環境Docker 映像下拉式清單中選取 2024 年 3 月映像**。此選擇會將`Container`區段新增至動作的 YAML 定義，該定義會填入適當的 2024 年 3 月映像。
+ 所有其他動作將使用 [2022 年 11 月的映像](#build.previous-image)或 [2024 年 3 月的映像](#build.default-image)。如需詳細資訊，請參閱 動作的文件。

**Topics**
+ [2024 年 3 月影像](#build.default-image)
+ [2022 年 11 月影像](#build.previous-image)

### 2024 年 3 月影像
<a name="build.default-image"></a>

2024 年 3 月的映像是 CodeCatalyst 提供的最新映像。每個運算類型/機群組合都有一個 2024 年 3 月的映像。

下表顯示每個 2024 年 3 月映像上安裝的工具。


**2024 年 3 月映像工具**  

| 工具 | CodeCatalyst Amazon EC2 for Linux x86\$164 - `CodeCatalystLinux_x86_64:2024_03` | CodeCatalyst Lambda for Linux x86\$164 - `CodeCatalystLinuxLambda_x86_64:2024_03` | CodeCatalyst Amazon EC2 for Linux Arm64 - `CodeCatalystLinux_Arm64:2024_03` | 適用於 Linux Arm64 的 CodeCatalyst Lambda - `CodeCatalystLinuxLambda_Arm64:2024_03` | 
| --- | --- | --- | --- | --- | 
| AWS CLI | 2.15.17 | 2.15.17 | 2.15.17 | 2.15.17 | 
| AWS Copilot CLI | 1.32.1 | 1.32.1 | 1.32.1 | 1.32.1 | 
| Docker | 24.0.9 | N/A | 24.0.9 | N/A | 
| Docker Compose | 2.23.3 | N/A | 2.23.3 | N/A | 
| Git | 2.43.0 | 2.43.0 | 2.43.0 | 2.43.0 | 
| Go | 1.21.5 | 1.21.5 | 1.21.5 | 1.21.5 | 
| Gradle | 8.5 | 8.5 | 8.5 | 8.5 | 
| Java | Corretto17 | Corretto17 | Corretto17 | Corretto17 | 
| Maven | 3.9.6 | 3.9.6 | 3.9.6 | 3.9.6 | 
| Node.js | 18.19.0 | 18.19.0 | 18.19.0 | 18.19.0 | 
| npm | 10.2.3 | 10.2.3 | 10.2.3 | 10.2.3 | 
| Python | 3.9.18 | 3.9.18 | 3.9.18 | 3.9.18 | 
| Python3 | 3.11.6 | 3.11.6 | 3.11.6 | 3.11.6 | 
| pip | 22.3.1 | 22.3.1 | 22.3.1 | 22.3.1 | 
| .NET | 8.0.100 | 8.0.100 | 8.0.100 | 8.0.100 | 

### 2022 年 11 月影像
<a name="build.previous-image"></a>

每個運算類型/機群組合都有一個 2022 年 11 月的映像。如果您已設定[佈建機群](workflows-working-compute.md#compute.fleets)，建置動作也會提供 2022 年 11 月 Windows 映像。

下表顯示每個 2022 年 11 月映像上安裝的工具。


**2022 年 11 月映像工具**  

| 工具 | CodeCatalyst Amazon EC2 for Linux x86\$164 - `CodeCatalystLinux_x86_64:2022_11` | 適用於 Linux x86\$164 的 CodeCatalyst Lambda - `CodeCatalystLinuxLambda_x86_64:2022_11` | CodeCatalyst Amazon EC2 for Linux Arm64 - `CodeCatalystLinux_Arm64:2022_11` | 適用於 Linux Arm64 的 CodeCatalyst Lambda - `CodeCatalystLinuxLambda_Arm64:2022_11` | CodeCatalyst Amazon EC2 for Windows x86\$164 - `CodeCatalystWindows_x86_64:2022_11` | 
| --- | --- | --- | --- | --- | --- | 
| AWS CLI | 2.15.17 | 2.15.17 | 2.15.17 | 2.15.17 | 2.13.19 | 
| AWS Copilot CLI | 0.6.0 | 0.6.0 | N/A | N/A | 1.30.1 | 
| Docker | 23.01 | N/A | 23.0.1 | N/A | N/A | 
| Docker Compose | 2.16.0 | N/A | 2.16.0 | N/A | N/A | 
| Git | 2.40.0 | 2.40.0 | 2.39.2 | 2.39.2 | 2.42.0 | 
| Go | 1.20.2 | 1.20.2 | 1.20.1 | 1.20.1 | 1.19 | 
| Gradle | 8.0.2 | 8.0.2 | 8.0.1 | 8.0.1 | 8.3 | 
| Java | Corretto17 | Corretto17 | Corretto17 | Corretto17 | Corretto17 | 
| Maven | 3.9.4 | 3.9.4 | 3.9.0 | 3.9.0 | 3.9.4 | 
| Node.js | 16.20.2 | 16.20.2 | 16.19.1 | 16.14.2 | 16.20.0 | 
| npm | 8.19.4 | 8.19.4 | 8.19.3 | 8.5.0 | 8.19.4 | 
| Python | 3.9.15 | 2.7.18 | 3.11.2 | 2.7.18 | 3.9.13 | 
| Python3 | N/A | 3.9.15 | N/A | 3.11.2 | N/A | 
| pip | 22.2.2 | 22.2.2 | 23.0.1 | 23.0.1 | 22.0.4 | 
| .NET | 6.0.407 | 6.0.407 | 6.0.406 | 6.0.406 | 6.0.414 | 

## 如果作用中映像不包含我需要的工具，該怎麼辦？
<a name="build-images-more-tools"></a>

如果 CodeCatalyst 提供的任何[作用中映像](#build-curated-images)都未包含您需要的工具，您有幾個選項：
+ 您可以提供包含必要工具的自訂執行期環境 Docker 映像。如需詳細資訊，請參閱[將自訂執行期環境 Docker 映像指派給 動作](#build-images-specify)。
**注意**  
 如果您想要提供自訂執行期環境 Docker 映像，請確定您的自訂映像中已安裝 Git。
+ 您可以讓工作流程的建置或測試動作安裝所需的工具。

  例如，您可以在組建或測試動作 YAML 程式碼的 `Steps`區段中包含下列指示：

  ```
  Configuration:
    Steps:
      - Run: ./setup-script
  ```

  *setup-script* 指令接著會執行下列指令碼來安裝 Node 套件管理員 (npm)：

  ```
  #!/usr/bin/env bash
  echo "Setting up environment"
  
  touch ~/.bashrc
  curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash
  source ~/.bashrc 
  nvm install v16.1.0
  source ~/.bashrc
  ```

  如需建置動作 YAML 的詳細資訊，請參閱 [建置和測試動作 YAML](build-action-ref.md)。

## 將自訂執行期環境 Docker 映像指派給 動作
<a name="build-images-specify"></a>

如果您不想使用 CodeCatalyst 提供的[作用中映像](#build-curated-images)，您可以提供自訂執行期環境 Docker 映像。如果您想要提供自訂映像，請確定其中已安裝 Git。映像可以位於 Docker Hub、Amazon Elastic Container Registry 或任何公有儲存庫中。

若要了解如何建立自訂 Docker 映像，請參閱 Docker 文件中的[容器化應用程式](https://docs.docker.com/get-started/02_our_app/)。

使用下列指示將自訂執行期環境 Docker 映像指派給 動作。指定映像之後，CodeCatalyst 會在動作開始時將其部署到您的運算平台。

**注意**  
下列動作不支援自訂執行期環境 Docker 映像：**部署 CloudFormation 堆疊**、**部署至 ECS** 和 **GitHub 動作**。自訂執行期環境 Docker 映像也不支援 **Lambda** 運算類型。

------
#### [ Visual ]

**使用視覺化編輯器指派自訂執行期環境 Docker 映像**

1. 在 https：//[https://codecatalyst.aws/](https://codecatalyst.aws/) 開啟 CodeCatalyst 主控台。

1. 在導覽窗格中，選擇 **CI/CD**，然後選擇**工作流程**。

1. 選擇工作流程的名稱。您可以依定義工作流程的來源儲存庫或分支名稱進行篩選，或依工作流程名稱或狀態進行篩選。

1. 選擇**編輯**。

1. 選擇**視覺化**。

1. 在工作流程圖表中，選擇將使用您的自訂執行期環境 Docker 映像的動作。

1. 選擇 **Configuration** (組態) 索引標籤。

1. 在底部附近，填寫下列欄位。

   **執行期環境 Docker 映像 - 選用**

   指定儲存映像的登錄檔。有效值包含：
   + `CODECATALYST` (YAML 編輯器）

     映像會存放在 CodeCatalyst 登錄檔中。
   + **Docker Hub** （視覺化編輯器） 或 `DockerHub`(YAML 編輯器）

     映像會存放在 Docker Hub 映像登錄檔中。
   + **其他登錄**檔 （視覺化編輯器） 或 `Other`(YAML 編輯器）

     映像會存放在自訂映像登錄檔中。您可以使用任何公開可用的登錄檔。
   + **Amazon Elastic Container Registry** （視覺化編輯器） 或 `ECR`(YAML 編輯器）

     映像會存放在 Amazon Elastic Container Registry 映像儲存庫中。若要在 Amazon ECR 儲存庫中使用映像，此動作需要存取 Amazon ECR。若要啟用此存取權，您必須建立包含下列許可和自訂信任政策的 [IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)。（如果需要，您可以修改現有角色以包含許可和政策。)

     IAM 角色必須在其角色政策中包含下列許可：
     + `ecr:BatchCheckLayerAvailability`
     + `ecr:BatchGetImage`
     + `ecr:GetAuthorizationToken`
     + `ecr:GetDownloadUrlForLayer`

     IAM 角色必須包含下列自訂信任政策：

     如需建立 IAM 角色的詳細資訊，請參閱《*IAM 使用者指南*》中的[使用自訂信任政策 （主控台） 建立角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-custom.html)。

     建立角色之後，您必須透過 環境將其指派給 動作。如需詳細資訊，請參閱[將環境與 動作建立關聯](deploy-environments-add-app-to-environment.md)。

   **ECR 映像 URL**、**Docker Hub 映像**或**映像 URL**

   請指定下列其中一項：
   + 如果您使用的是`CODECATALYST`登錄檔，請將映像設定為下列其中一個[作用中映像](#build-curated-images)：
     + `CodeCatalystLinux_x86_64:2024_03`
     + `CodeCatalystLinux_x86_64:2022_11`
     + `CodeCatalystLinux_Arm64:2024_03`
     + `CodeCatalystLinux_Arm64:2022_11`
     + `CodeCatalystLinuxLambda_x86_64:2024_03`
     + `CodeCatalystLinuxLambda_x86_64:2022_11`
     + `CodeCatalystLinuxLambda_Arm64:2024_03`
     + `CodeCatalystLinuxLambda_Arm64:2022_11`
     + `CodeCatalystWindows_x86_64:2022_11`
   + 如果您使用的是 Docker Hub 登錄檔，請將映像設定為 Docker Hub 映像名稱和選用標籤。

     範例：`postgres:latest`
   + 如果您使用的是 Amazon ECR 登錄檔，請將映像設定為 Amazon ECR 登錄檔 URI。

     範例：`111122223333.dkr.ecr.us-west-2.amazonaws.com/codecatalyst-ecs-image-repo`
   + 如果您使用的是自訂登錄檔，請將映像設定為自訂登錄檔預期的值。

1. （選用） 選擇**驗證**以在遞交之前驗證工作流程的 YAML 程式碼。

1. 選擇**遞交**，輸入遞交訊息，然後再次選擇**遞交**。

------
#### [ YAML ]

**使用 YAML 編輯器指派自訂執行期環境 Docker 映像**

1. 在導覽窗格中，選擇 **CI/CD**，然後選擇**工作流程**。

1. 選擇工作流程的名稱。您可以依定義工作流程的來源儲存庫或分支名稱進行篩選，或依工作流程名稱或狀態進行篩選。

1. 選擇**編輯**。

1. 選擇 **YAML**。

1. 尋找您要指派執行時間環境 Docker 映像的動作。

1. 在 動作中，新增`Container`區段和基礎 `Registry`和 `Image` 屬性。如需詳細資訊，請參閱 中 [動作](workflow-reference.md#actions-reference) 動作的 `Container``Registry`和 `Image` 屬性說明。

1. （選用） 選擇**驗證**以在遞交之前驗證工作流程的 YAML 程式碼。

1. 選擇**遞交**，輸入遞交訊息，然後再次選擇**遞交**。

------

## 範例
<a name="workflows-working-custom-image-ex"></a>

下列範例示範如何將自訂執行期環境 Docker 映像指派給工作流程定義檔案中的動作。

**Topics**
+ [範例：使用自訂執行期環境 Docker 映像新增對 Node.js 18 與 Amazon ECR 的支援](#workflows-working-custom-image-ex-ecr-node18)
+ [範例：使用自訂執行期環境 Docker 映像新增對 Node.js 18 與 Docker Hub 的支援](#workflows-working-custom-image-ex-docker-node18)

### 範例：使用自訂執行期環境 Docker 映像新增對 Node.js 18 與 Amazon ECR 的支援
<a name="workflows-working-custom-image-ex-ecr-node18"></a>

下列範例顯示如何使用自訂執行期環境 Docker 映像來新增對 Node.js 18 搭配 [Amazon ECR](https://gallery.ecr.aws/amazonlinux/amazonlinux) 的支援。

```
Configuration:
  Container:
    Registry: ECR
    Image: public.ecr.aws/amazonlinux/amazonlinux:2023
```

### 範例：使用自訂執行期環境 Docker 映像新增對 Node.js 18 與 Docker Hub 的支援
<a name="workflows-working-custom-image-ex-docker-node18"></a>

下列範例顯示如何使用自訂執行期環境 Docker 映像來新增對 Node.js 18 與 [Docker Hub](https://hub.docker.com/_/node) 的支援。

```
Configuration:
  Container:
    Registry: DockerHub
    Image: node:18.18.2
```