View a markdown version of this page

创建私有工作流程 - AWS HealthOmics

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

创建私有工作流程

使用 HealthOmics 控制台、 AWS CLI 命令或其中一个创建工作流程 AWS SDKs。

注意

请勿在工作流程名称中包含任何个人身份信息 (PII)。这些名称在 CloudWatch 日志中可见。

创建工作流程时,会为该工作流程 HealthOmics 分配一个通用唯一标识符 (UUID)。工作流程 UUID 是一个全局唯一标识符 (guid),在工作流程和工作流程版本中都是唯一的。出于数据来源的目的,我们建议您使用工作流程 UUID 来唯一标识工作流程。

如果您的工作流程任务使用任何外部工具(可执行文件、库或脚本),则可以将这些工具构建到容器映像中。您可以通过以下选项来托管容器镜像:

  • 将容器镜像托管在 ECR 私有注册表中。此选项的先决条件:

    • 创建 ECR 私有存储库,或选择现有存储库。

    • 按中所述配置 ECR 资源策略。Amazon ECR 权限

    • 将您的容器镜像上传到私有存储库。

  • 将容器镜像与支持的第三方注册表的内容同步。此选项的先决条件:

    • 在 ECR 私有注册表中,为每个上游注册表配置一条直通缓存规则。有关更多信息,请参阅 镜像映射。

    • 按中所述配置 ECR 资源策略。Amazon ECR 权限

    • 创建存储库创建模板。该模板定义了 Amazon ECR 何时为上游注册表创建私有存储库的设置。

    • 创建前缀映射以将工作流程定义中的容器映像引用重新映射到 ECR 缓存命名空间。

创建工作流程时,您需要提供一个包含有关工作流、运行和任务的信息的工作流定义。 HealthOmics 可以将工作流程定义检索为存储在本地或 Amazon S3 存储桶中的.zip 档案,或者从支持的基于 Git 的存储库中检索。

使用控制台创建工作流程

创建工作流程的步骤
  1. 打开 HealthOmics 控制台。

  2. 如果需要,请打开左侧导航窗格 (►)。选择 “私有工作流程”。

  3. 在私有工作流程页面上,选择创建工作流程。

  4. 在 “定义工作流程” 页面上,提供以下信息:

    1. 工作流程名称:此工作流程的独特名称。我们建议您设置工作流程名称,以便在 AWS HealthOmics 控制台和 CloudWatch 日志中整理运行情况。

    2. 描述(可选):此工作流程的描述。

  5. 在 “工作流定义” 面板中,提供以下信息:

    1. 工作流语言(可选):选择工作流程的规范语言。否则, HealthOmics 根据工作流程定义确定语言。

    2. 对于工作流定义源,请选择从基于 Git 的存储库、Amazon S3 位置或本地驱动器导入定义文件夹。

      1. 对于从存储库服务导入:

        注意

        HealthOmics 支持、、GitHub、GitLabBitbucket、GitHub self-managed的公有和私有存储库GitLab self-managed。

        1. 选择一个连接,将您的 AWS 资源连接到外部存储库。要创建连接,请参阅连接外部代码存储库。

          注意

          该TLV地区的客户需要在 IAD (us-east-1) 区域创建连接才能创建工作流程。

        2. 在完整存储库 ID 中,输入您的存储库 ID 作为用户名/存储库名称。确认您有权访问此存储库中的文件。

        3. 在源引用(可选)中,输入存储库源引用(分支、标签或提交 ID)。 HealthOmics 如果未指定源引用,则使用默认分支。

        4. 在排除文件模式中,输入文件模式以排除特定的文件夹、文件或扩展名。这有助于在导入存储库文件时管理数据大小。最多有 50 个模式,并且模式必须遵循全局模式语法。例如:

          1. tests/

          2. *.jpeg

          3. large_data.zip

      2. 对于从 S3 中选择定义文件夹:

        1. 输入包含压缩工作流程定义文件夹的 Amazon S3 位置。Amazon S3 存储桶必须与工作流程位于同一区域。

        2. 如果您的账户不拥有 Amazon S3 存储桶,请在 S3 存储桶拥有者的 AWS 账户 ID 中输入存储桶拥有者的账户 ID。为了验证存储桶所有权 HealthOmics ,必须提供此信息。

      3. 对于从本地来源选择定义文件夹:

        1. 输入压缩的工作流程定义文件夹的本地驱动器位置。

    3. 工作流定义文件主路径(可选):输入从压缩的工作流定义文件夹或存储库到该main文件的文件路径。如果工作流定义文件夹中只有一个文件,或者主文件名为 “main”,则不需要此参数。

  6. 在自述文件(可选)面板中,选择自述文件来源并提供以下信息:

    • 对于从存储库服务导入,在自述文件路径中,输入存储库中自述文件的路径。

    • 对于从 S3 中选择文件,在 S3 的自述文件中,输入自述文件的 Amazon S3 URI。

    • 对于 “从本地来源选择文件:在自述文件-可选” 中,选择 “选择文件” 以选择要上传的 markdown (.md) 文件。

  7. 在默认运行存储配置面板中,为使用此工作流程的运行提供默认的运行存储类型和容量:

    1. 运行存储类型:选择使用静态存储还是动态存储作为临时运行存储的默认值。默认为静态存储。

    2. 运行存储容量(可选):对于静态运行存储类型,您可以输入此工作流程所需的默认运行存储量。此参数的默认值为 1200 GiB。当你开始运行时,你可以覆盖这些默认值。

  8. 标签(可选):您最多可以将 50 个标签与该工作流程相关联。

  9. 选择下一步。

  10. 在添加工作流程参数(可选)页面上,选择参数来源:

    1. 对于从工作流定义文件解析, HealthOmics 将自动解析工作流定义文件中的工作流参数。

    2. 对于从 Git 存储库提供参数模板,请使用仓库中参数模板文件的路径。

    3. 对于从本地源选择 JSON JSON 文件,请从本地源上传指定参数的文件。

    4. 对于手动输入工作流参数,请手动输入参数名称和描述。

  11. 在参数预览面板中,您可以查看或更改此工作流程版本的参数。如果恢复该JSON文件,则您所做的任何本地更改都将丢失。

  12. 选择下一步。

  13. 在容器 URI 重新映射页面的映射规则面板中,您可以为工作流程定义 URI 映射规则。

    在 “映射文件来源” 中,选择以下选项之一:

    • 无-无需映射规则。

    • 从 S3 中选择 JSON 文件-指定映射文件的 S3 位置。

    • 从本地源选择 JSON 文件-指定本地设备上的映射文件位置。

    • 手动输入映射 -在 “映射” 面板中输入注册表映射和图像映射。

  14. 控制台将显示 “映射” 面板。如果您选择了映射源文件,则控制台会显示该文件中的值。

    1. 在注册表映射中,您可以编辑映射或添加映射(最多 20 个注册表映射)。

      每个注册表映射都包含以下字段:

      • 上游注册表 URL-上游注册表的 URI。

      • ECR 存储库前缀 — Amazon ECR 私有存储库中使用的存储库前缀。

      • (可选)上游存储库前缀-上游注册表中存储库的前缀。

      • (可选)ECR 账户 ID-拥有上游容器映像的账户的账户 ID。

    2. 在图像映射中,您可以编辑图像映射或添加映射(最多 100 个图像映射)。

      每个图像映射都包含以下字段:

      • 源图像-指定上游注册表中源图像的 URI。

      • 目标图片-指定私有 Amazon ECR 注册表中相应图像的 URI。

  15. 选择下一步。

  16. 查看工作流程配置,然后选择创建工作流程。

