

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

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

# 指定執行時間環境映像
<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
```