跨操作共享计算
默认情况下,工作流中的操作在实例集中的不同实例上运行。这种行为为操作提供了隔离性以及输入状态的可预测性。默认行为需要明确配置,以便在操作之间共享上下文,例如文件和变量。
计算共享是一种功能,让您能够在同一个实例上运行工作流中的所有操作。使用计算共享可以缩短工作流运行时间,因为预置实例所花费的时间更少。您也可以在操作之间共享文件(构件),而无需执行额外的工作流配置。
使用计算共享运行工作流时,默认实例集或指定实例集中的实例将在该工作流中的所有操作持续时间内予以预留。工作流运行完成后,就会释放实例预留。
在共享计算上运行多个操作
您可以在工作流级别,使用定义 YAML 中的 Compute
属性来指定操作的实例集和计算共享属性。您还可以使用 CodeCatalyst 中的可视化编辑器配置计算属性。要指定实例集,请设置现有实例集的名称,将计算类型设置为 EC2,然后启用计算共享。
注意
只有当计算类型设置为 EC2 时,才支持计算共享,并且 Windows Server 2022 操作系统不支持计算共享。有关计算实例集、计算类型和属性的更多信息,请参阅配置计算和运行时映像。
注意
如果您使用的是免费套餐,并且在工作流定义 YAML 中手动指定 Linux.x86-64.XLarge
或 Linux.x86-64.2XLarge
实例集,则该操作仍将在默认实例集(Linux.x86-64.Large
)上运行。有关计算可用性和定价的更多信息,请参阅套餐选项表
在启用计算共享后,将自动跨操作复制包含工作流源的文件夹。您不需要配置输出构件,也无需在整个工作流定义(YAML 文件)中将它们作为输入工件引用。作为工作流的作者,您需要使用输入和输出连接环境变量,与未使用计算共享时一样。如果要在工作流源之外的操作之间共享文件夹,请考虑使用文件缓存。有关更多信息,请参阅在操作之间共享构件和文件和在工作流运行之间缓存文件。
您的工作流定义文件所在的源存储库由标签 WorkflowSource
来标识。使用计算共享时,将在引用该工作流源的第一个操作中下载工作流源,并自动提供给工作流运行中的后续操作使用。如果某个操作(例如添加、修改或删除文件)对包含工作流源的文件夹执行任何更改,这些更改也将在工作流的后续操作中可见。您可以在任何工作流操作中引用工作流源文件夹中的文件,与未使用计算共享时一样。有关更多信息,请参阅 引用源存储库文件。
注意
计算共享工作流需要指定严格的操作顺序,因此无法设置并行操作。虽然可以在序列中的任何操作中配置输出构件,但不支持输入构件。
计算共享注意事项
您可以利用计算共享功能运行工作流,以便加快工作流运行,并且可以在使用相同实例的工作流中的操作之间共享上下文。要确定使用计算共享是否适合您的场景,请考虑以下因素:
计算共享 | 不使用计算共享 | |
---|---|---|
计算类型 |
Amazon EC2 |
Amazon EC2、AWS Lambda |
实例预置 |
操作在同一实例上运行 |
操作在单独的实例上运行 |
操作系统 |
Amazon Linux 2 |
Amazon Linux 2、Windows Server 2022(仅限构建操作) |
引用文件 |
|
|
工作流结构 |
操作只能按顺序运行 |
操作可以并行运行 |
跨工作流操作访问数据 |
访问缓存的工作流来源( |
访问共享构件的输出(需要额外配置) |
启用计算共享
请按照以下说明,为工作流启用计算共享。
示例
示例:Amazon S3 发布
以下工作流示例说明了如何通过两种方式执行 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