

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

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

# 跨動作共用運算
<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
  ```