

亚马逊 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/`  | 
|  工作流结构  |  操作只能按顺序运行  |  操作可以并行运行  | 
|  跨工作流操作访问数据  |  访问缓存的工作流来源（`WorkflowSource`）  |  访问共享构件的输出（需要额外配置）  | 

## 启用计算共享
<a name="compute-sharing-steps"></a>

请按照以下说明，为工作流启用计算共享。

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

**使用可视化编辑器启用计算共享**

1. 通过访问 [https://codecatalyst.aws/](https://codecatalyst.aws/) 打开 CodeCatalyst 控制台。

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. 通过访问 [https://codecatalyst.aws/](https://codecatalyst.aws/) 打开 CodeCatalyst 控制台。

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 发布](#compute-share-s3)

### 示例：Amazon S3 发布
<a name="compute-share-s3"></a>

以下工作流示例说明了如何通过两种方式执行 Amazon S3 发布操作：首先使用输入构件，然后使用计算共享。使用计算共享时，不需要输入构件，因为您可以访问缓存的 `WorkflowSource`。此外，不再需要“构建”操作中的输出构件。S3 发布操作配置为使用显式 `DependsOn` 属性来保持连续操作；“构建”操作必须成功运行才能运行 S3 发布操作。
+ 如果未使用计算共享，则需要使用输入构件并将输出与后续操作共享：

  ```
  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
  ```