

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

# HealthOmics 執行的呼叫快取
<a name="workflows-call-caching"></a>

AWS HealthOmics 支援私有工作流程的呼叫快取，也稱為繼續。呼叫快取會在執行完成後儲存已完成工作流程任務的輸出。後續執行可以使用快取中的任務輸出，而不是再次計算任務輸出。呼叫快取可減少運算資源用量，進而縮短執行持續時間並節省運算成本。

您可以在執行完成後存取快取的任務輸出檔案。若要執行進階任務偵錯和疑難排解，您可以在工作流程定義中將這些檔案指定為任務輸出，以快取中繼任務檔案。

您可以使用呼叫快取來儲存失敗執行的已完成任務結果。下一次執行會從上次成功完成的任務開始，而不是再次計算已完成的任務。

如果 HealthOmics 找不到任務的相符快取項目，則執行不會失敗。HealthOmics 會重新計算任務及其相依任務。

如需疑難排解呼叫快取問題的資訊，請參閱 [對呼叫快取問題進行故障診斷](troubleshooting.md#workflow-cache-troubleshooting)。

**Topics**
+ [呼叫快取的運作方式](how-run-cache.md)
+ [建立執行快取](workflow-cache-create.md)
+ [更新執行快取](workflow-cache-update.md)
+ [刪除執行快取](workflow-cache-delete.md)
+ [執行快取的內容](workflow-cache-contents.md)
+ [引擎特定的快取功能](workflow-cache-per-engine.md)
+ [使用執行快取](workflow-cache-startrun.md)

# 呼叫快取的運作方式
<a name="how-run-cache"></a>

若要使用呼叫快取，您可以建立執行快取，並將其設定為具有快取資料的關聯 Amazon S3 位置。當您開始執行時，您可以指定執行快取。執行快取不專用於一個工作流程。從多個工作流程執行的 可以使用相同的快取。

在執行的匯出階段，系統會將完成的任務輸出匯出至 Amazon S3 位置。若要匯出中繼任務檔案，請在工作流程定義中將這些檔案宣告為任務輸出。呼叫快取也會在內部儲存中繼資料，並為每個快取項目建立唯一的雜湊。

對於執行中的每個任務，工作流程引擎會偵測此任務是否有相符的快取項目。如果沒有相符的快取項目，HealthOmics 會計算任務。如果有相符的快取項目，引擎會擷取快取的結果。

為了符合快取項目，HealthOmics 使用原生工作流程引擎中包含的雜湊機制。HealthOmics 延伸這些現有的雜湊實作，以考量 HealthOmics 變數，例如 S3 eTags 和 ECR 容器摘要。

HealthOmics 支援這些工作流程語言版本的呼叫快取：
+ WDL 1.0、1.1 版和開發版本
+ Nextflow 23.10 版及更新版本
+ 所有 CWL 版本

**注意**  
HealthOmics 不支援 Ready2Run 工作流程的呼叫快取。

**Topics**
+ [共同責任模型](#run-cache-srm)
+ [任務的快取需求](#workflow-cache-task-prereqs)
+ [執行快取效能](#run-cache-performance)
+ [快取資料保留和失效事件](#workflow-cache-data)

## 共同責任模型
<a name="run-cache-srm"></a>

使用者和 之間的共同責任 AWS 是判斷任務和執行是否為呼叫快取的良好候選者。當所有任務都是等冪時，呼叫快取會獲得最佳結果 （使用相同輸入重複執行任務會產生相同的結果）。

不過，如果任務包含非確定性元素 （例如隨機數產生或系統時間），則使用相同輸入重複執行任務可能會導致不同的輸出。這可能會以下列方式影響呼叫快取的有效性：
+ 如果 HealthOmics 使用的快取項目 （由先前的執行所建立） 與任務執行為目前執行所產生的輸出不同，則執行可能會產生與相同執行不同的結果，而沒有快取。
+ HealthOmics 可能會因為非確定性任務輸出，而找不到應相符任務的相符快取項目。如果找不到有效的快取項目，則執行會重新計算任務，進而降低使用呼叫快取的成本節省效益。

以下是可能導致影響呼叫快取結果之非確定性結果的已知任務行為：
+ 使用隨機數字產生器。
+ 取決於系統時間。
+ 使用並行 (race-conditions 可能會導致輸出變異）。
+ 擷取超出任務輸入參數中指定範圍的本機或遠端檔案。

如需可能導致非確定性行為的其他案例，請參閱 Nextflow 文件網站上的[非確定性程序輸入](https://www.nextflow.io/docs/latest/cache-and-resume.html#non-deterministic-process-inputs)。

如果您懷疑任務產生非確定性的輸出，請考慮使用工作流程引擎功能，以避免快取非確定性的特定任務。如需如何針對每個支援的工作流程語言中的個別任務選擇退出快取的說明，請參閱 [引擎特定的快取功能](workflow-cache-per-engine.md)。

我們建議您先徹底檢閱特定工作流程和任務需求，再在任何呼叫快取無效或輸出不如預期的環境中啟用呼叫快取，以免產生風險。例如，在判斷呼叫快取是否適合臨床使用案例時，應仔細考慮呼叫快取的潛在限制。

## 任務的快取需求
<a name="workflow-cache-task-prereqs"></a>

HealthOmics 會針對符合下列要求的任務快取任務輸出：
+ 任務必須定義容器。HealthOmics 不會快取沒有容器之任務的輸出。
+ 任務必須產生一或多個輸出。您可以在工作流程定義中指定任務輸出。
+ 工作流程定義不得使用動態值。例如，如果您將參數傳遞至具有每次執行遞增值的任務，HealthOmics 不會快取任務輸出。

**注意**  
如果執行中的多個任務使用相同的容器映像，HealthOmics 會為所有這些任務提供相同的映像版本。HealthOmics 提取映像後，會在執行期間忽略容器映像的任何更新。此方法提供可預測且一致的體驗，並防止因中期部署的容器映像更新而產生的潛在問題。

## 執行快取效能
<a name="run-cache-performance"></a>

當您開啟執行的呼叫快取時，您可能會注意到下列對執行效能的影響：
+ 在第一次執行期間，HealthOmics 會儲存執行中任務的快取資料。此執行的匯出時間可能較長，因為呼叫快取會增加匯出資料的數量。
+ 在後續執行中，從快取恢復執行時，可能會縮短處理步驟的數量並縮短執行時間。
+  如果您也選擇將中繼檔案宣告為輸出，則匯出時間可能會更長，因為這些資料可能更為詳細。

## 快取資料保留和失效事件
<a name="workflow-cache-data"></a>

執行快取的主要目的是最佳化執行中任務的運算。如果任務有有效的相符快取項目，HealthOmics 會使用快取項目，而不是重新計算任務。否則，HealthOmics 會還原為預設服務行為，也就是重新計算任務及其相依任務。透過使用此方法，快取遺漏不會導致執行失敗。

我們建議您管理執行快取大小。隨著時間的推移，由於工作流程引擎或 HealthOmics 服務更新，或是您在執行或執行任務中所做的變更，快取項目可能不再有效。下列各節提供其他詳細資訊。

**Topics**
+ [資訊清單版本更新和資料新鮮度](#workflow-cache-data-versions)
+ [執行快取行為](#run-cache-behavior)
+ [控制執行快取大小](#workflow-cache-manage)

### 資訊清單版本更新和資料新鮮度
<a name="workflow-cache-data-versions"></a>

HealthOmics 服務可能會定期引入新功能或工作流程引擎更新，使部分或全部執行快取項目失效。在這種情況下，您的執行可能會遇到一次性快取遺漏。

HealthOmics 會為每個快取項目建立 [JSON 資訊清單檔案](workflow-cache-contents.md)。對於 2025 年 2 月 12 日之後開始的執行，資訊清單檔案包含版本參數。如果服務更新使任何快取項目失效，HealthOmics 會遞增版本編號，讓您可以識別要移除的舊版快取項目。

下列範例顯示 版本設定為 2 的資訊清單檔案：

```
{
     "arn": "arn:aws:omics:us-west-2:12345678901:runCache/0123456/cacheEntry/1234567-195f-3921-a1fa-ffffcef0a6a4",
     "s3uri": "s3://example/1234567-d0d1-e230-d599-10f1539f4a32/1348677/4795326/7e8c69b1-145f-3991-a1fa-ffffcef0a6a4",
     "taskArn": "arn:aws:omics:us-west-2:12345678901:task/4567891",
     "workDir": "/mnt/workflow/1234567-d0d1-e230-d599-10f1539f4a32/workdir/call-TxtFileCopyTask/5w6tn5feyga7noasjuecdeoqpkltrfo3/wxz2fuddlo6hc4uh5s2lreaayczduxdm",
     "files": [
         {
             "name": "output_txt_file",
             "path": "out/output_txt_file/outfile.txt",
             "etag": "ajdhyg9736b9654673b9fbb486753bc8"
         }
     ],
     "nextflowContext": {},
     "otherOutputs": {},
     "version": 2,       
  }
```

對於具有不再有效的快取項目的執行，請重建快取以建立新的有效項目。每次執行時，請執行下列步驟：

1. 在快取保留設定為 CACHE ALWAYS 的情況下啟動一次執行。此執行會建立新的快取項目。

1. 對於後續執行，請將快取保留設定為其先前的設定 （一律為 CACHE 或 CACHE ON FAILURE)。

若要清除不再有效的快取項目，您可以從快取 Amazon S3 儲存貯體中刪除這些快取項目。HealthOmics 永遠不會重複使用這些快取項目。如果您選擇保留無效的項目，則不會影響執行。

**注意**  
呼叫快取會將任務輸出資料儲存在為快取指定的 Amazon S3 位置，這會對您的 產生費用 AWS 帳戶。

### 執行快取行為
<a name="run-cache-behavior"></a>

您可以設定執行快取行為，為失敗的執行 （失敗時的快取） 或所有執行 （一律快取） 儲存任務輸出。建立執行快取時，您可以為使用此快取的所有執行設定預設快取行為。您可以在開始執行時覆寫預設行為。

**Cache on failure** 如果您要偵錯在數個任務成功完成後失敗的工作流程，則 很有用。如果雜湊考慮的所有唯一變數與先前執行相同，則後續執行會從上次成功完成的任務繼續。

**Cache always** 如果您在成功完成的工作流程中更新任務， 會很有用。我們建議您遵循下列步驟：

1. 建立新的執行。將**快取行為**設定為**一律快取**，然後開始執行。

1. 執行完成後，請更新工作流程中的任務，並**一律**以行為集快取啟動新的執行。此執行會處理更新的任務，以及任何與更新任務相依的後續任務。所有其他任務都會使用快取的結果。

1. 視需要重複步驟 2，直到更新任務的開發完成為止。

1. 視需要在未來執行時使用更新的任務。如果您計劃在這些執行中使用新的或不同的輸入，請記得在**失敗時切換後續執行至快取**。

**注意**  
我們建議在使用相同測試資料集時**一律快取**模式，但不適用於一批執行。如果您為大量執行設定此模式，系統可以將大量資料匯出至 Amazon S3，進而增加匯出時間和儲存成本。

### 控制執行快取大小
<a name="workflow-cache-manage"></a>

HealthOmics 不會刪除或自動封存任何執行快取資料，也不會套用 Amazon S3 清除規則來管理快取資料。我們建議您執行定期快取清除，以節省 Amazon S3 儲存成本，並保持您的執行快取大小可管理。您可以直接刪除檔案，或在執行快取儲存貯體上設定資料保留/複寫政策。

例如，您可以將 Amazon S3 生命週期政策設定為在 90 天後使物件過期，也可以在每個開發專案結束時手動清除快取資料。

下列資訊可協助您管理快取資料大小：
+ 您可以檢查 Amazon S3 來檢視快取中有多少資料。HealthOmics 不會監控或報告快取大小。
+ 如果您刪除有效的快取項目，後續執行不會失敗。HealthOmics 會重新計算任務及其相依任務。
+ 如果您修改快取名稱或目錄結構，讓 HealthOmics 找不到任務的相符項目，HealthOmics 會重新計算任務。

如果您需要檢查快取項目是否仍然有效，請檢查快取資訊清單版本號碼。如需詳細資訊，請參閱[資訊清單版本更新和資料新鮮度](#workflow-cache-data-versions)。

# 建立執行快取
<a name="workflow-cache-create"></a>

當您建立執行快取時，您可以指定快取資料的 Amazon S3 位置。此資料必須可立即存取。呼叫快取不會擷取 Glacier 中封存的物件 （例如 GFR 和 GDA 儲存類別）。

如果快取資料的 Amazon S3 儲存貯體由另一個儲存貯體擁有 AWS 帳戶，請在建立執行快取時提供該帳戶 ID。

## 使用主控台建立執行快取
<a name="workflow-cache-create-console"></a>

從 主控台，依照下列步驟建立執行快取。

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

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

1. 在**執行快取**頁面中，選擇**建立執行快取**。

1. 在**建立執行****快取頁面的執行快取詳細資訊**面板中，設定下列欄位：

   1. 輸入執行快取的名稱。

   1. (選用) 輸入描述。

   1. 輸入快取輸出的 S3 位置。選擇與工作流程位於相同區域的儲存貯體。

   1. （選用） 輸入儲存貯體擁有者 AWS 帳戶 的 ，以驗證儲存貯體擁有權。如果您未輸入值，預設值為您的帳戶 ID。

   1. 在**快取行為**下，設定預設行為 （是針對失敗的執行或所有執行快取輸出）。當您開始執行時，您可以選擇覆寫預設行為。

1. （選用） 將一或多個標籤與執行快取建立關聯。

1. 選擇**建立執行快取**。主控台會在執行快取資料表中顯示新的**執行快取**。

## 使用 CLI 建立執行快取
<a name="workflow-cache-create-api"></a>

使用 **create-run-cache** CLI 命令來建立執行快取。預設快取行為為 `CACHE_ON_FAILURE`。

```
aws omics create-run-cache \
      --name "workflow 123 run cache" \
      --description "my run cache" \
      --cache-s3-location "s3://amzn-s3-demo-bucket" \ 
      --cache-behavior "CACHE_ALWAYS"                \
      --cache-bucket-owner-id  "111122223333"
```

如果建立成功，您會收到包含下列欄位的回應。

```
{
  "arn": "string",
  "id": "string",
  "status": "ACTIVE"
  "tags": {}
  }
```

# 更新執行快取
<a name="workflow-cache-update"></a>

您可以變更快取名稱、描述、標籤或快取行為，但不能變更快取的 S3 位置。

## 使用主控台更新執行快取
<a name="workflow-cache-update-console"></a>

從 主控台，依照下列步驟更新執行快取。

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

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

1. 從**執行快取**資料表中，選擇要更新的執行快取，然後選擇**編輯**。

1. 在**執行快取詳細資訊**面板中，您可以更新執行快取名稱、描述和快取行為欄位。

1. （選用） 將一或多個新標籤與執行快取建立關聯，或移除現有的標籤。

1. 選擇**儲存執行快取**。

## 使用 CLI 更新執行快取
<a name="workflow-cache-update-api"></a>

使用 **update-run-cache** CLI 命令來更新執行快取。

```
aws omics update-run-cache \
      --name "workflow 123 run cache" \
      --id "workflow id" \
      --description "my run cache" \
      --cache-behavior "CACHE_ALWAYS"
```

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

# 刪除執行快取
<a name="workflow-cache-delete"></a>

如果沒有作用中的執行正在使用，您可以刪除執行快取。如果有任何執行正在使用執行快取，請等待執行完成，否則您可以取消執行。

刪除執行快取會移除資源及其中繼資料，但不會刪除 Amazon S3 中的資料。刪除快取後，您無法重新連接快取，也無法將其用於後續執行。

快取的資料會保留在 Amazon S3 中供您檢查。您可以使用標準 S3 **Delete**操作移除舊快取資料。或者，建立 Amazon S3 生命週期政策，讓不再使用的快取資料過期。

## 使用主控台刪除執行快取
<a name="workflow-cache-delete-console"></a>

從 主控台，依照下列步驟刪除執行快取。

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

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

1. 從**執行快取**資料表中，選擇要刪除的執行快取。

1. 從**執行快取**資料表功能表中，選擇**刪除**。

1. 從模態對話方塊中，儲存 Amazon S3 快取資料連結以供日後參考，然後確認要刪除執行快取。

    您可以使用 Amazon S3 連結來檢查快取的資料，但無法將資料重新連結到另一個執行快取。當您完成檢查時，請刪除快取資料。

## 使用 CLI 刪除執行快取
<a name="workflow-cache-delete-api"></a>

使用 **delete-run-cache** CLI 命令來刪除執行快取。

```
aws omics delete-run-cache \
      --id "my cache id"
```

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

# 執行快取的內容
<a name="workflow-cache-contents"></a>

HealthOmics 會使用 S3 儲存貯體中的下列結構來組織您的執行快取：

```
s3://{cache.S3location}/{cache.uuid}/runID/taskID/{cacheentry.uuid}/
```

cache.uuid 是快取的全域唯一 ID。cacheentry.uuid 是快取任務的全域唯一 uuid。HealthOmics 會將 uuids 指派給快取和任務。

對於所有工作流程引擎，快取包含下列檔案：
+ **\$1cacheentryuuid\$1.json** 檔案 – HealthOmics 會建立此資訊清單檔案，其中包含快取的相關資訊，包括快取中的所有項目清單，以及[快取版本](how-run-cache.md#workflow-cache-data-versions)。
+ 任務輸出檔案 – 每個任務輸出包含一或多個檔案，如任務所定義。

對於使用 Nextflow 的工作流程，Nextflow 引擎會在快取中建立這些額外的檔案：
+ **command.out** 檔案 – 此檔案包含任務執行 stdout 內容。
+ **.exitcode** 檔案 – 此檔案包含任務結束碼 （整數）。

**注意**  
如果您想要存取執行快取中的中繼任務檔案以進行進階故障診斷，請在工作流程定義中將這些檔案宣告為任務輸出。

# 引擎特定的快取功能
<a name="workflow-cache-per-engine"></a>

HealthOmics 會嘗試跨工作流程引擎提供一致的呼叫快取實作。根據每個工作流程引擎處理特定案例的方式，有一些差異：
+ 下一個流程
  + 不保證能夠跨不同的 Nextflow 版本進行快取。如果您在一個 Nextflow 版本上執行任務，然後在不同的 Nextflow 版本上執行相同的任務，HealthOmics 可能會將第二個執行視為快取遺漏。
  + 您可以使用快取**false**指令關閉個別任務的快取。如需此指令的相關資訊，請參閱 Nextflow 規格中的[處理程序](https://www.nextflow.io/docs/latest/process.html#process-cache)。
  + HealthOmics 使用 Nextflow 寬鬆模式，但不支援深度快取模式。
  + 如果您在任務的輸入 S3 路徑中使用 glob 模式，快取會評估每個個別 S3 物件。如果您新增物件，HealthOmics 只會重新計算使用新物件的任務。
  + HealthOmics 不會快取任務重試。此行為與 Nextflow 的預設行為一致。
+ WDL
  + 當您使用 WDL 工作流程的開發版本時，HealthOmics 支援新的輸入「目錄」類型。對於呼叫快取，如果目錄中的任何物件變更，HealthOmics 會重新計算輸入目錄的所有任務。
  + HealthOmics 支援任務層級快取，但不支援工作流程層級快取。
  + 您可以使用 **揮發性**屬性來停用個別任務的快取。如需詳細資訊，請參閱[使用揮發性屬性停用任務層級快取](workflow-languages-wdl.md#workflow-wdl-volatile-attribute)。
+ CWL
  + 來自任務的持續輸出不會從資訊清單中明確顯示。HealthOmics 會將常數輸出快取為中繼檔案。
  + 您可以使用 [WorkReuse](https://www.commonwl.org/v1.1/Workflow.html#WorkReuse) 功能來控制個別任務的快取。

# 使用執行快取
<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)。

您可以使用 [Kiro CLI](https://docs.aws.amazon.com/kiro/latest/userguide/what-is.html) 來分析和管理執行快取資料。如需詳細資訊，請參閱 GitHub 上 [Kiro CLI 的範例提示](getting-started.md#omics-kiro-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
```