私有工作流程的 Amazon ECR 中的容器映像 - AWS HealthOmics

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

私有工作流程的 Amazon ECR 中的容器映像

在建立私有工作流程之前,您可以為工作流程建立容器映像。您可以將映像上傳至 Amazon Elastic Container Registry (Amazon ECR) 中的私有映像儲存庫。當您執行工作流程時,HealthOmics 服務會存取您提供的容器。

容器映像 Amazon ECR 儲存庫必須與呼叫 服務的帳戶位於相同的 AWS 區域。只要來源映像儲存庫提供適當的許可,不同的 AWS 帳戶 就可以擁有容器映像。如需詳細資訊,請參閱共用工作流程的 Amazon Elastic Container Registry 儲存庫政策

建議您將 Amazon ECR 容器映像 URIs定義為工作流程中的參數,以便在執行開始之前驗證存取權。變更區域參數也可讓您更輕鬆地在新區域中執行工作流程。

注意

HealthOmics 不支援 ARM 容器,也不支援存取公有儲存庫。

如需設定 HealthOmics 存取 Amazon ECR 的 IAM 許可的詳細資訊,請參閱 資源許可

Amazon ECR 容器映像的一般考量

  • 架構

    HealthOmics 支援 x86_64 容器。如果您的本機機器以 ARM 為基礎,例如 Apple Mac),請使用如下所示的命令來建置 x86_64 容器映像:

    docker build --platform amd64 -t my_tool:latest .
  • 進入點和 shell

    HealthOmics 工作流程引擎會將 bash 指令碼做為命令覆寫注入工作流程任務所使用的容器映像。因此,應該在沒有指定 ENTRYPOINT 的情況下建置容器映像,使得 bash shell 為預設值。

  • 掛載路徑

    共用檔案系統掛載到位於 /tmp 的容器任務。此位置的容器映像內建的任何資料或工具都會遭到覆寫。

    透過位於 /mnt/workflow 的唯讀掛載,工作流程定義可供任務使用。

  • 映像大小

    如需容器映像大小上限HealthOmics 工作流程固定大小配額,請參閱 。

HealthOmics 工作流程的環境變數

HealthOmics 提供環境變數,其中包含容器中執行之工作流程的相關資訊。您可以在工作流程任務的邏輯中使用這些變數的值。

所有 HealthOmics 工作流程變數都以 AWS_WORKFLOW_字首開頭。此字首是受保護的環境變數字首。請勿在工作流程容器中將此字首用於您自己的變數。

HealthOmics 提供下列工作流程環境變數:

AWS_REGION

此變數是容器執行所在的區域。

AWS_WORKFLOW_RUN

此變數是目前執行的名稱。

AWS_WORKFLOW_RUN_ID

此變數是目前執行的執行識別符。

AWS_WORKFLOW_RUN_UUID

此變數是目前執行的執行 UUID。

AWS_WORKFLOW_TASK

此變數是目前任務的名稱。

AWS_WORKFLOW_TASK_ID

此變數是目前任務的任務識別符。

AWS_WORKFLOW_TASK_UUID

此變數是目前任務的任務 UUID。

下列範例顯示每個環境變數的典型值:

AWS Region: us-east-1 Workflow Run: arn:aws:omics:us-east-1:123456789012:run/6470304 Workflow Run ID: 6470304 Workflow Run UUID: f4d9ed47-192e-760e-f3a8-13afedbd4937 Workflow Task: arn:aws:omics:us-east-1:123456789012:task/4192063 Workflow Task ID: 4192063 Workflow Task UUID: f0c9ed49-652c-4a38-7646-60ad835e0a2e

在 Amazon ECR 容器映像中使用 Java

如果工作流程任務使用 Java 應用程式,例如 GATK,請考慮容器的下列記憶體需求:

  • Java 應用程式使用堆疊記憶體和堆積記憶體。根據預設,堆積記憶體上限是容器中可用記憶體總數的百分比。此預設值取決於特定的 JVM 分佈和 JVM 版本,因此請參閱 JVM 的相關文件,或使用 Java 命令列選項 (例如 `-Xmx`) 明確設定堆積記憶體上限。

  • 請勿將堆積記憶體上限設定為容器記憶體配置的 100%,因為 JVM 堆疊也需要記憶體。JVM 垃圾收集器和容器內執行的任何其他作業系統程序也需要記憶體。

  • 有些 Java 應用程式,例如 GATK,可以使用原生方法叫用或其他最佳化,例如記憶體映射檔案。這些技術需要執行「關閉堆積」的記憶體配置,這些配置不受 JVM 最大堆積參數控制。

    如果您知道 (或懷疑) Java 應用程式配置堆積外記憶體,請確定任務記憶體配置包含堆積外記憶體需求。

    如果這些堆積外配置導致容器記憶體不足,您通常不會看到 Java OutOfMemory錯誤,因為 JVM 無法控制此記憶體。

將任務輸入新增至 ECR 容器映像

將執行工作流程任務所需的所有可執行檔、程式庫和指令碼新增至用於執行任務的 Amazon ECR 映像。

最佳實務是避免使用任務容器映像外部的指令碼、二進位檔和程式庫。這在使用將bin目錄做為nf-core工作流程套件一部分的工作流程時特別重要。雖然此目錄可供工作流程任務使用,但會掛載為唯讀目錄。此目錄中的必要資源應複製到任務映像中,並在執行時間或建置用於任務的容器映像時提供。

HealthOmics 工作流程固定大小配額 如需 HealthOmics 支援的容器映像大小上限,請參閱 。