

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

# 创建私有工作流程
<a name="create-private-workflow"></a>

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

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

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

如果您的工作流程任务使用任何外部工具（可执行文件、库或脚本），则可以将这些工具构建到容器映像中。您可以通过以下选项来托管容器镜像：
+ 将容器镜像托管在 ECR 私有注册表中。此选项的先决条件：
  + 创建 ECR 私有存储库，或选择现有存储库。
  + 按中所述配置 ECR 资源策略。[Amazon ECR 权限](permissions-ecr.md)
  + 将您的容器镜像上传到私有存储库。
+ 将容器镜像与支持的第三方注册表的内容同步。此选项的先决条件：
  + 在 ECR 私有注册表中，为每个上游注册表配置一条直通缓存规则。有关更多信息，请参阅 [镜像映射](workflows-ecr.md#ecr-pull-through-mapping-format)。
  + 按中所述配置 ECR 资源策略。[Amazon ECR 权限](permissions-ecr.md)
  + 创建存储库创建模板。该模板定义了 Amazon ECR 何时为上游注册表创建私有存储库的设置。
  + 创建前缀映射以将工作流程定义中的容器映像引用重新映射到 ECR 缓存命名空间。

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

**Topics**
+ [使用控制台创建工作流程](#console-create-workflows)
+ [使用 CLI 创建工作流程](#api-create-workflows)
+ [使用 SDK 创建工作流程](#sdk-create-workflows)

## 使用控制台创建工作流程
<a name="console-create-workflows"></a>

**创建工作流程的步骤**

1. 打开 [HealthOmics 控制台](https://console.aws.amazon.com/omics/)。

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

1. 在**私有工作流程**页面上，选择**创建工作流程**。

1. 在 “**定义工作流程**” 页面上，提供以下信息：

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

   1. **描述**（可选）：此工作流程的描述。

1. 在 “**工作流定义**” 面板中，提供以下信息：

   1. **工作流语言**（可选）：选择工作流程的规范语言。否则， HealthOmics 根据工作流程定义确定语言。

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

      1. 对于**从存储库服务导入**：
**注意**  
HealthOmics 支持、、GitHub、GitLabBitbucket、GitHub self-managed的公有和私有存储库GitLab self-managed。

         1. 选择一个**连接**，将您的 AWS 资源连接到外部存储库。要创建连接，请参阅[Connect 连接外部代码存储库](setting-up-new.md#setting-up-omics-repository)。
**注意**  
该TLV地区的客户需要在 IAD (us-east-1) 区域创建连接才能创建工作流程。

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

         1. 在**源引用**（可选）中，输入存储库源引用（分支、标签或提交 ID）。 HealthOmics 如果未指定源引用，则使用默认分支。

         1. 在**排除文件模式**中，输入文件模式以排除特定的文件夹、文件或扩展名。这有助于在导入存储库文件时管理数据大小。最多有 50 个模式，并且模式必须遵循[全局模式语法](https://fossil-scm.org/home/doc/tip/www/globs.md)。例如：

            1. `tests/`

            1. `*.jpeg`

            1. `large_data.zip`

      1. 对于**从 S3 中选择定义文件夹**：

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

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

      1. 对于**从本地来源选择定义文件夹**：

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

   1. **工作流定义文件主路径**（可选）：输入从压缩的工作流定义文件夹或存储库到该`main`文件的文件路径。如果工作流定义文件夹中只有一个文件，或者主文件名为 “main”，则不需要此参数。

1. 在**自述文件**（可选）面板中，选择**自述文件来源**并提供以下信息：
   + 对于**从存储库服务导入**，在**自述文件路径**中，输入存储库中自述文件的路径。
   + 对于**从 S3 中选择文件**，在 S3 的**自述文件中**，输入自述文件的 Amazon S3 URI。
   + 对于 **“从本地来源选择文件**：在**自述文件-可选**” 中，选择 “选择**文件” 以选择**要上传的 markdown (.md) 文件。

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

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

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

1. **标签**（可选）：您最多可以将 50 个标签与该工作流程相关联。

1. 选择**下一步**。

1. 在**添加工作流程参数**（可选）页面上，选择**参数来源**：

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

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

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

   1. 对于**手动输入工作流参数**，请手动输入参数名称和描述。

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

1. 选择**下一步**。

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

   在 “**映射文件来源**” 中，选择以下选项之一：
   + **无**-无需映射规则。
   + **从 S3 中选择 JSON 文件**-指定映射文件的 S3 位置。
   + **从本地源选择 JSON 文件**-指定本地设备上的映射文件位置。
   + **手动输入映射** **-在 “映射” 面板中输入注册表映射和图像映射。**

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

   1. 在**注册表映射**中，您可以编辑映射或添加映射（最多 20 个注册表映射）。

      每个注册表映射都包含以下字段：
      + **上游注册表 URL**-上游注册表的 URI。
      + **ECR 存储库前缀** — Amazon ECR 私有存储库中使用的存储库前缀。
      + （可选）**上游存储库前**缀-上游注册表中存储库的前缀。
      + （可选）**ECR 账户 ID**-拥有上游容器映像的账户的账户 ID。

   1. 在**图像映射**中，您可以编辑图像映射或添加映射（最多 100 个图像映射）。

      每个图像映射都包含以下字段：
      + **源图像**-指定上游注册表中源图像的 URI。
      + **目标图片**-指定私有 Amazon ECR 注册表中相应图像的 URI。

1. 选择**下一步**。

1. 查看工作流程配置，然后选择**创建工作流程**。

## 使用 CLI 创建工作流程
<a name="api-create-workflows"></a>

如果您的工作流程文件和参数模板文件位于本地计算机上，则可以使用以下 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"
}
```

### 创建工作流程时要使用的可选参数
<a name="other-create-parameters"></a>

创建工作流程时，您可以指定任何可选参数。有关语法的详细信息，请参阅 AWS HealthOmics API 参考[CreateWorkflow](https://docs.aws.amazon.com/omics/latest/api/API_CreateWorkflow.html)中的。

**Topics**
+ [指定工作流程定义 Amazon S3 位置](#create-defn-uri-parameter)
+ [使用基于 Git 的存储库中的工作流程定义](#create-defn-uri-git)
+ [指定自述文件](#specify-readme-file)
+ [指定**main**定义文件](#create-main-parameter)
+ [指定运行存储类型](#create-run-storage-parameter)
+ [指定 GPU 配置](#create-accelerator-parameter)
+ [配置直通缓存映射参数](#create-prefix-mapping-parameters)

#### 指定工作流程定义 Amazon S3 位置
<a name="create-defn-uri-parameter"></a>

如果您的工作流程定义文件位于 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 的存储库中的工作流程定义
<a name="create-defn-uri-git"></a>

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

该`definition-respository`参数包含以下字段：
+ **connectionArn**— 将您的 AWS 资源连接到外部存储库的代码连接的 ARN。
+ **fullRepositoryId**— 将存储库 ID 输入为`owner-name/repo-name`。确认您有权访问此存储库中的文件。
+ **sourceReference**（可选）-输入存储库引用类型（BRANCH、TAG 或 COMMIT）和值。

  HealthOmics 如果您未指定源引用，则使用默认分支上的最新提交。
+ **excludeFilePatterns**（可选）-输入文件模式以排除特定的文件夹、文件或扩展名。这有助于在导入存储库文件时管理数据大小。最多提供 50 个模式。这些模式必须遵循全局模式[语法](https://fossil-scm.org/home/doc/tip/www/globs.md)。例如：
  + `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 工作流程](https://repost.aws/articles/ARCEN7AjhaRSmteczRoc_QsA/how-to-create-an-aws-healthomics-workflows-from-content-in-git)》。

#### 指定自述文件
<a name="specify-readme-file"></a>

您可以使用以下参数之一来指定 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 工作流程自述文件](workflows-readme.md)。

#### 指定**main**定义文件
<a name="create-main-parameter"></a>

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

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

#### 指定运行存储类型
<a name="create-run-storage-parameter"></a>

您可以指定默认的运行存储类型（动态或静态）和运行存储容量（静态存储所必需的）。有关运行存储类型的更多信息，请参阅[在 HealthOmics 工作流程中运行存储类型](workflows-run-types.md)。

```
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 配置
<a name="create-accelerator-parameter"></a>

使用 accelerators 参数创建在加速计算实例上运行的工作流程。以下示例说明如何使用该`accelerators`参数。您可以在工作流程定义中指定 GPU 配置。请参阅[加速计算实例](memory-and-compute-tasks.md#workflow-task-accelerated-computing-instances)。

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

#### 配置直通缓存映射参数
<a name="create-prefix-mapping-parameters"></a>

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

在以下示例中，文件`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 创建工作流程
<a name="sdk-create-workflows"></a>

您可以使用其中一个来创建工作流程 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={ ... }
)
```