

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

# 将 HealthOmics 工作流程连接到 VPC
<a name="workflows-vpc-networking"></a>

借助 Amazon Virtual Private Cloud（亚马逊 VPC），您可以在您定义的私有虚拟网络中启动 AWS 资源。您可以将运行配置为使用 VPC 联网模式，从而允许您的 HealthOmics 工作流程访问您的 VPC 中的资源。启用 VPC 联网后，如果您的 VPC 配置了互联网访问权限，则您的运行可以访问您的 VPC 内的资源并通过公共互联网连接到外部资源。

**注意**  
每个 HealthOmics 工作流程运行都在 HealthOmics 服务拥有和管理的 VPC 内执行。这些 VPC 是自动维护的，对客户不可见。将您的运行配置为访问您的 Amazon VPC 中的资源对 HealthOmics-managed VPC 没有影响。

## 何时使用 VPC 网络
<a name="vpc-when-to-use"></a>

当您的运行需要时，请使用 VPC 联网：
+ 通过互联网访问公开可用的数据集（例如，美国国立卫生研究院数据集、学术存储库）
+ Connect 连接到第三方许可服务器或外部 API
+ 从其他 AWS 区域的 Amazon S3 存储桶读取或写入数据
+ 访问私有网络中的本地资源
+ 连接到您的 VPC 中的 AWS 资源

**注意**  
当您将运行连接到 VPC 时，它只能访问该 VPC 内的可用资源。要允许您的运行访问互联网，您还必须将 VPC 配置为可以访问互联网。有关更多信息，请参阅 [VPC-connected 工作流程的互联网接入](workflows-vpc-internet.md)。

