教學課程:使用陣列工作索引來控制工作差異 - AWS Batch

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

教學課程:使用陣列工作索引來控制工作差異

本教學課程說明如何使用AWS_BATCH_JOB_ARRAY_INDEX環境變數來區分子工作。每個子工作都會指派給此變數。此範例使用子工作的索引編號來讀取檔案中的特定行。然後,它用作業容器內的命令替換與該行號相關聯的參數。結果是,您可以有多個運行相同的 Docker 映像和命令參數的 AWS Batch 作業。然而,結果是不同的,因為陣列工作索引被用作修飾符。

在此教學課程中,您可以建立一個含有彩虹中所有顏色的文字檔案,每個顏色各為一行。然後,您可以為 Docker 容器建立入口點指令碼,將索引轉換為可用於色彩檔案中行號的值。索引從零開始,但行號從 1 開始。創建一個 Docker 文件,將顏色和索引文件複製到容器映像中,並將圖像設置ENTRYPOINT為入口點腳本。碼頭文件和資源是建立在推送到 Amazon 的 Docker 映像。ECR接著,您可以註冊使用新容器映像檔的工作定義、提交具有該工作定義的 AWS Batch 陣列工作,以及檢視結果。

必要條件

本教學課程具備下列先決條件:

  • 運 AWS Batch 算環境。如需詳細資訊,請參閱建立運算環境

  • AWS Batch 工作佇列和相關聯的計算環境。如需詳細資訊,請參閱建立工作佇列

  • AWS CLI 安裝在您的本機系統上。如需詳細資訊,請參閱《AWS Command Line Interface 使用者指南》中的安裝 AWS Command Line Interface

  • 安裝在本機系統的 Docker。如需詳細資訊,請參閱 Docker 文件中的關於 Docker CE

步驟 1:建立容器映像檔

您可以AWS_BATCH_JOB_ARRAY_INDEX在命令參數的工作定義中使用。不過,我們建議您建立容器映像檔,改為使用入口點指令碼中的變數。本節說明如何建立此類容器映像。

建置 Docker 容器影像
  1. 建立新的目錄做為您的 Docker 影像工作空間,然後瀏覽至該目錄。

  2. colors.txt在您的工作區目錄中建立一個名為的檔案,並將以下內容貼到其中。

    red orange yellow green blue indigo violet
  3. print-color.sh在您的工作區目錄中建立一個名為的檔案,並將以下內容貼到其中。

    注意

    LINE 變數設定為 AWS_BATCH_JOB_ARRAY_INDEX + 1,因為陣列索引起始為 0,但行號從 1 開始。COLOR變數會設定為與其行號相關聯的顏色。colors.txt

    #!/bin/sh LINE=$((AWS_BATCH_JOB_ARRAY_INDEX + 1)) COLOR=$(sed -n ${LINE}p /tmp/colors.txt) echo My favorite color of the rainbow is $COLOR.
  4. Dockerfile在您的工作區目錄中建立一個名為的檔案,並將下列內容貼到其中。此 Dockerfile 會將之前的檔案複製到您的容器,並將進入點指令碼設定為在啟動容器時執行。

    FROM busybox COPY print-color.sh /tmp/print-color.sh COPY colors.txt /tmp/colors.txt RUN chmod +x /tmp/print-color.sh ENTRYPOINT /tmp/print-color.sh
  5. 建置 Docker 映像。

    $ docker build -t print-color .
  6. 使用以下指令碼測試容器。此指令碼會在本機將AWS_BATCH_JOB_ARRAY_INDEX變數設定為 0,然後遞增以模擬具有七個子系的陣列工作。

    $ AWS_BATCH_JOB_ARRAY_INDEX=0 while [ $AWS_BATCH_JOB_ARRAY_INDEX -le 6 ] do docker run -e AWS_BATCH_JOB_ARRAY_INDEX=$AWS_BATCH_JOB_ARRAY_INDEX print-color AWS_BATCH_JOB_ARRAY_INDEX=$((AWS_BATCH_JOB_ARRAY_INDEX + 1)) done

    以下為其輸出。

    My favorite color of the rainbow is red.
    My favorite color of the rainbow is orange.
    My favorite color of the rainbow is yellow.
    My favorite color of the rainbow is green.
    My favorite color of the rainbow is blue.
    My favorite color of the rainbow is indigo.
    My favorite color of the rainbow is violet.

