

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

# 打包并提供 HealthOmics 工作流程定义
<a name="workflow-defn-packaging"></a>

当您创建工作流程或工作流程版本时，只能提供来自一个来源的定义：您随请求发送的 ZIP 档案、Amazon S3 中的 ZIP 存档或 Git-based 存储库。包含多个定义源的请求失败。本主题中的参数适用于两者 `CreateWorkflow` 和 `CreateWorkflowVersion` 操作。有关完整程序，请参见 [创建私有工作流程](create-private-workflow.md) 和 [创建工作流程版本](workflows-version-create.md)。

**注意**  
HealthOmics 创建工作流程时会删除一些工作流程定义。如需了解哪些引擎、发现结果是否阻碍了工作流程以及如何阅读它们，请参阅 [工作流程提示器已输入 HealthOmics](workflows-linter.md)。

## 选择工作流程定义来源
<a name="workflow-defn-source-selection"></a>


| 使用这个来源 | API 参数 | 最大大小 | AWS CLI 标记 | 
| --- | --- | --- | --- | 
| 本地计算机上的 ZIP 存档。 | definitionZip | 4.4 兆字节 | --definition-zip fileb://my-definition.zip | 
| 亚马逊 S3 存储桶中的 ZIP 档案。存储桶必须在同一个存储桶中 AWS 区域作为工作流程。 | definitionUri | 100 MB | --definition-uri s3://amzn-s3-demo-bucket1/my-definition.zip | 
| A 支持的 Git-based 存储库，通过 AWS CodeConnections 连接。 | definitionRepository | 1 GiB 存储库，每个文件 100 MiB | --definition-repository 带有 JSON 值 | 