使用 CLI 创建工作流程

如果您的工作流程文件和参数模板文件位于本地计算机上,则可以使用以下 CLI 命令创建工作流。

aws omics create-workflow \ --name "my_workflow" \ --definition-zip fileb://my-definition.zip \ --parameter-template file://my-parameter-template.json

该create-workflow操作返回以下响应:

{ "arn": "arn:aws:omics:us-west-2:....", "id": "1234567", "status": "CREATING", "tags": { "resourceArn": "arn:aws:omics:us-west-2:...." }, "uuid": "64c9a39e-8302-cc45-0262-2ea7116d854f" }

创建工作流程时要使用的可选参数

创建工作流程时,您可以指定任何可选参数。有关语法的详细信息,请参阅 AWS HealthOmics API 参考CreateWorkflow中的。

指定工作流程定义 Amazon S3 位置

如果您的工作流程定义文件位于 Amazon S3 文件夹中,请使用definition-uri参数指定位置,如以下示例所示。如果您的账户不拥有 Amazon S3 存储桶,请提供所有者的 AWS 账户 ID。

aws omics create-workflow \ --name Test \ --definition-uri s3://omics-bucket/workflow-definition/ \ --owner-id 123456789012 ...

使用基于 Git 的存储库中的工作流程定义

要使用支持的基于 Git 的存储库中的工作流程定义,请在请求中使用definition-repository参数。请勿提供任何其他definition参数,因为如果请求包含多个输入源,则请求会失败。

该definition-respository参数包含以下字段:

  • connectionArn— 将您的 AWS 资源连接到外部存储库的代码连接的 ARN。

  • fullRepositoryId— 将存储库 ID 输入为owner-name/repo-name。确认您有权访问此存储库中的文件。

  • sourceReference(可选)-输入存储库引用类型(BRANCH、TAG 或 COMMIT)和值。

    HealthOmics 如果您未指定源引用,则使用默认分支上的最新提交。

  • excludeFilePatterns(可选)-输入文件模式以排除特定的文件夹、文件或扩展名。这有助于在导入存储库文件时管理数据大小。最多提供 50 个模式。这些模式必须遵循全局模式语法。例如:

    • tests/

    • *.jpeg

    • large_data.zip

