

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

# 使用執行快取
<a name="workflow-cache-startrun"></a>

根據預設，執行不會使用執行快取。若要使用執行的快取，請在開始執行時指定執行快取和執行快取行為。

執行完成後，您可以使用 主控台、CloudWatch Logs 或 API 操作來追蹤快取命中或疑難排解快取問題。如需詳細資訊，請參閱 [追蹤呼叫快取資訊](#workflow-cache-track) 和 [對呼叫快取問題進行故障診斷](troubleshooting.md#workflow-cache-troubleshooting)。

如果執行中的一或多個任務產生非確定性輸出，強烈建議您不要將呼叫快取用於執行，或選擇退出這些特定任務。如需詳細資訊，請參閱[共同責任模型](how-run-cache.md#run-cache-srm)。



**注意**  
您在開始執行時提供 IAM 服務角色。若要使用呼叫快取，服務角色需要存取執行快取 Amazon S3 位置的許可。如需詳細資訊，請參閱[的服務角色 AWS HealthOmics](permissions-service.md)。

您可以使用 [Amazon Q CLI](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/what-is.html) 來分析和管理執行快取資料。如需詳細資訊，請參閱 GitHub [上 Amazon Q CLI 的範例提示](getting-started.md#omics-q-prompts)和 [HealthOmics Agentic 生成式 AI 教學](https://github.com/aws-samples/aws-healthomics-tutorials/tree/main/generative-ai)課程。

**Topics**
+ [使用主控台設定具有執行快取的執行](#workflow-cache-startrun-console)
+ [使用 CLI 設定具有執行快取的執行](#workflow-cache-startrun-api)
+ [執行快取的錯誤案例](#workflow-cache-errors)
+ [追蹤呼叫快取資訊](#workflow-cache-track)

## 使用主控台設定具有執行快取的執行
<a name="workflow-cache-startrun-console"></a>

從 主控台，您可以在開始執行時設定執行的執行快取。

1. 開啟 [HealthOmics 主控台](https://console.aws.amazon.com/omics/)。

1.  如有需要，請開啟左側導覽窗格 (≡)。選擇**執行**。

1. 在**執行**頁面上，選擇要開始的執行。

1. 選擇**開始執行**並完成**開始執行**的步驟 1 和 2，如中所述[使用主控台啟動執行](starting-a-run.md#starting-a-run-console)。

1. 在**啟動執行**的步驟 3 中，選擇**選取現有的執行快取**。

1. 從**執行快取 ID 下拉式清單中選取快取**。

1. 若要覆寫預設的執行快取行為，請選擇執行的**快取行為**。如需詳細資訊，請參閱[執行快取行為](how-run-cache.md#run-cache-behavior)。

1. 繼續執行**開始執行**的步驟 4。

## 使用 CLI 設定具有執行快取的執行
<a name="workflow-cache-startrun-api"></a>

若要啟動使用執行快取的執行，請將 cache-id 參數新增至 **start-run** CLI 命令。或者，使用 `cache-behavior` 參數覆寫您為執行快取設定的預設行為。下列範例僅顯示 命令的快取欄位：

```
aws omics start-run \
        ...  
      --cache-id "xxxxxx"    \
      --cache-behavior  CACHE_ALWAYS
```

如果操作成功，您會收到沒有資料欄位的回應。

## 執行快取的錯誤案例
<a name="workflow-cache-errors"></a>

針對下列案例，HealthOmics 可能不會快取任務輸出，即使執行快取行為設為**一律快取**。
+ 如果執行在第一個任務成功完成之前遇到錯誤，則沒有要匯出的快取輸出。
+ 如果匯出程序失敗，HealthOmics 不會將任務輸出儲存到 Amazon S3 快取位置。
+ 如果執行因**filesystem out of space**錯誤而失敗，呼叫快取不會儲存任何任務輸出。
+ 如果您取消執行，呼叫快取不會儲存任何任務輸出。
+ 如果執行遇到執行逾時，呼叫快取不會儲存任何任務輸出，即使您將執行設定為在失敗時使用快取。

## 追蹤呼叫快取資訊
<a name="workflow-cache-track"></a>

您可以使用主控台、CLI 或 CloudWatch Logs 追蹤呼叫快取事件 （例如執行快取命中）。

**Topics**
+ [使用主控台追蹤快取命中](#workflow-cache-track-console)
+ [使用 CLI 追蹤呼叫快取](#workflow-cache-track-cli)
+ [使用 CloudWatch Logs 追蹤呼叫快取](#workflow-cache-track-cwl)

### 使用主控台追蹤快取命中
<a name="workflow-cache-track-console"></a>

在執行的執行詳細資訊頁面中，**執行任務**資料表會顯示每個任務的**快取命中**資訊。資料表也包含關聯快取項目的連結。使用下列程序來檢視執行的快取命中資訊。

1. 開啟 [HealthOmics 主控台](https://console.aws.amazon.com/omics/)。

1.  如有需要，請開啟左側導覽窗格 (≡)。選擇**執行**。

1. 在**執行**頁面上，選擇要檢查的執行。

1. 在執行詳細資訊頁面上，選擇**執行任務**索引標籤以顯示任務資料表。

1. 如果任務發生快取命中，**快取命中**資料欄會包含 Amazon S3 中執行快取項目位置的連結。

1. 選擇連結以檢查執行快取項目。

### 使用 CLI 追蹤呼叫快取
<a name="workflow-cache-track-cli"></a>

使用 **get-run** CLI 命令確認執行是否使用呼叫快取。

```
 aws omics get-run --id 1234567  
```

在回應中，如果已設定 `cacheId` 欄位，則執行會使用該快取。

使用 **list-run-tasks** CLI 命令，擷取執行中每個快取任務的快取資料位置。

```
 aws omics list-run-tasks --id 1234567  
```

在回應中，如果任務的 cacheHit 欄位為 true，cacheS3Uri 欄位會提供該任務的快取資料位置。

您也可以使用 **get-run-task** CLI 命令來擷取特定任務的快取資料位置：

```
 aws omics get-run-task --id 1234567 --task-id <task_id> 
```

### 使用 CloudWatch Logs 追蹤呼叫快取
<a name="workflow-cache-track-cwl"></a>

HealthOmics 會在 `/aws/omics/WorkflowLog` CloudWatch 日誌群組中建立快取活動日誌。每個執行快取都有一個日誌串流：**runCache/<cache\$1id>/<cache\$1uuid>**。

對於使用呼叫快取的執行，HealthOmics 會為這些事件產生 CloudWatch Logs 項目：
+  建立快取項目 (CACHE\$1ENTRY\$1CREATED)
+  符合快取項目 (CACHE\$1HIT) 
+  不符合快取項目 (CACHE\$1MISS)

如需這些日誌的詳細資訊，請參閱 [CloudWatch 中的日誌](monitoring-cloudwatch-logs.md#cloudwatch-logs)。

在`/aws/omics/WorkflowLog`日誌群組上使用下列 CloudWatch Insights 查詢，傳回此快取每次執行的快取命中次數：

```
filter @logStream like 'runCache/<CACHE_ID>/'
 fields @timestamp, @message
 filter logMessage like 'CACHE_HIT'
 parse "run: *," as run
 stats count(*) as cacheHits by run
```

使用下列查詢傳回每次執行所建立的快取項目數量：

```
filter @logStream like 'runCache/<CACHE_ID>/'
 fields @timestamp, @message
 filter logMessage like 'CACHE_ENTRY_CREATED'
 parse "run: *," as run
 stats count(*) as cacheEntries by run
```