其他注意事项：
+ 这些大小配额无法增加。有关更多信息，请参阅 [HealthOmics 工作流程固定大小配额](fixed-quotas.md#fixed-quotas-workflows)。
+ 如果您的账户不拥有保存定义的 Amazon S3 存储桶，请提供存储桶所有者的 AWS 账户 身份证进入 `workflowBucketOwnerId` （`--workflow-bucket-owner-id`）。
+ 和 `definitionRepository`， HealthOmics 从存储库读取定义文件，然后 `main`， `parameterTemplatePath`，以及 `readmePath` 是存储库中的路径，而不是存档内的路径。有关以下内容的更多信息 `definitionRepository` 字段，请参阅 [使用来自的工作流定义 Git-based 知识库](create-private-workflow.md#create-defn-uri-git)。有关连接设置和支持的提供商的更多信息，请参阅 [HealthOmics 与基于 Git 的存储库的工作流程集成](workflows-git-integration.md)。

## ZIP 存档布局和主定义文件
<a name="workflow-defn-zip-layout"></a>

包括主定义导入的每个文件，例如子工作流程， `nextflow.config`，以及任何 `bin` 脚本。

定义文件是扩展名与支持的引擎相匹配的文件，例如 `.wdl`， `.nf`，或 `.cwl`。如果你省略 `main`， HealthOmics 从离存档根最近的定义文件中选择它。它会忽略隐藏的文件和文件夹，并忽略存档中更深处的定义文件。自动选择还需要单个引擎，要么是因为存档文件包含一个引擎的定义文件，要么是因为您设置了 `engine`。在最近级别的文件中：
+ 如果只有一个定义文件， HealthOmics 用它，不管它叫什么。
+ 如果有几个， HealthOmics 使用名为的那个 `main.wdl`， `main.nf`，或 `main.cwl`。

在两个案例中 HealthOmics 无法解析存档。请求本身成功，工作流程或工作流程版本启动于 `CREATING`，但随后移至 `FAILED`，其状态消息给出了原因：
+ `Zip file contains multiple workflow definition types` — 存档包含多个引擎的定义文件，但您没有设置 `engine`。无论你是否设置，这都适用 `main`。设置 `engine`，或者删除其他引擎的文件。 HealthOmics 当两种情况都适用时，首先报告此原因。
+ `Zip file contains multiple top-level workflow definition files` — 你省略了 `main`，有几个定义文件位于最近的级别，其中没有一个被命名为 `main.wdl`， `main.nf`，或 `main.cwl`。设置 `main` 走你想要的路。

要自己选择主定义文件，请设置 `main` （`--main`) 到其相对于存档根目录的路径。路径最多可以是 128 个字符。

例如，对于主定义文件为 `workflow-definition/main-file.wdl`:

```
--main workflow-definition/main-file.wdl
```

设置 `engine` （`--engine`）自己命名引擎，要么解析包含多个引擎定义文件的存档，要么使用 WDL lenient 引擎。

考虑在本地计算机上使用以下布局的工作流文件夹：

```
my-workflow/
    main.wdl
    tasks/align.wdl
    tasks/call-variants.wdl
```

从该文件夹中创建档案，这样 `main.wdl` 还有 `tasks` 文件夹位于存档的根目录。以下命令还会添加隐藏的文件和文件夹，例如 `.git` 克隆存储库中的文件夹。这些将计入定义大小，因此不包括不需要的那些，例如 `-x '.*' -x '*/.*'`:

```
cd my-workflow
zip -r ../my-definition.zip .
cd ..
```

`main.wdl` 现在是存档根目录下的唯一定义文件，所以你可以省略 `main`:

```
main.wdl
tasks/align.wdl
tasks/call-variants.wdl
```

## 以内联方式或通过 Amazon S3 发送档案
<a name="workflow-defn-zip-handoff"></a>

`definitionZip` 是一个二进制参数。当你使用 AWS CLI，将存档与 `fileb://` 前缀和 AWS CLI 读取文件并为您编码。这个 AWS SDK 会为您进行编码。如果您直接通过 HTTP 调用 API，请将档案作为 base64 编码的字符串发送。

以下示例中的参数模板是可选的。如果你省略它， HealthOmics 从您的工作流程定义中派生运行参数。有关更多信息，请参阅 [HealthOmics 工作流程的参数模板文件](parameter-templates.md)。

以下 AWS CLI 示例通过发送包含请求的 ZIP 存档来创建工作流程。用斜体替换每个值：

```
aws omics create-workflow \
  --name {{my-workflow-name}} \
  --definition-zip fileb://{{my-definition.zip}} \
  --parameter-template file://{{my-parameter-template.json}}
```

对于大于 `definitionZip` 限制在 [选择工作流程定义来源](#workflow-defn-source-selection)，将其上传到与工作流程位于同一区域的 Amazon S3 存储桶并使用 `definitionUri` 取而代之。用斜体替换每个值，并将该存储桶替换为你自己的值：

```
aws s3 cp {{my-definition.zip}} s3://amzn-s3-demo-bucket1/my-definition.zip

aws omics create-workflow \
  --name {{my-workflow-name}} \
  --definition-uri s3://amzn-s3-demo-bucket1/my-definition.zip \
  --parameter-template file://{{my-parameter-template.json}}
```

## 设置默认运行存储
<a name="workflow-defn-storage-pairing"></a>

我们建议大多数工作流程使用动态运行存储。在以下任一情况下，选择静态运行存储：
+ 该工作流程使用超过 9.6 TiB 的数据，其任务受益于高持续性 I/O。
+ 同时从共享运行存储中读取 100 多个分散任务。

有关每种运行存储类型的更多信息，包括其吞吐量特征以及如何调整静态运行存储空间的大小，请参阅 [在 HealthOmics 工作流程中运行存储类型](workflows-run-types.md) 和 [为私有用户运行优化 HealthOmics 工作流程](workflows-run-optimize.md)。

这个 `storageType` （`--storage-type`) 和 `storageCapacity` （`--storage-capacity`) 参数为使用工作流的运行设置默认值。可以在运行时覆盖这两者，如中所述 [开始跑步 HealthOmics](starting-a-run.md)。按如下方式对它们进行配对：
+ `storageType` 的 `DYNAMIC` — HealthOmics 根据文件系统利用率向上和向下扩展运行存储。不要设置 `storageCapacity`。如果你这样做，请求就会失败： `CreateWorkflow` 报告 `You cannot set the storage capacity for workflows that use DYNAMIC run storage type`，以及 `CreateWorkflowVersion` 报告 `You cannot set the storage capacity for workflow version that use DYNAMIC run storage type`。
+ `storageType` 的 `STATIC` — HealthOmics 分配固定数量的运行存储空间，因此也要设置 `storageCapacity`，以 GiB 为单位。如果工作流程和运行均未指定容量，则运行使用 1,200 GiB。最高限额是每个账户的限额。 HealthOmics 仅将静态运行存储空间配置为 1,200 GiB 或 2,400 GiB 的倍数，并将任何其他值向上舍入到下一个支持的大小。例如， HealthOmics 为 1,200 GiB 以下的容量提供 1,200 GiB。

以下示例将默认运行存储空间设置为 1,200 GiB 的静态存储：

```
aws omics create-workflow \
  --name {{my-workflow-name}} \
  --definition-zip fileb://{{my-definition.zip}} \
  --storage-type STATIC \
  --storage-capacity 1200
```