

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 將 HealthOmics 工作流程連線至 VPC
<a name="workflows-vpc-networking"></a>

使用 Amazon Virtual Private Cloud (Amazon VPC)，您可以在您定義的私有虛擬網路中啟動 AWS 資源。您可以將執行設定為使用 VPC 網路模式，讓 HealthOmics 工作流程存取 VPC 中的資源。啟用 VPC 聯網時，如果您的 VPC 已設定網際網路存取，則您的執行可以存取 VPC 中的資源，並透過公有網際網路連線至外部資源。

**注意**  
每個 HealthOmics 工作流程執行都會在 HealthOmics 服務擁有和管理的 VPC 內執行。這些 VPCs會自動維護，客戶看不到。設定您的執行以存取 Amazon VPC 中的資源不會影響 HealthOmics 受管 VPC。

## 何時使用 VPC 網路
<a name="vpc-when-to-use"></a>

當您的執行需要下列項目時，請使用 VPC 聯網：
+ 透過網際網路存取公開可用的資料集 （例如 NIH 資料集、學術儲存庫）
+ 連線至第三方授權伺服器或外部 APIs
+ 從其他 AWS 區域中的 Amazon S3 儲存貯體讀取或寫入資料
+ 存取私有網路中的內部部署資源
+ 連線至 VPC 中的 AWS 資源

**注意**  
當您將執行連線到 VPC 時，它只能存取該 VPC 中可用的資源。若要授予網際網路的執行存取權，您還必須設定 VPC 以進行網際網路存取。如需詳細資訊，請參閱[VPC 連線工作流程的網際網路存取](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)
+ [組態 APIs](#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 Workflows 支援兩種聯網模式。根據預設，工作流程執行會以限制模式運作。您可以在啟動工作流程執行時，以每次執行為基礎啟用 VPC 聯網。

**限制 （預設）**  
執行只能存取相同 AWS 區域內的 Amazon S3 和 Amazon ECR 資源。執行無法存取其他 AWS 服務、跨 AWS 區域的資源或公有網際網路。

**VPC**  
執行流量會透過 HealthOmics 在您 VPC 子網路中佈建的彈性網路界面 (ENIs) 路由。您可以透過 NAT 閘道控制網路路由、安全群組、網路 ACLs 和網際網路存取。此模式可讓您存取：  
+ 公有網際網路資源 （需要 NAT Gateway 組態）
+ 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 中的 ENIs。所需的 ENIs 數量取決於您的工作負載。在 Amazon EC2 主控台中監控 ENI 用量，以確保您有足夠的容量。

**重要**  
您的 VPC 組態必須在 HealthOmics 在您所在區域的可用區域中至少包含一個子網路，以支援工作流程任務放置。使用 VPC 聯網模式時，您有責任判斷跨 AWS 區域傳輸或使用資料是否安全且合規。

### 步驟 1：建立或設定 VPC
<a name="vpc-step-create-vpc"></a>

建立具有私有子網路、安全群組和 NAT 閘道的 VPC （如果需要網際網路存取）。如需step-by-step說明，請參閱 [VPC 連線工作流程的網際網路存取](workflows-vpc-internet.md)。

### 步驟 2：設定安全群組
<a name="vpc-step-security-groups"></a>

建立安全群組，允許傳出流量傳送到您執行需要存取的目的地。設定安全群組，以僅允許遵循最低權限原則的最低必要傳出流量。

如需組態範例和詳細指引，請參閱 中的安全群組區段[VPC 連線工作流程的網際網路存取](workflows-vpc-internet.md)。

### 步驟 3：驗證路由表
<a name="vpc-step-route-tables"></a>

確保您的私有子網路具有路由至 NAT Gateway 以進行網際網路存取。如需路由表組態範例，請參閱 中的路由表區段[VPC 連線工作流程的網際網路存取](workflows-vpc-internet.md)。

**注意**  
將執行連線到公有子網路並不會授予其網際網路存取或公有 IP 地址。對於需要網際網路連線的執行，一律使用具有 NAT Gateway 路由的私有子網路。

### 步驟 4：建立組態資源
<a name="vpc-step-create-configuration"></a>

建立 HealthOmics 組態資源，以定義您的 VPC 網路設定：

```
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}}
```

佈建網路資源後，組態將從 轉換為 `CREATING` `ACTIVE` 狀態。這最多需要 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 Logs 中的工作流程日誌連線成功或失敗訊息。如需測試連線能力的詳細指引，請參閱 [測試 VPC 連線](workflows-vpc-internet.md#vpc-testing-connectivity)。

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

您的 VPC 必須符合下列要求：

### 子網路需求
<a name="vpc-subnet-requirements"></a>
+ **下限：**HealthOmics 運作所在的可用區域中至少有一個子網路
+ **上限：**每個組態 16 個子網路
+ **限制：**每個可用區域最多一個子網路
+ **建議：**針對需要網際網路存取的執行，使用具有 NAT Gateway 路由的私有子網路。雖然您可以指定單一子網路，但我們建議在不同可用區域使用多個子網路，以提高可用性。

### 安全群組要求
<a name="vpc-security-group-requirements"></a>
+ **下限：**1 個安全群組
+ **上限：**每個組態 5 個安全群組
+ **要求：**所有安全群組都必須屬於與子網路相同的 VPC

安全群組會控制執行的傳入和傳出流量。

**注意**  
所有子網路和安全群組都必須屬於相同的 VPC。

### 網路界面需求
<a name="vpc-eni-requirements"></a>

HealthOmics 會在您的 VPC 中佈建彈性網路介面 ENIs)，以將執行連線到您的網路。確保 AWS 您的帳戶有足夠的 ENI 容量 （預設限制：每個區域 5，000 ENIs)。