**Topics**
+ [何时使用 VPC 网络](#vpc-when-to-use)
+ [联网模式](#vpc-networking-modes)
+ [开始使用](#vpc-getting-started)
+ [VPC 要求](#vpc-requirements)
+ [VPC 网络的服务相关角色](vpc-service-linked-role.md)
+ [连接到另一个账户中的 VPC](workflows-vpc-cross-account.md)
+ [配置 API](#vpc-configuration-apis)
+ [使用 VPC 网络运行工作流程](#vpc-running-workflows)
+ [VPC 网络故障排除](vpc-troubleshooting-guide.md)
+ [最佳实践](#vpc-best-practices)
+ [VPC 网络配额](#vpc-quotas)

## 联网模式
<a name="vpc-networking-modes"></a>

HealthOmics 工作流支持两种联网模式。默认情况下，工作流程运行在 “受限” 模式下运行。在启动工作流程运行时，您可以按运行启用 VPC 联网。

**受限（默认）**  
跑步只能访问同一 AWS 区域内的 Amazon S3 和 Amazon ECR 资源。跑步无法访问其他 AWS 服务、跨 AWS 区域的资源或公共互联网。

**VPC**  
运行流量通过在 HealthOmics 您的 VPC 子网中配置的弹性网络接口 (ENI) 进行路由。您可以通过 NAT 网关控制网络路由、安全组、网络 ACL 和互联网访问。此模式允许访问：  
+ 公共互联网资源（需要配置 NAT 网关）
+ AWS 其他地区的服务
+ 您的 VPC 中的私有资源
+ 访问私有网络中的本地资源

在启动工作流程运行时，您可以使用 `StartRun` API 中的`networkingMode`参数指定联网模式。

## 开始使用
<a name="vpc-getting-started"></a>

本节将指导您首次为 HealthOmics 工作流程设置 VPC 网络。

### 先决条件
<a name="vpc-networking-prerequisites"></a>

在为 HealthOmics 工作流程配置 VPC 网络之前，请确保您具备以下条件：
+ 具有相应子网和安全组的现有 VPC。VPC 必须与您的工作流程位于同一区域。
+ 在您所在地区 HealthOmics 运营的可用区中至少有一个子网。
+ 创建和管理 HealthOmics 配置的适当的 IAM 权限。
+ 了解 VPC 网络概念（子网、安全组、路由表）。
+ 您的 AWS 账户中有足够的 ENI 容量。 HealthOmics 使用服务相关角色在您的 VPC 中扩展和管理 ENI。所需的 ENI 数量取决于您的工作负载。在 Amazon EC2 控制台中监控您的 ENI 使用情况，确保您有足够的容量。

**重要**  
您的 VPC 配置必须包含在您所在地区 HealthOmics运行的可用区中的至少一个子网，以支持工作流程任务放置。使用 VPC 联网模式时，您有责任确定跨 AWS 区域传输或使用数据是否安全合规。

### 步骤 1：创建或配置您的 VPC
<a name="vpc-step-create-vpc"></a>

创建包含私有子网、安全组和 NAT 网关的 VPC（如果需要访问互联网）。有关详细的分步说明，请参阅[VPC-connected 工作流程的互联网接入](workflows-vpc-internet.md)。

### 步骤 2：配置安全组
<a name="vpc-step-security-groups"></a>

创建一个安全组，允许出站流量到达您的运行需要访问的目的地。按照最低权限原则，将安全组配置为仅允许所需的最低出站流量。

有关配置示例和详细指南，请参阅中的安全组部分[VPC-connected 工作流程的互联网接入](workflows-vpc-internet.md)。

### 步骤 3：验证路由表
<a name="vpc-step-route-tables"></a>

确保您的私有子网有通往 NAT 网关的路由，以便访问互联网。有关路由表配置的示例，请参阅中的路由表部分[VPC-connected 工作流程的互联网接入](workflows-vpc-internet.md)。

**注意**  
将运行连接到公有子网不会为其提供互联网访问权限或公有 IP 地址。对于需要互联网连接的跑步，请务必使用带有 NAT 网关路由的私有子网。

### 步骤 4：创建配置资源
<a name="vpc-step-create-configuration"></a>

创建用于定义您的 VPC 网络设置的 HealthOmics 配置资源：

```
aws omics create-configuration \
  --name {{my-vpc-config}} \
  --description "VPC configuration for genomics workflows" \
  --run-configurations '{
    "vpcConfig": {
      "securityGroupIds": ["{{sg-0123456789abcdef0}}"],
      "subnetIds": [
        "{{subnet-0a1b2c3d4e5f6g7h8}}",
        "{{subnet-1a2b3c4d5e6f7g8h9}}"
      ]
    }
  }' \
  --region {{us-west-2}}
```

配置网络资源后，配置将从`ACTIVE`状态`CREATING`转换为状态。这最多需要 15 分钟。

### 步骤 5：开始使用 VPC 网络运行工作流程
<a name="vpc-step-start-run"></a>

配置完成后`ACTIVE`，在启用 VPC 联网的情况下启动工作流程运行：

```
aws omics start-run \
  --workflow-id {{1234567}} \
  --role-arn arn:aws:iam::{{123456789012}}:role/{{OmicsWorkflowRole}} \
  --output-uri s3://{{my-bucket}}/outputs/ \
  --networking-mode VPC \
  --configuration-name {{my-vpc-config}} \
  --region {{us-west-2}}
```

### 步骤 6：验证连通性
<a name="vpc-step-verify"></a>

监控您的工作流程运行情况，以验证其是否可以访问所需的外部资源。在 “日志” 中查看工作流程 CloudWatch 日志，了解连接成功或失败的消息。有关测试连接的详细指南，请参阅[测试 VPC 连接](workflows-vpc-internet.md#vpc-testing-connectivity)。

## VPC 要求
<a name="vpc-requirements"></a>

您的 VPC 必须满足以下要求：

### 子网要求
<a name="vpc-subnet-requirements"></a>
+ **最低限度：**在 HealthOmics 运行的可用区中至少有一个子网
+ **最大：**每个配置 16 个子网
+ **限制：**每个可用区最多有一个子网
+ **建议：**对于需要互联网访问的跑步，使用带有 NAT 网关路由的私有子网。虽然您可以指定单个子网，但我们建议在不同的可用区中使用多个子网以提高可用性。

### 安全组要求
<a name="vpc-security-group-requirements"></a>
+ **最少：**1 个安全组
+ **最多：**每个配置 5 个安全组
+ **要求：**所有安全组必须与子网属于同一 VPC

安全组控制您跑步的入站和出站流量。

**注意**  
所有子网和安全组必须属于同一 VPC。

### 网络接口要求
<a name="vpc-eni-requirements"></a>

HealthOmics 在您的 VPC 中配置弹性网络接口 (ENI) 以将运行连接到您的网络。确保您的 AWS 账户有足够的 ENI 容量（默认限制：每个区域 5,000 个 ENI）。

由创建的 ENI 使用 HealthOmics 以下标签进行标记：

```
"TagSet": [
  {
    "Key": "Service",
    "Value": "HealthOmics"
  },
  {
    "Key": "eniType",
    "Value": "CUSTOMER"
  }
]
```

**重要**  
请勿修改或删除由 HealthOmics创建的 ENI。修改这些网络接口可能会导致服务延迟或工作流程运行中断。

## 配置 API
<a name="vpc-configuration-apis"></a>

HealthOmics 提供用于创建、管理和删除 VPC 配置的 API。您可以在多个工作流程运行中重复使用配置。

**Topics**
+ [CreateConfiguration](#vpc-create-configuration)
+ [GetConfiguration](#vpc-get-configuration)
+ [ListConfigurations](#vpc-list-configurations)
+ [DeleteConfiguration](#vpc-delete-configuration)

### CreateConfiguration
<a name="vpc-create-configuration"></a>

使用 VPC 网络设置创建新的配置资源。有关分步示例，请参阅[步骤 4：创建配置资源](#vpc-step-create-configuration)。

**请求语法：**

```
aws omics create-configuration \
  --name {{configuration-name}} \
  --description {{description}} \
  --run-configurations '{"vpcConfig":{"securityGroupIds":["{{security-group-id}}"],"subnetIds":["{{subnet-id}}"]}}' \
  --tags Key={{key}},Value={{value}} \
  --region {{region}}
```

**参数：**
+ **名称**（必填）-配置的唯一名称（最多 50 个字符）。
+ **描述**（可选）-配置的描述。
+ **运行配置（可选）—** VPC 配置设置：
  + `vpcConfig.securityGroupIds`— 1—5 个安全组 ID 的列表。
  + `vpcConfig.subnetIds`— 包含 1—16 个子网 ID 的列表。
+ **标签**（可选）-资源标签。

**响应：**

```
{
  "arn": "arn:aws:omics:{{region}}:{{account-id}}:configuration/{{configuration-name}}",
  "uuid": "{{configuration-uuid}}",
  "name": "{{configuration-name}}",
  "runConfigurations": {
    "vpcConfig": {
      "securityGroupIds": ["{{security-group-id}}"],
      "subnetIds": ["{{subnet-id}}"],
      "vpcId": "{{vpc-id}}"
    }
  },
  "status": "CREATING",
  "creationTime": "{{timestamp}}",
  "tags": {}
}
```

**配置状态值：**
+ 正在@@ **创建**-正在创建配置并配置网络资源（最长 15 分钟）。
+ **激活**-配置已准备就绪，可以使用。
+ 正在@@ **删除**-正在删除配置。
+ **已删除**-配置已删除。

### GetConfiguration
<a name="vpc-get-configuration"></a>

检索特定配置的详细信息。

**请求语法：**

```
aws omics get-configuration \
  --name {{configuration-name}} \
  --region {{region}}
```

**响应：**

```
{
  "arn": "arn:aws:omics:{{region}}:{{account-id}}:configuration/{{configuration-name}}",
  "uuid": "{{configuration-uuid}}",
  "name": "{{configuration-name}}",
  "runConfigurations": {
    "vpcConfig": {
      "securityGroupIds": ["{{security-group-id}}"],
      "subnetIds": ["{{subnet-id}}"],
      "vpcId": "{{vpc-id}}"
    }
  },
  "status": "ACTIVE",
  "creationTime": "{{timestamp}}",
  "tags": {}
}
```

### ListConfigurations
<a name="vpc-list-configurations"></a>

列出您账户中的所有配置。

**请求语法：**

```
aws omics list-configurations \
  --region {{region}}
```

**响应：**

```
{
  "items": [
    {
      "arn": "arn:aws:omics:{{region}}:{{account-id}}:configuration/{{configuration-name}}",
      "name": "{{configuration-name}}",
      "description": "{{description}}",
      "status": "ACTIVE",
      "creationTime": "{{timestamp}}"
    }
  ]
}
```

### DeleteConfiguration
<a name="vpc-delete-configuration"></a>

删除配置。您无法删除当前由活动工作流程运行使用的配置。

**请求语法：**

```
aws omics delete-configuration \
  --name {{configuration-name}} \
  --region {{region}}
```

**注意**  
清理网络资源时，配置状态更改为 DELETING，然后在该过程完成后更改为 DELETED。

## 使用 VPC 网络运行工作流程
<a name="vpc-running-workflows"></a>

### 开始使用 VPC 网络运行
<a name="vpc-start-run"></a>

要在工作流程运行中使用 VPC 联网，请指定`networking-mode`参数和`configuration-name`：

```
aws omics start-run \
  --workflow-id {{1234567}} \
  --role-arn arn:aws:iam::{{123456789012}}:role/{{OmicsWorkflowRole}} \
  --output-uri s3://{{my-bucket}}/outputs/ \
  --networking-mode VPC \
  --configuration-name {{my-vpc-config}} \
  --region {{us-west-2}}
```

**参数：**
+ **网络模式-设置为`VPC`以启用 VPC 联网**。默认值为 `RESTRICTED`。
+ **配置名称**（必填）-要使用的配置的名称。

### 查看运行网络配置
<a name="vpc-get-run"></a>

`GetRun`用于查看运行的网络配置：

```
aws omics get-run \
  --id {{run-id}} \
  --region {{region}}
```

响应包括联网模式、配置详细信息和 VPC 配置。以下示例显示了响应中的 VPC-related 字段：

```
{
  "arn": "arn:aws:omics:{{region}}:{{account-id}}:run/{{run-id}}",
  "id": "{{run-id}}",
  "status": "{{status}}",
  "workflowId": "{{workflow-id}}",
  "networkingMode": "VPC",
  "configuration": {
    "name": "{{configuration-name}}",
    "arn": "arn:aws:omics:{{region}}:{{account-id}}:configuration/{{configuration-name}}",
    "uuid": "{{configuration-uuid}}"
  },
  "vpcConfig": {
    "subnets": ["{{subnet-id-1}}", "{{subnet-id-2}}"],
    "securityGroupIds": ["{{security-group-id}}"],
    "vpcId": "{{vpc-id}}"
  }
}
```

### 配置不可变性
<a name="vpc-config-immutability"></a>

工作流使用运行开始时存在的配置快照。您可以在运行执行期间安全地修改或删除配置，而不会影响活动运行。

### 呼叫缓存注意事项
<a name="vpc-call-caching"></a>

将 VPC 联网与呼叫缓存配合使用时，请确保正确配置您的工作流程引擎。有关每个引擎的呼叫缓存的详细指导，请参阅[Engine-specific 缓存功能](workflow-cache-per-engine.md)。

**重要**  
连接到非确定性资源或动态资源（例如，公共 Internet 上的第三方数据库）时，请考虑在工作流程中使用缓存任务选择退出功能，以避免缓存可能影响运行输出的动态数据集。

## 最佳实践
<a name="vpc-best-practices"></a>

### 安全性
<a name="vpc-bp-security"></a>

1. **使用权限最低的安全组。**仅允许所需的最低出站流量。使用特定的目标 CIDR 块代替 0.0.0。 0/0 如果可能的话。记录每条安全组规则的用途。

1. **按环境分开配置。**为开发、暂存和生产创建单独的配置。为每个环境使用不同的 VPC 或子网。将适当的标签应用于组织配置。

1. **实施网络监控。**启用 VPC 流日志进行安全分析。为异常交通模式设置 CloudWatch 警报。定期查看 CloudTrail 日志以了解配置更改。

1. **使用 VPC 终端节点提供 AWS 服务。**为 Amazon S3、亚马逊 ECR 和其他 AWS 服务配置 VPC 终端节点。这降低了 NAT 网关成本，提高了性能，并通过将流量保持在 AWS 网络内来提高安全性。

### 性能
<a name="vpc-bp-performance"></a>

1. **规划网络扩展。**网络吞吐量起始于 10 Gbps，随着时间的推移可扩展到 100 Gbps。对于即时的高吞吐量需求，请提前计划并要求预热。监控网络指标以了解您的工作流程要求。

1. **按可用区部署 NAT 网关。**每个可用区使用一个 NAT 网关来处理生产工作负载。这提高了弹性和吞吐量，并降低了跨可用区的数据传输成本。

1. **重复使用配置。**创建可在多个工作流程之间共享的配置。这减少了配置管理开销并确保了网络设置的一致性。

1. **在生产使用之前测试配置。**使用测试工作流程验证网络连接。验证安全组规则是否允许所需的流量。使用多可用区配置测试故障转移场景。

### 成本优化
<a name="vpc-bp-cost"></a>

1. **使用 VPC 终端节点代替 NAT 网关。**要访问 AWS 服务，请使用 VPC 终端节点（不收取数据处理费用）。Amazon S3 网关终端节点不收取额外费用。接口终端节点按小时收费，但可能比 NAT 网关更具成本效益。

1. **监控数据传输成本。**数据传输不收费。将数据传输到互联网会产生标准 AWS 的数据传输速率。 Cross-Region 数据传输速率更高。使用 C AWS ost Explorer 跟踪 VPC-related 成本。

1. **Right-size NAT 网关部署。**要进行开发，请对所有可用区使用一个 NAT 网关。对于生产，请为每个可用区使用一个 NAT 网关以实现弹性。监控 NAT 网关利用率以避免过度配置。

1. **删除未使用的配置。**定期检查并删除不再使用的配置。使用标签来标识配置的所有权和用途。

### 正常运行
<a name="vpc-bp-operational"></a>

1. **使用描述性配置名称。**在名称中包括环境、目的和团队（例如`prod-genomics-vpc`，`dev-clinical-trials-vpc`）。

1. **标记所有配置。**对所有资源使用一致的标记策略。包括 “环境”、“所有者” 和 “用途” 的标签。 CostCenter

1. **记录网络要求。**记录每个配置访问哪些外部服务。维护安全组规则及其用途的地图。与您的团队共享网络架构图。

## VPC 网络配额
<a name="vpc-quotas"></a>

下表列出了 VPC 网络配置的配额：


| 资源 | 默认限制 | 可调整 | 
| --- | --- | --- | 
| 每个账户的最大配置数 | 10 | 是 | 
| 每个配置的最大安全组数 | 5 | 否 | 
| 每个配置的最大子网数 | 16 | 否 | 
| 每个可用区的最大子网数 | 1 | 否 | 
| CreateConfiguration API TPS | 1 | 是 | 
| 每个区域的弹性网络接口（客户 VPC） | 5000 | 是 | 

要申请增加配额，请打开 S [ervice Quotas 控制台 **AWS HealthOmics**](https://console.aws.amazon.com/servicequotas/home)，选择**AWS 服务**，搜索，选择要增加的配额，然后选择**请求增加配额**。配额增加请求通常在 1-2 个工作日内处理。