在基于 Git 的存储库中指定工作流程定义时,请使用parameter-template-path来指定参数模板文件。如果您未提供此参数,则会在没有参数模板的情况下 HealthOmics 创建工作流程。

以下示例显示了与基于 Git 的私有存储库中的内容相关的参数:

aws omics create-workflow \ --name custom-variant \ --description "Custom variant calling pipeline" \ --engine "WDL" \ --definition-repository '{ "connectionArn": "arn:aws:codeconnections:us-east-1:123456789012:connection/abcd1234-5678-90ab-cdef-1234567890ab", "fullRepositoryId": "myorg/my-genomics-workflows", "sourceReference": { "type": "BRANCH", "value": "main" }, "excludeFilePatterns": ["tests/**", "*.log"] }' \ --main "workflows/variant-calling/main.wdl" \ --parameter-template-path "parameters/variant-calling-params.json" \ --readme-path "docs/variant-calling-README.md" \ --storage-type "DYNAMIC" \

有关更多示例,请参阅博客文章《如何从 Git 中的内容创建 AWS HealthOmics 工作流程》。

指定自述文件

您可以使用以下参数之一来指定 README 文件的位置:

  • readme-markdown— 字符串输入或本地计算机上的文件。

  • readme-uri— 存储在 S3 上的文件的 URI。

  • readme-path — 存储库中自述文件的路径。

只能将自述路径与定义存储库结合使用。如果您未指定任何 README 参数,则会在存储库中 HealthOmics 导入根级 README.md 文件(如果存在)。

以下示例说明如何使用自述文件路径和自述文件URI指定自述文件位置。

# Using README from repository aws omics create-workflow \ --name "documented-workflow" \ --definition-repository '...' \ --readme-path "docs/workflow-guide.md" # Using README from S3 aws omics create-workflow \ --name "s3-readme-workflow" \ --definition-repository '...' \ --readme-uri "s3://my-bucket/workflow-docs/readme.md"

有关更多信息,请参阅 HealthOmics 工作流程自述文件。

指定main定义文件

如果您要包括多个工作流定义文件,请使用main参数为您的工作流程指定主定义文件。

aws omics create-workflow \ --name Test \ --main multi_workflow/workflow2.wdl \ ...

指定运行存储类型

您可以指定默认的运行存储类型(动态或静态)和运行存储容量(静态存储所必需的)。有关运行存储类型的更多信息,请参阅在 HealthOmics 工作流程中运行存储类型。

aws omics create-workflow \ --name my_workflow \ --definition-zip fileb://my-definition.zip \ --parameter-template file://my-parameter-template.json \ --storage-type 'STATIC' \ --storage-capacity 1200 \

指定 GPU 配置

使用 accelerators 参数创建在加速计算实例上运行的工作流程。以下示例说明如何使用该accelerators参数。您可以在工作流程定义中指定 GPU 配置。请参阅Accelerated-computing 实例。

aws omics create-workflow --name workflow name \ --definition-uri s3://amzn-s3-demo-bucket1/GPUWorkflow.zip \ --accelerators GPU

配置直通缓存映射参数

如果您使用的是 Amazon ECR 直通缓存映射功能,则可以覆盖默认映射。有关容器设置参数的更多信息,请参阅私有工作流程的容器镜像。

在以下示例中,文件mappings.json包含以下内容:

{ "registryMappings": [ { "upstreamRegistryUrl": "registry-1.docker.io", "ecrRepositoryPrefix": "docker-hub" }, { "upstreamRegistryUrl": "quay.io", "ecrRepositoryPrefix": "quay", "accountId": "123412341234" }, { "upstreamRegistryUrl": "public.ecr.aws", "ecrRepositoryPrefix": "ecr-public" } ], "imageMappings": [{ "sourceImage": "docker.io/library/ubuntu:latest", "destinationImage": "healthomics-docker-2/custom/ubuntu:latest", "accountId": "123412341234" }, { "sourceImage": "nvcr.io/nvidia/k8s/dcgm-exporter", "destinationImage": "healthomics-nvidia/k8s/dcgm-exporter" } ] }

在创建工作流命令中指定映射参数:

aws omics create-workflow \ ... --container-registry-map-file file://mappings.json ...

您也可以指定映射参数文件的 S3 位置:

aws omics create-workflow \ ... --container-registry-map-uri s3://amzn-s3-demo-bucket1/test.zip ...

使用 SDK 创建工作流程

您可以使用其中一个来创建工作流程 SDKs。以下示例展示了如何使用 Python 开发工具包创建工作流程

import boto3 omics = boto3.client('omics') with open('definition.zip', 'rb') as f: definition = f.read() response = omics.create_workflow( name='my_workflow', definitionZip=definition, parameterTemplate={ ... } )