HealthOmics 建立的 ENIs 會加上下列標籤：

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

**重要**  
請勿修改或刪除 HealthOmics 建立的 ENIs。修改這些網路介面可能會導致工作流程執行的服務延遲或中斷。

## 組態 APIs
<a name="vpc-configuration-apis"></a>

HealthOmics APIs 來建立、管理和刪除 VPC 組態。您可以在多個工作流程執行中重複使用組態。

**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}}
```

**參數：**
+ **name** （必要） — 組態的唯一名稱 （最多 50 個字元）。
+ **description** （選用） — 組態的描述。
+ **run-configurations** （選用） — VPC 組態設定：
  + `vpcConfig.securityGroupIds` — 1-5 個安全群組 IDs的清單。
  + `vpcConfig.subnetIds` — 1–16 個子網路 IDs的清單。
+ **tags** （選用） — 資源標籤。

**回應：**

```
{
  "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": {}
}
```

**組態狀態值：**
+ **CREATING** — 正在建立組態，並佈建網路資源 （最多 15 分鐘）。
+ **ACTIVE** — 組態已就緒可供使用。
+ **刪除** — 正在刪除組態。
+ **已刪除** — 已刪除組態。

### 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}}
```

**注意**  
正在清除網路資源時，組態狀態會變更為刪除，然後在程序完成後變更為刪除。

## 使用 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}}
```

**參數：**
+ **networking-mode** — 設定為 `VPC` 以啟用 VPC 聯網。預設值為 `RESTRICTED`。
+ **configuration-name** （必要） — 要使用的組態名稱。

### 檢視執行網路組態
<a name="vpc-get-run"></a>

使用 `GetRun` 檢視執行的聯網組態：

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

回應包含聯網模式、組態詳細資訊和 VPC 組態。下列範例顯示回應中的 VPC 相關欄位：

```
{
  "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 聯網時，請確定您的工作流程引擎已正確設定。如需每個引擎呼叫快取的詳細指引，請參閱 [引擎特定的快取功能](workflow-cache-per-engine.md)。

**重要**  
連線至非確定性或動態資源 （例如，公有網際網路上的第三方資料庫） 時，請考慮在工作流程中使用快取任務選擇退出功能，以避免快取可能影響執行輸出的動態資料集。

## 最佳實務
<a name="vpc-best-practices"></a>

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

1. **使用最低權限的安全群組。**僅允許所需的最低傳出流量。盡可能使用特定目的地 CIDR 區塊，而非 0.0.0.0/0。記錄每個安全群組規則的目的。

1. **依環境分隔組態。**為開發、預備和生產建立個別組態。為每個環境使用不同的 VPCs 或子網路。將適當的標籤套用至組織的組態。

1. **實作網路監控。**啟用 VPC 流程日誌以進行安全性分析。針對異常流量模式設定 CloudWatch 警示。定期檢閱 CloudTrail 日誌是否有組態變更。

1. **將 VPC 端點用於 AWS 服務。**設定 Amazon S3、Amazon ECR 和其他 AWS 服務的 VPC 端點。這可降低 NAT Gateway 成本、改善效能，並透過在 AWS 網路中保留流量來提供額外的安全性。

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

1. **規劃網路擴展。**網路輸送量從 10 Gbps 開始，並隨著時間擴展到 100 Gbps。如需立即的高輸送量需求，請事先規劃並請求預熱。監控網路指標以了解您的工作流程需求。

1. **每個可用區域部署 NAT 閘道。**生產工作負載的每個可用區域使用一個 NAT Gateway。這可改善彈性和輸送量，並降低跨可用區域資料傳輸成本。

1. **重複使用組態。**建立可在多個工作流程之間共用的組態。這可減少組態管理開銷，並確保一致的網路設定。

1. **在生產使用之前測試組態。**使用測試工作流程驗證網路連線。驗證安全群組規則是否允許必要的流量。使用多可用區域組態測試容錯移轉案例。

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

1. **使用 VPC 端點而非 NAT Gateway。**對於 AWS 服務存取，請使用 VPC 端點 （不收取資料處理費用）。Amazon S3 Gateway 端點無需額外費用。介面端點有每小時費用，但可能比 NAT Gateway 更具成本效益。

1. **監控資料傳輸成本。**中的資料傳輸不收費。傳出至網際網路的資料會產生標準 AWS 資料傳輸率。跨區域資料傳輸的速率較高。使用 AWS Cost Explorer 追蹤 VPC 相關費用。

1. **適當大小的 NAT Gateway 部署。**針對開發，請為所有 AZs 使用一個 NAT 閘道。對於生產，每個 AZ 使用一個 NAT 閘道以獲得彈性。監控 NAT Gateway 使用率，以避免過度佈建。

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) | 5,000 | 是 | 

若要請求增加配額，請開啟 [Service Quotas 主控台](https://console.aws.amazon.com/servicequotas/home)、選擇**AWS 服務**、搜尋 **AWS HealthOmics**、選取您要增加的配額，然後選擇**請求增加配額**。配額增加請求通常會在 1-2 個工作天內處理。