第 2 步:將您的圖像推送到 Amazon ECR

現在,您已經構建並測試了 Docker 容器,請將其推送到映像存儲庫。此範例使用 AmazonECR,但您可以使用其他登錄檔,例如 DockerHub.

  1. 建立 Amazon ECR 映像儲存庫來存放您的容器映像檔。此範例僅使用 AWS CLI,但您也可以使用 AWS Management Console. 如需詳細資訊,請參Amazon 彈性容器登錄使用者指南中的建立儲存庫。

    $ aws ecr create-repository --repository-name print-color
  2. 使用從上一步傳回的 Amazon ECR 儲存庫URI標記您的print-color映像檔。

    $ docker tag print-color aws_account_id.dkr.ecr.region.amazonaws.com/print-color
  3. 登錄到您的 Amazon ECR 註冊表。如需詳細資訊,請參閱《Amazon Elastic Container Registry 使用者指南》中的登錄檔身分驗證

    $ aws ecr get-login-password \ --region region | docker login \ --username AWS \ --password-stdin aws_account_id.dkr.ecr.region.amazonaws.com
  4. 將您的圖像推送到 Amazon ECR。

    $ docker push aws_account_id.dkr.ecr.region.amazonaws.com/print-color

步驟 3:建立並註冊工作定義

現在您的 Docker 映像位於映像登錄中,您可以在 AWS Batch 工作定義中指定它。然後,您可以稍後使用它來運行陣列作業。此範例僅使用 AWS CLI. 不過,您也可以使用 AWS Management Console. 如需詳細資訊,請參閱建立單一節點工作定義

建立任務定義
  1. print-color-job-def.json在您的工作區目錄中建立一個名為的檔案,並將以下內容貼到其中。URI用您自己的映像檔取代映像儲存庫URI。

    { "jobDefinitionName": "print-color", "type": "container", "containerProperties": { "image": "aws_account_id.dkr.ecr.region.amazonaws.com/print-color", "resourceRequirements": [ { "type": "MEMORY", "value": "250" }, { "type": "VCPU", "value": "1" } ] } }
  2. 使用註冊工作定義 AWS Batch。

    $ aws batch register-job-definition --cli-input-json file://print-color-job-def.json

步驟 4:提交 AWS Batch 陣列工作

註冊工作定義後,您可以提交使用新容器映像的 AWS Batch 陣列工作。

若要提交 AWS Batch 陣列工作
  1. print-color-job.json在您的工作區目錄中建立一個名為的檔案,並將以下內容貼到其中。

    注意

    此範例使用本節中提到的工作佇必要條件列。

    { "jobName": "print-color", "jobQueue": "existing-job-queue", "arrayProperties": { "size": 7 }, "jobDefinition": "print-color" }
  2. 將工作提交至工 AWS Batch 作佇列。請注意輸出中傳回的工作 ID。

    $ aws batch submit-job --cli-input-json file://print-color-job.json
  3. 描述任務的狀態並等待任務移至 SUCCEEDED

步驟 5:檢視您的陣列工作記錄

工作達到SUCCEEDED狀態後,您可以從工作的容器檢視 CloudWatch 記錄。

若要在記錄檔中檢視工作的記 CloudWatch 錄
  1. 在開啟 AWS Batch 主控台https://console.aws.amazon.com/batch/

  2. 在左側導覽窗格中,選擇 Jobs (任務)

  3. 對於 Job queue (任務佇列),請選取佇列。

  4. Status (狀態) 區段,選擇 succeeded (已成功)

  5. 若要顯示陣列任務的所有子任務,選取在之前的區段中傳回的任務 ID。

  6. 若要查看任務容器的日誌,選取其中一個子任務,然後選擇 View logs (查看日誌)

    陣列工作容器記錄
  7. 查看其他子任務日誌。每個任務都會傳回不同的彩虹顏色。