aws batch - 使用者指南 · 2020-02-07 · aws batch 使用者指南 aws batch 元件 什麼是...

120
AWS Batch 使用者指南

Upload: others

Post on 28-May-2020

10 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch使用者指南

Page 2: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南

AWS Batch: 使用者指南Copyright © 2020 Amazon Web Services, Inc. and/or its affiliates. All rights reserved.

Amazon's trademarks and trade dress may not be used in connection with any product or service that is not Amazon's,in any manner that is likely to cause confusion among customers, or in any manner that disparages or discreditsAmazon. All other trademarks not owned by Amazon are the property of their respective owners, who may or may notbe affiliated with, connected to, or sponsored by Amazon.

Page 3: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南

Table of Contents什麼是 AWS Batch? .......................................................................................................................... 1

AWS Batch 元件 ........................................................................................................................ 1任務 .................................................................................................................................. 1任務定義 ............................................................................................................................ 1任務佇列 ............................................................................................................................ 1運算環境 ............................................................................................................................ 1

入門 .......................................................................................................................................... 2設定 .................................................................................................................................................. 3

註冊 AWS 帳號: ....................................................................................................................... 3建立 IAM 使用者 ......................................................................................................................... 3為您的運算環境和容器執行個體建立 IAM 角色 ................................................................................. 5建立金鑰對 ................................................................................................................................ 5建立虛擬私有雲端 ....................................................................................................................... 6建立安全群組 ............................................................................................................................. 7安裝 AWS CLI ........................................................................................................................... 7

入門 .................................................................................................................................................. 8步驟 1:定義任務 ....................................................................................................................... 8步驟 2:設定運算環境和任務佇列 .................................................................................................. 9

任務 ................................................................................................................................................ 12提交任務 .................................................................................................................................. 12任務狀態 .................................................................................................................................. 14任務環境變數 ............................................................................................................................ 15自動化任務重試 ......................................................................................................................... 16任務相依性 ............................................................................................................................... 16任務逾時 .................................................................................................................................. 16陣列任務 .................................................................................................................................. 17

陣列任務的任務流程範例 .................................................................................................... 19教學課程:使用陣列任務索引 .............................................................................................. 21

多節點平行任務 ......................................................................................................................... 25環境變數 .......................................................................................................................... 25節點群組 .......................................................................................................................... 25任務生命週期 .................................................................................................................... 26運算環境考量 .................................................................................................................... 26

GPU 任務 ................................................................................................................................ 26任務定義 .......................................................................................................................................... 28

建立任務定義 ............................................................................................................................ 28建立多節點平行任務定義 ............................................................................................................ 30任務定義範本 ............................................................................................................................ 33任務定義參數 ............................................................................................................................ 35

任務定義名稱 .................................................................................................................... 36類型 ................................................................................................................................ 36參數 ................................................................................................................................ 36容器屬性 .......................................................................................................................... 36節點屬性 .......................................................................................................................... 42重試策略 .......................................................................................................................... 43逾時 ................................................................................................................................ 43

任務定義範例 ............................................................................................................................ 44使用環境變數 .................................................................................................................... 44使用替換參數 .................................................................................................................... 44測試 GPU 功能 ................................................................................................................. 45多節點平行任務 ................................................................................................................. 45

任務佇列 .......................................................................................................................................... 47建立一個任務佇列 ...................................................................................................................... 47

任務佇列範本 .................................................................................................................... 47

iii

Page 4: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南

任務佇列參數 ............................................................................................................................ 48任務佇列名稱 .................................................................................................................... 48狀態 ................................................................................................................................ 48優先順序 .......................................................................................................................... 48運算環境順序 .................................................................................................................... 48

任務排程 .......................................................................................................................................... 50運算環境 .......................................................................................................................................... 51

受管運算環境 ............................................................................................................................ 51未受管運算環境 ......................................................................................................................... 52運算資源 AMI ........................................................................................................................... 52

運算資源 AMI 規格 ............................................................................................................ 52建立運算資源 AMI ............................................................................................................. 53使用 GPU 工作負載 AMI .................................................................................................... 55

啟動範本支援 ............................................................................................................................ 58啟動範本中的 Amazon EC2 使用者資料 ................................................................................ 59

建立運算環境 ............................................................................................................................ 62運算環境範本 .................................................................................................................... 65

運算環境參數 ............................................................................................................................ 65運算環境名稱 .................................................................................................................... 66類型 ................................................................................................................................ 66狀態 ................................................................................................................................ 66運算資源 .......................................................................................................................... 66服務角色 .......................................................................................................................... 70

配置策略 .................................................................................................................................. 70記憶體管理 ............................................................................................................................... 70

預留系統記憶體 ................................................................................................................. 71檢視 記憶體 ...................................................................................................................... 71

Elastic Fabric Adapter ....................................................................................................................... 72IAM 政策、角色和許可 ....................................................................................................................... 74

政策結構 .................................................................................................................................. 74政策語法 .......................................................................................................................... 74AWS Batch 動作 ............................................................................................................... 75AWS Batch 的 Amazon Resource Name .............................................................................. 75測試許可 .......................................................................................................................... 76

支援的資源層級許可 .................................................................................................................. 76範例政策 .................................................................................................................................. 77

唯讀存取 .......................................................................................................................... 77限制使用者、影像、權限、角色 ........................................................................................... 78限制任務定義 .................................................................................................................... 79限制任務佇列 .................................................................................................................... 79

AWS Batch 受管政策 ................................................................................................................. 80AWSBatchFullAccess ........................................................................................................ 80

建立 IAM 政策 .......................................................................................................................... 81AWS Batch 服務 IAM 角色 ......................................................................................................... 81Amazon ECS 執行個體角色 ........................................................................................................ 84Amazon EC2 Spot Fleet 角色 ..................................................................................................... 84

在 AWS Management Console 中建立 Amazon EC2 Spot Fleet 角色 ........................................ 84使用 Amazon EC2 建立 AWS CLI Spot Fleet 角色 ................................................................. 85

CloudWatch Events IAM 角色 ..................................................................................................... 86CloudWatch Events ........................................................................................................................... 87

AWS Batch 事件 ....................................................................................................................... 87任務狀態變更事件 .............................................................................................................. 87

以 AWS Batch 任務做為 CloudWatch Events 目標 ......................................................................... 88建立排程的任務 ................................................................................................................. 89事件輸入轉換器 ................................................................................................................. 89

教學:接聽 AWS Batch CloudWatch Events ................................................................................. 91先決條件 .......................................................................................................................... 91

iv

Page 5: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南

步驟 1:建立 Lambda 函數 ................................................................................................ 91步驟 2:註冊事件規則 ........................................................................................................ 91步驟 3:測試組態 .............................................................................................................. 92

教學課程:傳送 Amazon Simple Notification Service 提醒,表示任務事件失敗 .................................... 92先決條件 .......................................................................................................................... 92步驟 1:建立並訂閱 Amazon SNS 主題 ................................................................................ 92步驟 2:註冊事件規則 ........................................................................................................ 93步驟 3:測試您的規則 ........................................................................................................ 93

CloudTrail ........................................................................................................................................ 95CloudTrail 中的 AWS Batch 資訊 ................................................................................................ 95了解 AWS Batch 日誌檔項目 ...................................................................................................... 95

教學:建立 VPC ............................................................................................................................... 98步驟 1:為 NAT 閘道建立彈性 IP 地址 ......................................................................................... 98步驟 2:執行 VPC 精靈 ............................................................................................................. 98步驟 3:建立其他子網路 ............................................................................................................. 99後續步驟 .................................................................................................................................. 99

安全性 ........................................................................................................................................... 100Identity and Access Management .............................................................................................. 100

對象 .............................................................................................................................. 100使用身分來驗證 ............................................................................................................... 101使用政策管理存取權 ......................................................................................................... 102AWS Batch 如何搭配 IAM 運作 ......................................................................................... 103身分型政策範例 ............................................................................................................... 106故障診斷 ........................................................................................................................ 107

合規驗證 ................................................................................................................................ 109基礎設施安全 .......................................................................................................................... 109

Service Limits ................................................................................................................................. 110故障診斷 ........................................................................................................................................ 111

INVALID 運算環境 .................................................................................................................. 111不正確的角色名稱或 ARN ................................................................................................. 111修復 INVALID 的運算環境 ................................................................................................ 112

任務停留在 RUNNABLE 狀態 ...................................................................................................... 112建立時未標籤 Spot 執行個體 ..................................................................................................... 113

文件歷史記錄 .................................................................................................................................. 114

v

Page 6: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南AWS Batch 元件

什麼是 AWS Batch?AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存取大量的運算資源,AWS Batch 使用起來與傳統的批次運算軟體類似,但對於所需的基礎設施,免除了各種固定繁複的設定及管理工作。這項服務可以快速佈建資源,回應提交的任務,以便消除容量限制,降低運算成本,進而加快結果產生。

AWS Batch 做為完整受管的服務,可讓您執行任何規模的批次運算工作負載。AWS Batch 會自動依需要配送運算資源,並根據工作負載的數量及規模將工作負載分配最佳化。透過 AWS Batch,您不需要安裝或管理批次運算軟體,這讓您有更多精力專注在分析結果和解決問題。

AWS Batch 元件AWS Batch 是一種區域服務,可在一個區域中跨多個可用區域簡化執行批次任務。您可以在新的或現有的VPC 中建立 AWS Batch 運算環境。在運算環境設置完畢並與任務佇列關聯後,您可以定義任務定義,即指定由哪個 Docker 容器映像來執行您的任務。容器映像是從容器登錄檔儲存和提取,可能來自您的 AWS 基礎設施的內部或外部。

任務您提交到 AWS Batch 的工作單位 (如 shell 指令碼、Linux 可執行檔,或 Docker 容器映像)。其具有名稱,而且會在您的運算環境中以容器化的應用程式在 Amazon EC2 執行個體上執行,使用您在任務定義中指定的參數。任務可以透過名稱或 ID 來參照其他任務,且可能取決於其他任務是否順利完成。如需更多詳細資訊,請參閱 任務 (p. 12)。

任務定義任務定義係用以指定任務應如何執行,您可以在任務中將它做為資源的藍圖。您可以提供任務 IAM 角色,以提供程式化存取其他 AWS 資源的方式,且您可指定記憶體和 CPU 需求。任務定義也可以為持久性儲存控制容器屬性、環境變數和掛載點。當提交單一任務時,在任務定義中的許多規格,可以指定新的值予以覆寫。如需詳細資訊,請參閱「任務定義 (p. 28)」

任務佇列當您提交 AWS Batch 任務時,將它提交到特定任務佇列,直至排定到所在的運算環境。您可以將一或多個運算環境與任務佇列關聯,且您可以為這些運算環境,甚至任務佇列本身指定優先順序值。例如,您可以高優先順序佇列提交具有時效性的任務,當運算資源比較充裕時,則對隨時可執行的任務給予較低優先順序。

運算環境運算環境是一組受管的或未受管的運算資源,用於執行任務。受管的運算環境可讓您在多個層級的詳細資訊中指定所需的執行個體類型。您可以設定使用特定執行個體型態的運算環境,特定模式例如 c4.2xlarge,或m4.10xlarge,或直接指定您希望使用的最新執行個體類型。您也可以指定該環境的最小、期望和最大的vCPU 數量,以及您願意為 Spot 執行個體支付的金額佔隨需執行個體價格的百分比,以及 VPC 子網路的目標集。AWS Batch 將視需要有效地啟動、管理及終止 EC2 執行個體。您也可以管理自己的運算環境。在這種情況下,您需負責設定和擴展 Amazon ECS 為您在 AWS Batch 叢集中建立的執行個體。如需更多資訊,請參閱運算環境 (p. 51)。

1

Page 7: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南入門

入門在 AWS Batch 主控台建立任務定義、運算環境及任務佇列,開始使用 AWS Batch。

AWS Batch 初次執行精靈,可讓您選擇建立運算環境和任務佇列,並提交 hello world 範例。如果您已有想在 AWS Batch 中啟動的 Docker 影像,您可以使用該映像建立任務定義並將其提交至您的佇列。如需更多詳細資訊,請參閱 AWS Batch 入門 (p. 8)。

2

Page 8: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南註冊 AWS 帳號:

設定 AWS Batch如果您已經註冊 Amazon Web Services (AWS) 且已在使用 Amazon Elastic Compute Cloud (Amazon EC2)或 Amazon Elastic Container Service (Amazon ECS),您也幾乎可使用 AWS Batch 了。這些服務的設定流程非常類似,因為 AWS Batch 的運算環境中使用 Amazon ECS 容器執行個體。若要與 AWS Batch 一同使用 AWS CLI,您必須使用支援最新 AWS Batch 功能的 AWS CLI 版本。如果您在 AWS CLI 沒有看到支援AWS Batch 功能的訊息,您應該升級到最新的版本。如需詳細資訊,請參閱 http://aws.amazon.com/cli/。

Note

因為 AWS Batch 使用 Amazon EC2 元件,所以您會在許多步驟中使用 Amazon EC2 主控台。

完成下列任務,為 AWS Batch 進行設定。如果您已經完成這些任一步驟,您可略過它們並移到安裝 AWSCLI。

1. 註冊 AWS 帳號: (p. 3)2. 建立 IAM 使用者 (p. 3)3. 為您的運算環境和容器執行個體建立 IAM 角色 (p. 5)4. 建立金鑰對 (p. 5)5. 建立虛擬私有雲端 (p. 6)6. 建立安全群組 (p. 7)7. 安裝 AWS CLI (p. 7)

註冊 AWS 帳號:當您註冊 AWS 時,您的 AWS 帳戶會自動註冊所有服務,包括 Amazon EC2 和 AWS Batch。您只需針對所使用的服務付費。

若您已經擁有 AWS 帳戶,請跳至下一項任務,如果您還沒有 AWS 帳戶,請依照下列步驟建立新帳戶。

建立 AWS 帳戶

1. Open https://portal.aws.amazon.com/billing/signup.2. Follow the online instructions.

Part of the sign-up procedure involves receiving a phone call and entering a verification code on thephone keypad.

請記下您的 AWS 帳戶號碼,因為您下一個任務會需要此號碼。

建立 IAM 使用者AWS 中的服務 (例如 Amazon EC2 和 AWS Batch) 需要您在存取時提供登入資料,讓服務能夠判斷您是否具有存取其資源的許可。主控台需要您的密碼。您可以建立 AWS 帳戶的存取金鑰,來存取命令列介面或 API。不過,不建議您使用 AWS 帳戶的登入資料來存取 AWS,建議您改用 AWS Identity and AccessManagement (IAM)。建立 IAM 使用者,然後將使用者新增至具有管理許可的 IAM 群組,或再授予此使用者管理許可。您可以使用特殊 URL 和 IAM 使用者的登入資料存取 AWS。

如果您已註冊 AWS,但是尚未建立自己的 IAM 使用者,則您可以使用 IAM 主控台建立使用者。

3

Page 9: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南建立 IAM 使用者

To create an administrator user for yourself and add the user to an administrators group (console)

1. Use your AWS account email address and password to sign in as the AWS account root user to theIAM console at https://console.aws.amazon.com/iam/.

Note

We strongly recommend that you adhere to the best practice of using the AdministratorIAM user below and securely lock away the root user credentials. Sign in as the root user onlyto perform a few account and service management tasks.

2. In the navigation pane, choose Users and then choose Add user.3. For User name, enter Administrator.4. Select the check box next to AWS Management Console access. Then select Custom password, and

then enter your new password in the text box.5. (Optional) By default, AWS requires the new user to create a new password when first signing in. You

can clear the check box next to User must create a new password at next sign-in to allow the new userto reset their password after they sign in.

6. Choose Next: Permissions.7. Under Set permissions, choose Add user to group.8. Choose Create group.9. In the Create group dialog box, for Group name enter Administrators.10. Choose Filter policies, and then select AWS managed -job function to filter the table contents.11. In the policy list, select the check box for AdministratorAccess. Then choose Create group.

Note

You must activate IAM user and role access to Billing before you can use theAdministratorAccess permissions to access the AWS Billing and Cost Managementconsole. To do this, follow the instructions in step 1 of the tutorial about delegating access tothe billing console.

12. Back in the list of groups, select the check box for your new group. Choose Refresh if necessary to seethe group in the list.

13. Choose Next: Tags.14. (Optional) Add metadata to the user by attaching tags as key-value pairs. For more information about

using tags in IAM, see Tagging IAM Entities in the IAM User Guide.15. Choose Next: Review to see the list of group memberships to be added to the new user. When you are

ready to proceed, choose Create user.

You can use this same process to create more groups and users and to give your users access to yourAWS account resources. To learn about using policies that restrict user permissions to specific AWSresources, see Access Management and Example Policies.

若要以此新 IAM 使用者身分登入,請登出 AWS 主控台,然後使用下列 URL,其中 your_aws_account_id是您去掉連字號的 AWS 帳號 (例如,如果您的 AWS 帳號是 1234-5678-9012,您的 AWS 帳戶 ID 就是123456789012):

https://your_aws_account_id.signin.aws.amazon.com/console/

輸入您剛才建立的 IAM 使用者名稱和密碼。登入時瀏覽列會顯示「your_user_name @your_aws_account_id」。

如果您不希望登入頁面的 URL 包含您的 AWS 帳戶 ID,則可以建立一個帳戶別名。從 IAM 儀表板,選擇Create Account Alias (建立帳戶別名),然後輸入別名,例如您的公司名稱。若要在建立帳戶別名後登入,請使用下列 URL:

4

Page 10: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南為您的運算環境和容器執行個體建立 IAM 角色

https://your_account_alias.signin.aws.amazon.com/console/

若要確認您帳戶之 IAM 使用者的登入連結,請開啟 IAM 主控台,並在儀表板的 IAM users sign-in link (IAM使用者登入連結) 下加以確認。

如需 IAM 的詳細資訊,請參閱 AWS Identity and Access Management 使用者指南。

為您的運算環境和容器執行個體建立 IAM 角色您的 AWS Batch 運算環境和容器執行個體需要 AWS 帳戶登入資料,以代表您呼叫其他 AWS API。您必須建立 IAM 角色,將這些登入資料提供給您的運算環境和容器執行個體,然後將該角色與您的運算環境建立關聯。

Note

AWS Batch 運算環境與容器執行個體的角色,會在主控台初次執行體驗時自動為您建立,因此,如果您想要使用 AWS Batch 主控台,您可以直接進行下一個部分。然而,如果您計劃使用 AWSCLI,在建立您的第一個運算環境之前,請先在 AWS Batch 服務 IAM 角色 (p. 81) 與 AmazonECS 執行個體角色 (p. 84) 中完成步驟。

建立金鑰對AWS 使用公有金鑰的密碼編譯,以保護您執行個體的登入資訊。Linux 執行個體 (例如 AWS Batch 運算環境容器執行個體),並無可用於 SSH 存取的密碼,應使用金鑰對以安全登入執行個體。當建立運算環境時,您會先指定金鑰對名稱,然後再提供使用 SSH 登入時的私有金鑰。

如果您尚未建立金鑰對,可以使用 Amazon EC2 主控台來建立。請注意,如果您計劃在多個區域中啟動執行個體,您將需要在每個區域中各建立一組金鑰對。如需區域的詳細資訊,請參閱 Amazon EC2 User Guidefor Linux Instances 中的區域與可用區域。

建立一組金鑰對

1. Open the Amazon EC2 console at https://console.aws.amazon.com/ec2/.2. 從導覽列中,為金鑰對選取區域。無論您的位置為何,您都可以選取任何您可用的區域:不過,金鑰對

具區域專用性。例如,如果您計劃在 US West (Oregon) 區域中啟動執行個體,您必須為執行個體在同一區域建立金鑰對。

3. 在導覽窗格中,選擇 Key Pairs (金鑰對)、Create Key Pair (建立金鑰對)。4. 在 Create Key Pair (建立金鑰對) 對話方塊中,在 Key pair name (金鑰對名稱) 為新的金鑰對輸入名

稱,然後選擇 Create (建立)。選擇一個您易記的名稱 (例如您的 IAM 使用者名稱),而且後面接著 -key-pair,再加上區域名稱。例如,me-key-pair-uswest2。

5. 您的瀏覽器會自動下載私有金鑰檔案。基礎檔案名稱為您所指定的金鑰對名稱,副檔名為 .pem。將私有金鑰檔案存放在安全的地方。

Important

這是您儲存私有金鑰檔案的唯一機會。每次您連線至執行個體來啟動執行個體與對應的私有金鑰時,都需要提供您的金鑰對名稱。

6. 如果您將在 Mac 或 Linux 電腦上使用 SSH 用戶端連線至 Linux 執行個體,請使用下列命令設定私有金鑰檔案的許可,以便只有您能夠讀取該檔案。

$ chmod 400 your_user_name-key-pair-region_name.pem

5

Page 11: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南建立虛擬私有雲端

如需更多資訊,請參閱 Amazon EC2 User Guide for Linux Instances 中的 Amazon EC2 金鑰對。

使用金鑰對連線至執行個體

若要從執行 Mac 或 Linux 的電腦連線至您的 Linux 執行個體,請使用.pem 選項與您私有金鑰的路徑,將-i 檔案指定給您的 SSH 用戶端。若要從執行 Windows 的電腦連線至您的 Linux 執行個體,您可以使用MindTerm 或 PuTTY。如果您計劃使用 PuTTY,則需要安裝它,然後使用下列程序將 .pem 檔案轉換為.ppk 檔案。

(選用) 準備使用 PuTTY 從 Windows 連線至 Linux 執行個體

1. 從 http://www.chiark.greenend.org.uk/~sgtatham/putty/ 下載並安裝 PuTTY。務必安裝整個套件。2. 啟動 PuTTYgen (例如,從 Start (開始) 選單,選擇 All Programs、PuTTY 和 PuTTYgen(所有程

式、PuTTY 和 PuTTYgen))。3. 在 Type of key to generate (要產生的金鑰類型) 下,選擇 SSH-2 RSA (SSH-2 RSA)。

4. 選擇 Load (載入)。根據預設,PuTTYgen 只會顯示副檔名為 .ppk 的檔案。若要尋找您的 .pem 檔案,請選擇顯示所有類型之檔案的選項。

5. 選取您在先前程序中建立的私有金鑰檔案,然後選擇 Open (開啟)。選擇 OK (確定) 關閉確認對話方塊。6. 選擇 Save private key (儲存私有金鑰)。PuTTYgen 會顯示有關未以複雜密碼儲存金鑰的警告。選擇

Yes (是)。7. 為金鑰指定用於金鑰對的相同名稱。PuTTY 會自動新增 .ppk 副檔名。

建立虛擬私有雲端Amazon Virtual Private Cloud (Amazon VPC) 可讓您將 AWS 資源啟動至已定義的虛擬網路。強烈建議您在VPC 中啟動您的容器執行個體。

如果您有預設的 VPC,您也可以略過此部分,並移至下一個任務 建立安全群組 (p. 7)。若要確定您是否擁有預設 VPC,請參閱 Amazon EC2 User Guide for Linux Instances 中的 Amazon EC2 主控台支援的平台。否則,您可以利用下面的步驟,在帳戶中建立非預設 VPC。

Important

如果您的帳戶在一個區域中支援 EC2-Classic,而您在該區域中沒有預設 VPC。

建立非預設 VPC

1. Open the Amazon VPC console at https://console.aws.amazon.com/vpc/.2. 從導覽列中,為 VPC 選取區域。VPC 是具區域專用性,因此您應該選取與您建立金鑰對相同的區域。3. 在 VPC 儀表板上,選擇 Start VPC Wizard (啟動 VPC 精靈)。4. 在 Step 1: Select a VPC Configuration (步驟 1:選取 VPC 組態) 頁面上,確認 VPC with a Single

Public Subnet (含單一公有子網路的 VPC) 已選取,然後選擇 Select (選取)。5. 在 步驟 2:在 VPC with a Single Public Subnet (含單一公有子網路的 VPC) 頁面,請在 VPC name

(VPC 名稱) 中輸入一個好記的名字。保留其他預設組態設定,然後選擇 Create VPC (建立 VPC)。在確認頁面上,選擇 OK (確定)。

6

Page 12: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南建立安全群組

如需 Amazon VPC 的詳細資訊,請參閱 Amazon VPC User Guide中的什麼是 Amazon VPC?。

建立安全群組安全群組就像是防火牆,用於關聯的運算環境容器執行個體,可在容器執行個體層級控制傳入及傳出流量。您可以為安全群組新增讓您可從您 IP 地址使用 SSH 連線到您容器執行個體的規則。您也可以新增允許任何位置之傳入和傳出 HTTP 和 HTTPS 存取的規則。依您的任務所需在開放連接埠新增任何規則。

請注意,如果您計劃在多個區域啟動容器執行個體,您需要在每個區域建立安全群組。如需更多資訊,請參閱 Amazon EC2 User Guide for Linux Instances 中的區域和可用區域。

Note

您需要本機電腦的公有 IP 地址 (可以使用服務來取得)。例如,我們提供下列服務:http://checkip.amazonaws.com/ 或 https://checkip.amazonaws.com/。若要尋找其他能夠提供您 IP 地址的服務,請使用搜尋片語「what is my IP address" (我的 IP 地址為何)」。 如果您透過網際網路服務提供者 (ISP) 或是經由不具靜態 IP 地址的防火牆連線,則需找出用戶端電腦使用的 IP 地址範圍。

建立具有最低權限的安全群組

1. Open the Amazon EC2 console at https://console.aws.amazon.com/ec2/.2. 從導覽列中,為安全群組選取區域。安全群組具區域專用性,因此您應該選取與建立金鑰對時相同的區

域。3. 在導覽窗格中,選擇 Security Groups (安全群組)、Create Security Group (建立安全群組)。4. 輸入新安全群組的名稱和說明。選擇一個好記的名稱,例如您的 IAM 使用者名稱,接著是 _SG_,再加

上區域名稱。例如,me_SG_ useast1。5. 在 VPC 清單中,確認已選取您的預設 VPC,其會標記星號 (*)。

Note

如果您的帳戶支援 EC2-Classic,請選取您在之前任務中建立的 VPC。6. AWS Batch 容器執行個體不需要開啟任何傳入連接埠。不過,您可能想要新增 SSH 規則以登入容器執

行個體,並以 Docker 命令檢查任務中的容器。如果您希望您的容器執行個體託管執行 Web 伺服器的任務,您也可以為 HTTP 新增規則。完成以下步驟以新增這些選用的安全群組規則。

在 Inbound (內送) 標籤,建立以下規則然後選擇 Create (建立):

• 選擇 Add Rule (新增規則)。針對 Type (類型),選擇 HTTP。針對 Source (來源),選擇 Anywhere (隨處) (0.0.0.0/0)。

• 選擇 Add Rule (新增規則)。針對 Type (類型),選擇 SSH。針對 Source (來源),確認 CustomIP (自訂 IP) 已選擇,並以 CIDR 表示法指定您的電腦或網路的公有 IP 地址。若要以 CIDR 表示法指定個別 IP 地址,請新增路由前綴 /32。例如,如果您的 IP 地址為 203.0.113.25,請指定 203.0.113.25/32。如果您的公司會分配某個範圍的地址,請指定整個範圍 (例如203.0.113.0/24)。

Note

基於安全考量,不建議您允許從所有 IP 地址 (0.0.0.0/0) 對您執行個體進行 SSH 存取,除非僅為短時間測試。

安裝 AWS CLI若要搭配 AWS Batch 使用 AWS CLI,請安裝 AWS CLI 最新版本。如需安裝 AWS CLI 或將其升級至最新版本的資訊,請參閱 AWS Command Line Interface User Guide 中的安裝 AWS 命令列界面。

7

Page 13: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南步驟 1:定義任務

AWS Batch 入門在 AWS Batch 主控台建立任務定義、運算環境及任務佇列,開始使用 AWS Batch。

AWS Batch 初次執行精靈,可讓您選擇建立運算環境和任務佇列,並提交 hello world 範例。如果您已有想在 AWS Batch 中啟動的 Docker 影像,您可以使用該映像建立任務定義並將其提交至您的佇列。

Important

開始之前,確保您已完成 設定 AWS Batch (p. 3) 的步驟,且您的 AWS 使用者具有所需的權限 (管理員使用者無需擔心權限問題)。如需更多資訊,請參閱 IAM User Guide 中的建立您的第一個 IAM管理員使用者和群組。

步驟 1:定義任務在本節,您可選擇定義任務定義,或在無任務定義的情況下,直接建立運算環境和任務佇列。

設定任務選項

1. 在 https://console.aws.amazon.com/batch/home#/wizard 開啟 AWS Batch 主控台初次執行精靈。2. 若要建立 AWS Batch 任務定義、運算環境和任務佇列,然後提交您的任務,請選擇 Using Amazon

EC2 (使用 &EC2;)。若只要建立運算環境和任務佇列,而不提交任務,請選擇 No job submission (不提交任務)。

3. 如果您選擇建立任務定義,請完成初次執行精靈接下來的四個部分:Job run-time (任務執行階段)、Environment (環境)、Parameters (參數) 及 Environment variables (環境變數),然後選擇 Next(下一步)。如果您選擇不建立任務定義,請選擇 Next (下一步) 並前往 步驟 2:設定運算環境和任務佇列 (p. 9)。

指定任務執行階段

1. 如果您要建立新的任務定義,請在 Job definition name (任務定義名稱) 中,為您的任務定義指定一個名稱。

2. (選擇性) 您可以在 Job role (任務角色) 中指定 IAM 角色,這會在您的任務中提供使用 AWS API 的權限給容器。此功能使用 Amazon ECSIAM 角色來執行任務功能。如需有關此功能的詳細資訊,包括設定先決條件,請參閱 Amazon Elastic Container Service Developer Guide 中的任務的 IAM 角色。

Note

此處僅顯示擁有 Amazon Elastic Container Service Task Role (&ECSlong; 任務角色) 信任關係的角色。如需有關建立 AWS Batch 任務 IAM 角色的詳細資訊,請參閱 Amazon ElasticContainer Service Developer Guide 中的 為您的任務建立角色及政策相關文章。

3. 在 Container image (容器映像) 中,選擇任務要使用的 Docker 影像。根據預設,Docker Hub 登錄檔中的映像為可用。您也可以用 repository-url/image:tag 指定其他儲存庫。允許最多 255 個字元(大小寫)、數字、連字號、底線、等號、句號、正斜線、井號。此參數映射到 Docker Remote API 之建立容器區段中的 Image,以及 docker run 的 IMAGE 參數。

Note

Docker 映像架構必須符合執行個體排程所在之運算資源的處理器架構。例如,ARM 型 Docker映像只能在 ARM 型運算資源上執行。

8

Page 14: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南步驟 2:設定運算環境和任務佇列

• Amazon ECR 儲存庫內的映像使用完整的 registry/repository:tag 命名慣例。例如,aws_account_id.dkr.ecr.region.amazonaws.com/my-web-app:latest。

• Docker Hub 上官方儲存庫中的映像,使用的是單一名稱 (例如,ubuntu 或 mongo)。• Docker Hub 上的其他儲存庫中的映像要求使用組織名稱 (例如,amazon/amazon-ecs-agent)。• 其他線上儲存庫中的映像更進一步要求使用網域名稱 (例如,quay.io/assemblyline/ubuntu)。

指定環境的資源

1. 在 Command (命令) 中,指定要傳送至容器的命令。此參數映射到 Docker Remote API 之建立容器區段中的 Cmd,以及 docker run 的 COMMAND 參數。如需 Docker CMD 參數的詳細資訊,請前往 https://docs.docker.com/engine/reference/builder/#cmd。

Note

您可以在命令中使用替換參數預設值及預留位置。如需更多資訊,請參閱 參數 (p. 36)。2. 在 vCPU 中,指定保留給容器的 vCPU 數量。此參數映射到 Docker Remote API 之建立容器區段中的

CpuShares,以及 docker run 的 --cpu-shares 選項。每個 vCPU 相當於 1,024 個 CPU 共用。3. 在 Memory (記憶體) 中,指定提供給任務容器使用的記憶體硬性限制 (MiB)。如果您的容器嘗試使

用超過此處指定的記憶體,容器便會終止。此參數映射到 Docker Remote API 之建立容器區段中的Memory,以及 docker run 的 --memory 選項。

4. 在 Job attempts (任務) 中,指定任務 (假如失敗時) 的嘗試次數上限。如需更多資訊,請參閱 自動化任務重試 (p. 16)。

Parameters

您可以決定是否在命令中指定替換參數預設值及預留位置。如需更多資訊,請參閱 參數 (p. 36)。

1. 在 Key (金鑰) 中,指定參數的金鑰。2. 在 Value (數值) 中,指定參數的數值。

指定環境變數

您可以決定是否指定要傳送至任務容器的環境變數。此參數映射到 Docker Remote API 之建立容器區段中的Env,以及 docker run 的 --env 選項。

Important

不建議在敏感資訊 (例如登入資料) 使用純文字環境變數。

1. 在 Key (金鑰) 中,指定環境變數的金鑰。2. 在 Value (數值) 中,指定環境變數的數值。

步驟 2:設定運算環境和任務佇列運算環境是一種參考運算資源 (Amazon EC2 執行個體) 的方式:告訴 AWS Batch 執行個體如何設定及自動啟動的設定和限制。您將任務提交到任務佇列,該佇列會負責存放任務,直到 AWS Batch 排程器在您的運算環境內的運算資源上執行該任務為止。

Note

目前,在初次執行精靈只能建立受管運算環境。若要建立未受管運算環境,請參閱 建立運算環境 (p. 62)。

9

Page 15: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南步驟 2:設定運算環境和任務佇列

設定您的運算環境類型

1. 在 Compute environment name (運算環境名稱) 中,為您的運算環境指定獨一無二的名稱。2. 在 Service role (服務角色) 中,選擇建立新的角色或使用現有的角色,此角色允許 AWS Batch 服務代表

您呼叫需要的 AWS API。如需更多資訊,請參閱AWS Batch 服務 IAM 角色 (p. 81)。如果您選擇建立新角色,會為您建立所需的角色 (AWSBatchServiceRole)。

3. 在 EC2 instance role (EC2 執行個體角色) 中,選擇建立新的角色或使用現有的角色,此角色允許為您的運算環境建立的 Amazon ECS 容器執行個體,代表您呼叫需要的 AWS API。如需更多資訊,請參閱Amazon ECS 執行個體角色 (p. 84)。如果您選擇建立新角色,會為您建立所需的角色(ecsInstanceRole)。

設定您的執行個體

1. 在 Provisioning model (佈建模型) 中,選擇 On-Demand (隨需) 來啟動 Amazon EC2 隨需執行個體或Spot 來使用 Amazon EC2 Spot 執行個體。

2. 如果選擇使用 Amazon EC2 Spot 執行個體:

a. 在 Maximum bid price (最高競價) 中,選擇啟動執行個體之前,與該執行個體類型的隨需價格比較時,Spot 執行個體價格必須達到的最大百分比。例如,如果您的出價百分比為 20%,Spot 價格則必須低於該 EC2 執行個體目前隨需價格的 20%。您一律會支付最低價 (市價) 且絕不超過您的最大百分比。

b. 在 Spot fleet role (Spot Fleet 角色) 中,選擇建立新的角色或使用現有的 Amazon EC2 Spot FleetIAM 角色,以應用至您的 Spot 運算環境。如果您選擇建立新角色,會為您建立所需的角色 (aws-ec2-spot-fleet-role)。如需更多資訊,請參閱 Amazon EC2 Spot Fleet 角色 (p. 84)。

3. 在 Allowed instance types (允許的執行個體類型) 中,選擇可以啟動的 Amazon EC2 執行個體類型。您可以指定執行個體系列,以在這些系列中啟動任何執行個體類型 (例如 c5、c5n 或 p3),或是在系列中指定特定大小 (例如 c5.8xlarge)。請注意,金屬執行個體類型不在執行個體系列中 (例如 c5 不包含)c5.metal。 您也可以選擇 optimal,立即挑選符合您任務佇列需求的執行個體類型 (C、M、R 執行個體系列)。

Note

在建立運算環境時,您為其選取的執行個體類型必須共用相同架構。例如,您無法在相同的運算環境中混合使用 x86 和 ARM 執行個體。

4. 在 Minimum vCPUs (最小 vCPU 數) 中,選擇無論您的任務佇列需求為何,運算環境需要維持的最小EC2 vCPU 數量。

5. 在 Desired vCPUs (所需 vCPU 數) 中,選擇您的運算環境啟動時使用的 EC2 vCPU 數量。隨著任務佇列需求增加,AWS Batch 可以增加運算環境的所需 vCPU 數,並新增 EC2 執行個體 (最多達最大 vCPU數);隨著需求減少,AWS Batch 可以減少運算環境的所需 vCPU 數,並移除執行個體 (最少可達最小vCPU 數)。

6. 在 Minimum vCPUs (最小 vCPU 數) 中,選擇無論您的任務佇列需求為何,運算環境可擴展的最大 EC2vCPU 數量。

設定您的網路

運算資源於您此處指定的 VPC 和子網路啟動。這允許您控制 AWS Batch 運算資源的網路隔離。

Important

需要存取權限,以便與 Amazon ECS 服務端點通訊。您可以透過界面 VPC 端點或透過擁有。如需有關界面 VPC 端點的詳細資訊,請參閱 Amazon Elastic Container Service Developer Guide中的 。如果您沒有已設定的界面 VPC 端點,且您的不具有公有 IP 地址,則它們必須使用網路位址轉譯(NAT) 來提供存取。如需詳細資訊,請參閱本指南 Amazon VPC User Guide。如需更多詳細資訊,請參閱 教學:為建立含公有和私有子網路的 VPC (p. 98)。

10

Page 16: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南步驟 2:設定運算環境和任務佇列

1. 在 VPC ID 中,選擇啟動您的執行個體的 VPC。2. 在 Subnets (子網路) 中,從選定的 VPC 選擇託管您的執行個體的子網路。根據預設,會選擇所有選定

的 VPC 內的子網路。3. 在 Security groups (安全群組) 中,選擇連接至您的執行個體的安全群組。根據預設,會選擇您的 VPC

預設的安全群組。

標記您的執行個體

您可以決定是否將金鑰值對標籤應用在運算環境啟動的執行個體。舉例來說,您可以將 "Name": "AWSBatch Instance - C4OnDemand" 指定為標籤,以讓運算環境中的每個執行個體都擁有該名稱 (這有助於在 Amazon EC2 主控台中識別您的 AWS Batch 執行個體)。根據預設,運算環境名稱用於標記您的執行個體。

1. 在 Key (金鑰) 中,指定標籤的金鑰。2. 在 Value (數值) 中,指定標籤的數值。

設定您的任務佇列

您將任務提交到任務佇列,該佇列負責存放任務,直到 AWS Batch 排程器在您的運算環境內的運算資源上執行該任務為止。

• 在 Job queue name (任務佇列名稱)中,為您的任務佇列選擇獨一無二的名稱。

查看和建立

在 Connected compute environments for this job queue (此任務佇列連接的運算環境) 部分,可查看新的運算環境與新的任務佇列的關聯情況,以及其順序。之後,您可以將其他運算環境與任務佇列建立關聯。任務排程器使用運算環境順序來判斷需執行特定任務的運算環境。運算環境必須先處於 VALID 狀態,才能與任務佇列建立關聯。您可以將多達三個運算環境與任務佇列建立關聯。

• 檢閱運算環境及任務佇列設定,然後選擇 Create (建立) 來建立您的運算環境。

11

Page 17: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南提交任務

任務任務為 AWS Batch 所執行工作的單位。任務可以做為 ECS 叢集中 Amazon ECS 容器執行個體上運作的容器化應用程式執行。

容器化的任務可以參考容器映像、命令和參數。如需更多詳細資訊,請參閱 任務定義參數 (p. 35)。

您可以提交大量獨立、簡單的任務

主題• 提交任務 (p. 12)• 任務狀態 (p. 14)• AWS Batch 任務環境變數 (p. 15)• 自動化任務重試 (p. 16)• 任務相依性 (p. 16)• 任務逾時 (p. 16)• 陣列任務 (p. 17)• 多節點平行任務 (p. 25)• GPU 任務 (p. 26)

提交任務註冊任務定義之後,您可將其做為任務提交到 AWS Batch 任務佇列。任務定義中指定的許多參數可在執行時間覆寫。

提交任務

1. 開啟位於 https://console.aws.amazon.com/batch/ 的 AWS Batch 主控台。2. 從導覽列中選取要使用的「區域」。3. 在導覽窗格中,選擇 Job (任務)、Submit job (提交任務)。4. 在 Job name (任務名稱) 中,為您的任務選擇獨一無二的名稱。5. 在 Job definition (任務定義) 中,選擇先前為任務建立的任務定義。如需更多資訊,請參閱 建立任務定

義 (p. 28)。6. 在 Job queue (任務佇列) 中,選擇先前建立的任務佇列。如需更多資訊,請參閱 建立一個任務佇

列 (p. 47)。7. 在 Job type (任務類型) 中,選擇Single (單一) 提交單一任務,或選擇 Array (陣列) 提交陣列任務。如需

更多詳細資訊,請參閱 陣列任務 (p. 17)。此選項不可用於多節點平行任務。8. (僅適用於陣列任務) 在 Array size (陣列大小) 中,指定 2 至 10,000 之間的陣列大小。9. (選用) 宣告任何任務相依性。任務可能有最多 20 個相依性。如需更多資訊,請參閱 任務相依

性 (p. 16)。

a. 在 Job depends on (任務仰賴於) 中,輸入在此任務開始之前的必須完成的任何任務的任務 ID。b. (僅適用於陣列任務) 在 N-To-N job dependencies (N 至 N 任務相依性) 中,指定任何陣列任務的一

或多個任務 ID,此陣列任務中的每個子任務索引取決於相依性對應的子索引任務。例如,JobB:1取決於 JobA:1,以此類推。

12

Page 18: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南提交任務

c. (僅適用於陣列任務) 選擇 Run children sequentially (循序執行子系),為目前的陣列任務建立SEQUENTIAL 相依性。確保每個子索引任務會等待在其之前的其他同級任務完成。例如,JobA:1取決於 JobA:0,以此類推。

10. 在 Job attempts (任務) 中,指定任務 (假如失敗時) 的嘗試次數上限。如需詳細資訊,請參閱 自動化任務重試 (p. 16)。

11. (選用) 在 Execution timeout (執行逾時) 中,指定允許任務嘗試執行的秒數上限。假如嘗試超過逾時時間,嘗試將停止,狀態將變為 FAILED。如需詳細資訊,請參閱 任務逾時 (p. 16)。

12. (選用),在 Parameters (參數) 區段中,您可以指定任務容器啟動時要執行之命令中的替換參數預設值和預留位置。如需詳細資訊,請參閱 參數 (p. 36)。

a. 選擇 Add parameter (新增參數)。b. 在 Key (金鑰) 中,指定參數的金鑰。c. 在 Value (數值) 中,指定參數的數值。

13. 在 vCPU 中,指定保留給容器的 vCPU 數量。此參數映射到 Docker Remote API 之建立容器區段中的CpuShares,以及 docker run 的 --cpu-shares 選項。每個 vCPU 相當於 1,024 個 CPU 共用。您必須指定至少 1 個 vCPU。

14. 在 Memory (記憶體) 中,指定提供給任務容器使用的記憶體硬性限制 (MiB)。如果您的容器嘗試使用超過此處指定的記憶體,容器便會終止。此參數映射到 Docker Remote API 之建立容器區段中的Memory,以及 docker run 的 --memory 選項。您必須為單一任務指定至少 4 MiB 的記憶體。

15. (選用) 針對 GPU, 、指定 GPU 任務將使用。

容器,視訊以指定的任務上執行的 GPU 鎖定到該容器。16. 在 Command (命令) 中,指定要傳送至容器的命令。對於簡單的命令,您可以在 Space delimited (空格

分隔) 索引標籤上的命令提示字元中輸入命令。確認 JSON 結果 (傳送到 Docker 協助程式) 是否正確。如為更複雜的命令 (例如,包含特殊字元),您可以切換到 JSON 索引標籤,然後在此輸入同等的字串陣列。

此參數映射到 Docker Remote API 之建立容器區段中的 Cmd,以及 docker run 的 COMMAND 參數。如需Docker CMD 參數的詳細資訊,請前往 https://docs.docker.com/engine/reference/builder/#cmd。

Note

您可以在命令中使用替換參數預設值及預留位置。如需詳細資訊,請參閱 參數 (p. 36)。17. (選用) 您可以指定要傳送至任務容器的環境變數。此參數映射到 Docker Remote API 之建立容器區段中

的 Env,以及 docker run 的 --env 選項。

Important

不建議在敏感資訊 (例如登入資料) 使用純文字環境變數。

a. 選擇 Add environment variable (新增環境變數)。b. 在 Key (金鑰) 中,指定環境變數的金鑰。

Note

環境變數不能以 AWS_BATCH 開頭;此命名慣例保留供 AWS Batch 服務設定的變數使用。c. 在 Value (數值) 中,指定環境變數的數值。

18. 選擇 Submit job (提交任務)。

Note

RUNNING、SUCCEEDED 和 FAILED 任務的日誌可在 CloudWatch Logs 中使用;日誌群組為/aws/batch/job,日誌串流名稱格式為 jobDefinitionName/default/ecs_task_id(此格式日後可能變更)。工作進入 RUNNING 狀態時,您可透過編寫程式的方式用 DescribeJobs API 操作擷取其日誌串流名稱。如需更多資訊,請參閱 Amazon CloudWatch Logs User Guide 中的檢視傳送到

13

Page 19: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南任務狀態

CloudWatch Logs 的日誌資料。根據預設,這些日誌設定為永遠不會過期,但您可以修改保留期間。如需更多資訊,請參閱 Amazon CloudWatch Logs User Guide 中的變更 CloudWatchLogs 的日誌資料保留期間。

任務狀態提交任務到 AWS Batch 任務佇列時,任務會進入 SUBMITTED 狀態。任務將經過以下狀態,直到其失敗 (以0 代碼結束) 或失敗 (以與非零代碼結束) 為止。AWS Batch 任務可能有以下狀態:

SUBMITTED

任務已提交至佇列,但尚未經排程器評估。排程器評估任務,判斷其是否對任何其他任務的成功完成存有任何未完成的相依性。如果有相依性,任務將移至 PENDING。如果沒有相依性,任務將移至RUNNABLE。

PENDING

佇列中的某一任務因為相依於另一個任務或資源而無法執行。如果相依性獲得滿足,任務將移至RUNNABLE。

RUNNABLE

佇列中的某一任務沒有未完成的相依性,因此已準備好排程傳送到主機。此狀態下的任務會在對應到任務佇列的其中一個運算環境取得足夠的資源後啟動。不過,假如一直無法取得足夠的資源,任務將無限期停留在此狀態。

Note

如果您的任務不會繼續進行 STARTING,請參閱疑難排解部分的任務停留在 RUNNABLE 狀態 (p. 112)。

STARTING

這些任務已排程傳送到主機,且相關的容器初始化作業正在進行中。取出容器映像且容器設置完畢並開始執行後,該任務將轉換為 RUNNING。

RUNNING

任務將做為運算環境內 Amazon ECS 容器執行個體的容器任務執行。任務的容器結束時,處理結束代碼將判斷任務為成功或失敗。0 結束代碼表示成功,任何非零的結束代碼則表示失敗。如果與嘗試失敗有關的任務在其選用的重試策略組態中有任何剩下的嘗試,任務將再次移至 RUNNABLE。如需更多資訊,請參閱自動化任務重試 (p. 16)。

Note

RUNNING 任務日誌可在 CloudWatch Logs 中使用;日誌群組為 /aws/batch/job,日誌串流名稱格式為 jobDefinitionName/default/ecs_task_id (此格式日後可能變更)。工作進入 RUNNING 狀態時,您可透過編寫程式的方式用 DescribeJobs API 操作擷取其日誌串流名稱。如需更多資訊,請參閱 Amazon CloudWatch Logs User Guide 中的檢視傳送到CloudWatch Logs 的日誌資料。根據預設,這些日誌設定為永遠不會過期,但您可以修改保留期間。如需更多資訊,請參閱 Amazon CloudWatch Logs User Guide 中的變更 CloudWatchLogs 的日誌資料保留期間。

SUCCEEDED

已成功完成任務,結束代碼為 0。SUCCEEDED 的任務狀態會保留在 AWS Batch 內 24 小時。

Note

SUCCEEDED 任務日誌可在 CloudWatch Logs 中使用;日誌群組為 /aws/batch/job,日誌串流名稱格式為 jobDefinitionName/default/ecs_task_id (此格式日後可能變更)。

14

Page 20: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南任務環境變數

工作進入 RUNNING 狀態時,您可透過編寫程式的方式用 DescribeJobs API 操作擷取其日誌串流名稱。如需更多資訊,請參閱 Amazon CloudWatch Logs User Guide 中的檢視傳送到CloudWatch Logs 的日誌資料。根據預設,這些日誌設定為永遠不會過期,但您可以修改保留期間。如需更多資訊,請參閱 Amazon CloudWatch Logs User Guide 中的變更 CloudWatchLogs 的日誌資料保留期間。

FAILED

任務所有的可用嘗試都失敗。FAILED 任務的任務狀態會保留在 AWS Batch 內 24 小時。

Note

FAILED 任務日誌可在 CloudWatch Logs 中使用;日誌群組為 /aws/batch/job,日誌串流名稱格式為 jobDefinitionName/default/ecs_task_id (此格式日後可能變更)。工作進入 RUNNING 狀態時,您可透過編寫程式的方式用 DescribeJobs API 操作擷取其日誌串流。如需更多資訊,請參閱 Amazon CloudWatch Logs User Guide 中的檢視傳送到CloudWatch Logs 的日誌資料。根據預設,這些日誌設定為永遠不會過期,但您可以修改保留期間。如需更多資訊,請參閱 Amazon CloudWatch Logs User Guide 中的變更 CloudWatchLogs 的日誌資料保留期間。

AWS Batch 任務環境變數AWS Batch 在容器任務中會自動設定特定的環境變數。這些環境變數提供任務內部對容器的自我檢查,您可以在應用程式的邏輯中使用這些變數的值。所有由 AWS Batch 設定的變數,皆具有 AWS_BATCH_ 字首。這是一個受保護的環境變數字首,而且您無法將此字首用於任務定義中您自己的變數或進行覆寫。

以下環境變數適用於任務容器:

AWS_BATCH_CE_NAME

會將此變數設為您任務所在之運算環境的名稱。AWS_BATCH_JOB_ARRAY_INDEX

只會在子陣列任務中設定此變數。陣列任務索引從 0 開始,而且每個子任務會收到一個唯一的索引號碼。例如,含 10 個子系的陣列任務有 0-9 的索引值。您可以使用此索引值,控制您陣列任務子系的區分方式。如需更多詳細資訊,請參閱 教學:使用陣列任務索引,控制任務區分 (p. 21)。

AWS_BATCH_JOB_ATTEMPT

會將此變數設為任務嘗試號碼。第一次嘗試的編號為 1。如需詳細資訊,請參閱 自動化任務重試 (p. 16)。

AWS_BATCH_JOB_ID

會將此變數設為 AWS Batch 任務 ID。AWS_BATCH_JOB_MAIN_NODE_INDEX

只會在多節點平行任務中設定此變數。會將此變數設為任務主要節點的索引數量。您的應用程式程式碼能夠在個別節點上比較 AWS_BATCH_JOB_MAIN_NODE_INDEX 與 AWS_BATCH_JOB_NODE_INDEX,以判斷它是否為主要節點。

AWS_BATCH_JOB_MAIN_NODE_PRIVATE_IPV4_ADDRESS

僅會將此變數設在多節點平行任務子節點中 (它不會出現在主要節點)。會將此變數設為任務主要節點的私有 IPv4 地址。您的子節點應用程式程式碼可以使用此地址與主節點通訊。

AWS_BATCH_JOB_NODE_INDEX

只會在多節點平行任務中設定此變數。會將此變數設為節點的節點索引數量。節點索引從 0 開始,而且每個節點皆會收到一個唯一的索引號碼。例如,含 10 個子系的多節點平行任務具有 0-9 的索引值。

15

Page 21: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南自動化任務重試

AWS_BATCH_JOB_NUM_NODES

只會在多節點平行任務中設定此變數。會將此變數設為您為多節點平行任務請求的節點數量。AWS_BATCH_JQ_NAME

會將此變數設為您已提交任務的任務佇列名稱。

自動化任務重試您可將重試策略套用至任務和任務定義,讓失敗的任務自動重試。可能的失敗案例包括:

• 容器任務有任何的非零結束代碼• Amazon EC2 執行個體失敗或終止• 內部 AWS 服務錯誤或中斷時間

任務提交到任務佇列,並進入 RUNNING 狀態時,此視為一次嘗試。根據預設,每個任務會嘗試一次移至SUCCEEDED 或 FAILED 任務狀態。不過,任務定義和任務提交任務流程可讓您指定 1 至 10 次的重試策略。如需更多詳細資訊,請參閱 重試策略 (p. 43)。

在執行時間,AWS_BATCH_JOB_ATTEMPT 環境變數設為容器的對應任務嘗試次數。第一次嘗試編號為 1,後續嘗試編號隨之遞增 (2、3、4 等等)。

如果任務嘗試因任何原因而失敗,且重試組態中指定的嘗試次數大於 AWS_BATCH_JOB_ATTEMPT,則任務將恢復為 RUNNABLE 狀態。如需詳細資訊,請參閱 任務狀態 (p. 14)。

Note

已取消或終止的任務不會重試。此外,由於無效的任務定義失敗的任務也不會重試。

如需更多詳細資訊,請參閱 建立任務定義 (p. 28) 及 提交任務 (p. 12)。

任務相依性提交 AWS Batch 任務時,您可以指定任務所相依的任務 ID。執行此動作時,AWS Batch 排程器將確保任務只在指定的相依性成功完成後執行。成功完成後,相依的任務將從 PENDING 轉為 RUNNABLE,然後轉為STARTING 和 RUNNING。如果任何任務相依性失敗,相依的任務將自動從 PENDING 轉為 FAILED。

例如,A 任務可以對另外最多 20 個任務有相依性,必須等這 20 個任務成功後才能執行。接著您可以提交額外的任務,對 A 任務和最多 19 個其他的任務有相依性。

對於陣列任務,您可以指定 SEQUENTIAL 類型相依性,且不指定任務 ID,讓每個子陣列任務從索引 0 開始依序完成。您也可以使用任務 ID 指定 N_TO_N 類型相依性。如此一來,此任務的每個索引子系必須等待各相依性對應的索引子系完成後,才能開始。如需詳細資訊,請參閱 陣列任務 (p. 17)。

若要提交具相依性的 AWS Batch 任務,請參閱 提交任務 (p. 12)。

任務逾時您可以設定任務的逾時時間,如此一來,假如任務執行超過該時間,AWS Batch 便會終止該任務。例如,您可能有一個您知道應該只需要 15 分鐘完成的任務。有時您的應用程式會一直卡在迴圈和執行中,因此您可以設定逾時為 30 分鐘以終止卡住的任務。

16

Page 22: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南陣列任務

您在任務定義內或是當您提交此任務時指定 attemptDurationSeconds 參數,該參數必須至少有 60 秒。自任務嘗試的 startedAt 時間戳記之後若超過此秒數,AWS Batch 將終止任務。在運算資源時,您的任務容器會收到 SIGTERM 訊號,讓您的應用程式有機會正常關閉。如果容器在 30 秒後仍在執行中,則會傳送SIGKILL 訊號以強制關閉容器。

逾時終止會依最佳作法來處理。您不應預期在任務嘗試逾時的當下,立即發生逾時終止 (可能需要多花費幾秒鐘)。如果您的應用程式需要精確執行逾時,您應在應用程式內實作此邏輯。如果您有大量任務同時逾時,逾時終止將採用前進先出佇列,按批次終止任務。

如果任務因超過逾時時間而終止,將不會重試。如果任務嘗試自行失敗,任務會在啟用重試下進行重試,且進行新嘗試時將重新開始逾時倒數。

對於陣列任務,子任務的逾時設定與父任務相同。

如需有關提交沒有逾時組態 AWS Batch 任務的詳細資訊,請參閱提交任務 (p. 12)。

陣列任務陣列任務為共用常見參數的任務,例如任務定義、vCPU 和記憶體。它會以相關但獨立、基本的任務集合執行,這些任務可能跨越多個主機,且可能同時執行。陣列任務是執行困難的平行任務最有效的方式,例如Monte Carlo 模擬、參數掃描或大型轉譯任務。

AWS Batch 陣列任務的提交則如同一般的任務。不過,您必須指定陣列大小 (2 至 10,000),以定義陣列內應該執行的子任務數量。如果您提交陣列大小 1000 的任務,單一任務將執行並產生 1000 個子任務。陣列任務為參考或指標,用於管理所有的子任務。這可讓您使用單一查詢提交大型工作負載。

提交陣列任務時,父陣列任務將取得一般的 AWS Batch 任務 ID。每個子任務都有相同的基本 ID,但子任務的陣列索引會附加到父 ID 的尾端,例如陣列第一個子任務的 example_job_ID:0。

在執行時間,AWS_BATCH_JOB_ARRAY_INDEX 環境變數設為容器的對應任務陣列索引編號。第一個陣列任務索引編號為 0,後續嘗試編號隨之遞增 (1、2、3 等等)。您可以使用此索引值,控制您陣列任務子系的區分方式。如需更多詳細資訊,請參閱 教學:使用陣列任務索引,控制任務區分 (p. 21)。

對於陣列任務的相依性,您可以指定相依性類型,例如 SEQUENTIAL 或 N_TO_N。您可以指定SEQUENTIAL 類型相依性 (不指定任務 ID),讓每個子陣列任務從索引 0 開始依序完成。例如,如果您提交陣列大小 100 的陣列任務,並指定 SEQUENTIAL 類型的相依性,後續將產生 100 個子任務,必須等第一個子任務完成後,下一個子任務才會開始。下圖顯示 A 任務,陣列大小 10 的陣列任務。A 任務子索引的每個任務都相依於前一個子任務。A:1 任務必須等 A:0 任務完成後才會開始。

17

Page 23: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南陣列任務

您也可以指定陣列任務的 N_TO_N 類型相依性和一個任務 ID,讓此任務的每個索引子系必須等待各相依性對應的索引子系完成後,才能開始。下圖顯示 A 任務和 B 任務,各為陣列大小 10,000 的兩個陣列任務。B 任務子索引的每個任務相依於 A 任務的對應索引。B:1 任務必須等到 A:1 任務完成後才會開始。

18

Page 24: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南陣列任務的任務流程範例

如果您取消或終止父陣列任務,所有子任務將隨之取消或終止。您可以隨時取消或終止個別的子任務 (其將移至 FAILED 狀態),而不會影響其他子任務。不過,如果子陣列任務失敗 (自行失敗或因手動取消/終止),父任務也會失敗。

陣列任務的任務流程範例AWS Batch 客戶常見的任務流程就是執行先決條件的設定任務,執行一系列命令,完成大量輸入任務,最後執行一項作業,彙整結果並將摘要資料寫入 Amazon S3、DynamoDB、Amazon Redshift 或 Aurora。

例如:

• JobA:標準非陣列任務,對 Amazon S3 儲存貯體 BucketA 中的物件執行快速列表和中繼資料驗證。SubmitJob JSON 語法如下所示。

{ "jobName": "JobA",

19

Page 25: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南陣列任務的任務流程範例

"jobQueue": "ProdQueue", "jobDefinition": "JobA-list-and-validate:1"}

• JobB:有 10,000 個副本的陣列任務,相依於 JobA,此任務對 BucketA 中的每個物件執行 CPU 密集型命令並將結果上傳至 BucketB。SubmitJob JSON 語法如下所示。

{ "jobName": "JobB", "jobQueue": "ProdQueue", "jobDefinition": "JobB-CPU-Intensive-Processing:1", "containerOverrides": { "vcpus": 32, "memory": 4096 } "arrayProperties": { "size": 10000 }, "dependsOn": [ { "jobId": "JobA_job_ID" } ]}

• JobC:另一個有 10,000 個副本的陣列任務,相依於具備 N_TO_N 相依性模式的 JobB,其針對BucketB 中的每個項目執行記憶體密集型命令,寫入中繼資料至 DynamoDB 並將產生的輸出上傳至BucketC。SubmitJob JSON 語法如下所示。

{ "jobName": "JobC", "jobQueue": "ProdQueue", "jobDefinition": "JobC-Memory-Intensive-Processing:1", "containerOverrides": { "vcpus": 1, "memory": 32768 } "arrayProperties": { "size": 10000 }, "dependsOn": [ { "jobId": "JobB_job_ID", "type": "N_TO_N" } ]}

• JobD:執行 10 個驗證步驟的陣列任務,其中每個步驟需要查詢 DynamoDB,且可能與上述的任何 Amazon S3 儲存貯體互動。JobD 中的每個步驟將執行相同的命令,但其行為會因任務容器內的AWS_BATCH_JOB_ARRAY_INDEX 環境變數的值而有所不同。這些驗證步驟依序執行 (例如,JobD:0 先執行,接著是 JobD:1,以此類推)。SubmitJob JSON 語法如下所示。

{ "jobName": "JobD", "jobQueue": "ProdQueue", "jobDefinition": "JobD-Sequential-Validation:1", "containerOverrides": { "vcpus": 1, "memory": 32768 } "arrayProperties": { "size": 10

20

Page 26: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南教學課程:使用陣列任務索引

}, "dependsOn": [ { "jobId": "JobC_job_ID" }, { "type": "SEQUENTIAL" }, ]}

• JobE:最後的非陣列任務,執行一些簡單的清除操作,並傳送 Amazon SNS 通知,內含管道已完成的訊息和輸出 URL 的連結。SubmitJob JSON 語法如下所示。

{ "jobName": "JobE", "jobQueue": "ProdQueue", "jobDefinition": "JobE-Cleanup-and-Notification:1", "parameters": { "SourceBucket": "s3://JobD-Output-Bucket", "Recipient": "[email protected]" }, "dependsOn": [ { "jobId": "JobD_job_ID" } ]}

教學:使用陣列任務索引,控制任務區分本教學課程示範如何使用 AWS_BATCH_JOB_ARRAY_INDEX 環境變數 (即指派給每個子任務的變數) 來區分子任務。此範例的運作方式為使用子任務的索引號碼來讀取檔案中的特定行,並使用任務容器內的命令來取代該行號相關的參數。因此,您可以有多個執行相同 Docker 影像和命令引數的 AWS Batch 任務,但是使用陣列任務索引當做修飾詞,因此結果不同。

在此教學課程中,您可以建立一個含有彩虹中所有顏色的文字檔案,每個顏色各為一行。然後,您可以為Docker 容器建立一個進入點指令碼,其可將索引轉換為值,用於顏色檔案中的行號 (索引從零開始,但行號從一開始)。建立 Dockerfile,其會將顏色和索引檔案複製到容器映像,並將映像的 ENTRYPOINT 設定為進入點指令碼。Dockerfile 和資源會建置在要推送至 Amazon ECR 的 Docker 影像。然後使用您的新容器映像註冊任務定義、提交內含該任務定義的 AWS Batch 陣列任務,並檢視結果。

先決條件此教學課程有以下事前準備:

• AWS Batch 運算環境。如需詳細資訊,請參閱「建立運算環境 (p. 62)」。• 一個 AWS Batch 任務佇列和相關的運算環境。如需更多資訊,請參閱 建立一個任務佇列 (p. 47)。• 安裝在本機系統的 AWS CLI。如需更多資訊,請參閱 AWS Command Line Interface User Guide中的安裝

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

步驟 1:建置容器映像雖然您在命令參數的任務定義中可以使用 AWS_BATCH_JOB_ARRAY_INDEX,建立在進入點指令碼使用變數的容器映像,會更為簡單有效。本節說明如何建立此類容器映像。

21

Page 27: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南教學課程:使用陣列任務索引

建置 Docker 容器影像

1. 建立新的目錄做為您的 Docker 影像工作空間,然後瀏覽至該目錄。2. 在工作空間目錄中,建立名為 colors.txt 的檔案,並貼入下列內容:

redorangeyellowgreenblueindigoviolet

3. 在工作空間目錄中,建立名為 print-color.sh 的檔案,並貼入下列內容:

Note

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

#!/bin/shLINE=$((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 busyboxCOPY print-color.sh /tmp/print-color.shCOPY colors.txt /tmp/colors.txtRUN chmod +x /tmp/print-color.shENTRYPOINT /tmp/print-color.sh

5. 建置 Docker 影像:

docker build -t print-color .

6. 使用以下指令碼測試容器。此指令碼會在本機將 AWS_BATCH_JOB_ARRAY_INDEX 變數設為 0,然後增量以模擬含 7 個子系的陣列任務所執行的項目。

AWS_BATCH_JOB_ARRAY_INDEX=0while [ $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.

22

Page 28: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南教學課程:使用陣列任務索引

步驟 2:推送映像至 Amazon ECR現在您已建置和測試 Docker 容器,必須將其推送至映像儲存庫。此範例使用 Amazon ECR,但您也可以選擇使用另一個登錄,例如 DockerHub。

1. 建立 Amazon ECR 映像儲存庫,以存放容器映像。為了簡化目的,範例使用 AWS CLI,但您也可以使用 AWS Management Console。如需更多資訊,請參閱 Amazon Elastic Container Registry UserGuide 中的建立儲存庫。

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 RegistryUser Guide 中的登錄檔身分驗證。

aws ecr get-login --no-include-email

4. 執行先前步驟傳回的 docker login ... 命令。5. 推送映像至 Amazon ECR:

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

步驟 3:建立和登錄任務定義現在,您的 Docker 影像已在映像登錄中,您可以在 AWS Batch 任務定義中進行指定,並稍後用它來執行陣列任務。為了簡化目的,範例使用 AWS CLI,但您也可以使用 AWS Management Console。如需更多資訊,請參閱建立任務定義 (p. 28)。

建立任務定義

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", "vcpus": 1, "memory": 250 }}

2. 使用 AWS Batch 登錄任務定義:

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

步驟 4:提交 AWS Batch 陣列任務登錄任務定義後,您就可以提交使用新容器映像的 AWS Batch 陣列任務。

23

Page 29: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南教學課程:使用陣列任務索引

提交 AWS Batch 陣列任務

1. 在工作空間目錄中,建立名為 print-color-job.json 的檔案,並貼入下列內容:

Note

此範例假設 AWS Batch 初次執行精靈會建立預設任務佇列名稱。如果您的任務佇列名稱不同,請將 first-run-job-queue 名稱取代為您的任務佇列名稱。

{ "jobName": "print-color", "jobQueue": "first-run-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 Logs。

在 CloudWatch Logs 中檢視任務日誌

1. Open the AWS Batch console at https://console.aws.amazon.com/batch/.2. 在左側導覽窗格中,選擇 Jobs (任務)。3. 對於 Job queue (任務佇列),請選取佇列。4. 在 Status (狀態) 區段,選擇 succeeded (已成功)。5. 若要顯示陣列任務的所有子任務,選取在之前的區段中傳回的任務 ID。6. 若要查看任務容器的日誌,選取其中一個子任務,然後選擇 View logs (查看日誌)。

7. 查看其他子任務日誌。每個任務都會傳回不同的彩虹顏色。

24

Page 30: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南多節點平行任務

多節點平行任務多節點平行任務可讓您執行跨越多個 Amazon EC2 執行個體的單一任務。使用 AWS Batch 多節點平行任務,您可以執行大規模、緊密結合、高效能運算應用程式和分散式 GPU 模型訓練,而不需要直接啟動、設定和管理 Amazon EC2 資源。AWS Batch 多節點平行任務與任何可支援以 IP 為基礎、節點間通訊的架構(例如 Apache MXNet、TensorFlow、Caffe2 或訊息傳遞界面 (MPI)) 相容。

多節點平行任務會以單一任務形式提交。不過,您的任務定義 (或任務提交節點覆寫) 會指定要為任務或哪些節點群組建立的節點數量。每個多節點平行任務皆包含會最先啟動的主要節點。在主要節點啟動後,就會啟動和開始子節點。如果主要節點結束,則任務會視為完成,而子節點也會停止。如需詳細資訊,請參閱 節點群組 (p. 25)。

多節點平行任務節點為單一租用戶,這表示每個 Amazon EC2 執行個體上只會執行一個任務容器。

最終任務狀態 (SUCCEEDED 或 FAILED) 取決主要節點的最終任務狀態。若要取得多節點平行任務的狀態,您可以使用任務 ID 描述提交任務時傳回的任務。如果您需要子節點的詳細資訊,則必須個別描述每個子節點。節點是使用 #N 表示法來解決。例如,若要存取任務第二個節點的詳細資訊,您需要使用 AWS BatchDescribeJobs API 動作描述 aws_batch_job_id#2。started、stoppedAt、statusReason 和 exit多節點平行任務的資訊,將從主要節點填入。

如果您指定了任務重試,則當主要節點發生故障時將會觸發另一次嘗試;而當子節點發生故障時,則不會觸發。每次新嘗試的多節點平行任務,皆會更新該嘗試所關聯的子節點。

若要在 AWS Batch 上執行多節點平行任務,您的應用程式程式碼必須包含分散式通訊的所需架構和程式庫。

環境變數在執行階段,除了所有 AWS Batch 任務皆會收到的標準環境變數之外,每個節點皆會特別針對多節點平行任務設定以下環境變數:

AWS_BATCH_JOB_MAIN_NODE_INDEX

會將此變數設為任務主要節點的索引數量。您的應用程式程式碼能夠在個別節點上比較AWS_BATCH_JOB_MAIN_NODE_INDEX 與 AWS_BATCH_JOB_NODE_INDEX,以判斷它是否為主要節點。

AWS_BATCH_JOB_MAIN_NODE_PRIVATE_IPV4_ADDRESS

僅會將此變數設在多節點平行任務子節點中 (它不會出現在主要節點)。會將此變數設為任務主要節點的私有 IPv4 地址。您的子節點應用程式程式碼可以使用此地址與主節點通訊。

AWS_BATCH_JOB_NODE_INDEX

會將此變數設為節點的節點索引數量。節點索引從 0 開始,而且每個節點皆會收到一個唯一的索引號碼。例如,含 10 個子系的多節點平行任務具有 0-9 的索引值。

AWS_BATCH_JOB_NUM_NODES

會將此變數設為您為多節點平行任務請求的節點數量。

節點群組節點群組是相同任務節點的群組,且這些節點皆共用相同容器屬性。AWS Batch 可讓您為每個任務指定最多5 個獨特的節點群組。

每個群組可以有自己的容器映像、命令、環境變數,以此類推。例如,您可以為主要節點提交需要單一c4.xlarge 執行個體的任務,以及 5 個 c4.xlarge 執行個體子節點;每個獨特的節點群組可以為每個任務指定不同的容器映像或要執行的命令。

25

Page 31: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南任務生命週期

或者,在任務中的所有節點可以使用單一節點群組,而您的應用程式程式碼可以透過比較AWS_BATCH_JOB_MAIN_NODE_INDEX 環境變數與自己在 AWS_BATCH_JOB_NODE_INDEX 中的值,區分節點角色 (主要節點比對子節點)。您可以在一個任務中擁有最多 1000 個節點。這是 Amazon ECS 叢集執行個體的預設限制,可以透過請求提高。

Note

目前,多節點平行任務中的所有節點群組皆必須使用相同的執行個體類型。

任務生命週期當您提交多節點平行任務,任務會進入 SUBMITTED 狀態,並等候任何任務相依性完成。然後,該任務將會移至 RUNNABLE 狀態,而 AWS Batch 會佈建執行任務所需的執行個體容量並啟動這些執行個體。

每個多節點平行任務皆包含主要節點。主要節點是單一子任務,且會經由 AWS Batch 監控以判斷所提交多節點任務的結果。主要節點最先啟動,然後會移至 STARTING 狀態。

當主要節點到達 RUNNING 狀態時 (在節點容器執行之後),子節點也會啟動並移至 STARTING 狀態。子節點會以隨機順序出現。子節點的啟動時間或順序並不固定。為了確保任務的所有節點皆為 RUNNING 狀態 (在節點容器執行之後),您的應用程式程式碼可以查詢 AWS Batch API 以獲得主要節點和子節點資訊,或是在應用程式程式碼內進行協調,以等待所有節點上線後,才開始任何分散式處理任務。主要節點的私有 IP 地址,在每個子節點中可做為 AWS_BATCH_JOB_MAIN_NODE_PRIVATE_IPV4_ADDRESS 環境變數使用。您的應用程式程式碼可以使用此資訊,對各任務之間的資料進行協調和通訊。

隨著個別節點結束,它們將移至 SUCCEEDED 或 FAILED,這取決於它們的結束程式碼。如果主要節點結束,則任務會視為完成,而所有子節點也會停止。如果子節點結束,AWS Batch 不會對任務中的其他節點採取任何動作。如果您不希望任務隨著已減少的節點數量繼續進行,則您必須將此情況納入您的應用程式程式碼中,以終止或取消任務。

運算環境考量在設定使用 AWS Batch 執行多節點平行任務的運算環境時,有幾點需要考慮。

• 如果您想要將多節點平行任務提交至運算環境,請考慮在單一「可用區域」中建立叢集置放群組,並將其與您的運算資源關聯。這可讓執行個體邏輯群組上的多節點平行任務,保持在具有較高網路流量潛力的鄰近位置。如需詳細資訊,請參閱 Amazon EC2 User Guide for Linux Instances中的置放群組。

• 使用 Spot 執行個體的運算環境不支援多節點平行任務。• AWS Batch 多節點平行任務使用 Amazon ECS awsvpc 網路模式,可給予多節點平行任務容器與

Amazon EC2 執行個體相同的網路屬性。每個多節點平行任務容器皆會取得自己的彈性網路界面、主要私有 IP 地址及內部 DNS 主機名稱。網路界面是在與託管運算資源相同的 VPC 子網路中所建立。任何套用到您運算資源的安全群組,也會套用在它身上。如需詳細資訊,請參閱 Amazon Elastic Container ServiceDeveloper Guide 中的使用 awsvpc 網路模式進行任務聯網。

• 您的運算環境最多可擁有 5 個相關聯的安全群組。• 您運算資源所建立及連接的彈性網路界面,將無法手動分離或使用您的帳戶修改。這是為了防止意外刪除

與執行中任務相關聯的彈性網路界面。若要釋出任務的彈性網路界面,請終止任務。• 您的運算環境必須具有足夠的最大 vCPU,以支援您的多節點平行任務。• 您的 Amazon EC2 執行個體限制必須能夠滿足執行您任務所需的執行個體數量。例如,如果您的任務需要

30 個執行個體,但您的帳戶只能在一個「區域」執行 20 個執行個體,您的任務就會卡在 RUNNABLE 狀態。

• 如果您在多節點平行任務的節點群組中指定執行個體類型,您的運算環境必須能夠啟動該執行個體類型。

GPU 任務GPU 任務可讓您執行任務,使用執行個體的 GPU (s)。

26

Page 32: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南GPU 任務

支援下列 Amazon EC2 GPU 執行個體類型。如需詳細資訊,請參閱 Amazon EC2 G3 執行個體、AmazonEC2 G4 執行個體、Amazon EC2 P2 執行個體和 Amazon EC2 P3 執行個體。

執行個體類型 GPU GPU 記憶體 vCPU 記憶體 網路頻寬

g3s.xlarge 1 8 GiB 4 30.5 GiB 10Gbps

g3.4xlarge 1 8 GiB 16 122 GiB 最高 10 Gbps

g3.8xlarge 2 16 GiB 32 244 GiB 10Gbps

g3.16xlarge 4 32 GiB 64 488 GiB 25Gbps

g4dn.xlarge 1 16 GiB 4 16 GiB 最高 25 Gbps

g4dn.2xlarge 1 16 GiB 8 32 GiB 最高 25 Gbps

g4dn.4xlarge 1 16 GiB 16 64 GiB 最高 25 Gbps

g4dn.8xlarge 1 16 GiB 32 128 GiB 50 Gbps

g4dn.12xlarge 4 64 GiB 48 192 GiB 50 Gbps

g4dn.16xlarge 1 16 GiB 64 256 GiB 50 Gbps

p2.xlarge 1 12 GiB 4 61 GiB 高

p2.8xlarge 8 96 GiB 32 488 GiB 10Gbps

p2.16xlarge 16 192 GiB 64 732 GiB 20 Gbps

p3.2xlarge 1 16 GiB 8 61 GiB 最高 10 Gbps

p3.8xlarge 4 64 GiB 32 244 GiB 10Gbps

p3.16xlarge 8 128 GiB 64 488 GiB 25Gbps

p3dn.24xlarge 8 256 GiB 96 768 GiB 100 Gbps

任務定義的 resourceRequirements 參數指定要鎖定的 GPU 的容器,不適用於任何其他任務期間,在該執行個體上執行的任務。所有執行個體類型在運算環境,應執行 GPU 任務從 p2、p3、g3、g3s 或 g4 執行個體系列。如果沒有這樣做,可能會造成停滯的 GPU 任務的 RUNNABLE 狀態。

您可以在不使用 GPU 任務 GPU 執行個體上執行的成本是否較高,但他們可以啟用 GPU 上執行相較於在類似的非 GPU 執行個體啟用執行個體啟用。根據特定個 vCPU、記憶體及所需的時間可能會阻擋 GPU 任務,這些非 GPU 任務從執行中。

27

Page 33: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南建立任務定義

任務定義AWS Batch 任務定義指定任務的執行方式。雖然每項任務皆必須參考任務定義,但任務定義中指定的許多參數均可在執行時間遭到覆寫。

內容• 建立任務定義 (p. 28)• 建立多節點平行任務定義 (p. 30)• 任務定義範本 (p. 33)• 任務定義參數 (p. 35)• 任務定義範例 (p. 44)

任務定義中指定的部分屬性包括:

• 任務中的容器要使用的 Docker 影像• 容器要使用多少個 vCPU 和多少記憶體• 容器啟動時應執行的命令• 容器啟動時應傳送到容器的 (如果有的話) 環境變數• 容器應使用的任何資料磁碟區• 任務應該用於 AWS 權限的 (如果有的話) IAM 角色

如需任務定義中可用參數的完整說明,請參閱 任務定義參數 (p. 35)。

建立任務定義您必須先建立任務定義,接著才能在 AWS Batch 執行任務。此程序針對單一節點和多節點平行任務會稍微不同。此主題涵蓋為非多節點平行任務的 AWS Batch 任務建立任務定義。

若要建立多節點平行任務定義,請參閱建立多節點平行任務定義 (p. 30)。如需多節點平行任務的詳細資訊,請參閱「多節點平行任務 (p. 25)」。

建立新任務定義

1. 開啟位於 https://console.aws.amazon.com/batch/ 的 AWS Batch 主控台。2. 從導覽列中選取要使用的「區域」。3. 在導覽窗格中,選擇 Job definitions (任務定義)、Create (建立)。4. 在 Job definition name (任務定義名稱) 中,輸入任務定義的唯一名稱。可以包含最多可達 128 個字元

(大小寫)、數字、連字號和底線。5. 在 Job attempts (任務) 中,指定任務 (假如失敗時) 的嘗試次數上限。如需詳細資訊,請參閱 自動化任

務重試 (p. 16)。6. (選用) 在 Execution timeout (執行逾時) 中,指定允許任務嘗試執行的秒數上限。假如嘗試超過逾時時

間,嘗試將停止,狀態將變為 FAILED。如需詳細資訊,請參閱 任務逾時 (p. 16)。7. 針對 Job requires multiple node configurations (需要多節點組態的任務),請不要勾選此方塊。若要改為

建立多節點平行任務定義,請參閱建立多節點平行任務定義 (p. 30)。8. (選用),在 Parameters (參數) 區段中,您可以指定任務容器啟動時要執行之命令中的替換參數預設值和

預留位置。如需詳細資訊,請參閱 參數 (p. 36)。

a. 選擇 Add parameter (新增參數)。b. 在 Key (金鑰) 中,指定參數的金鑰。

28

Page 34: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南建立任務定義

c. 在 Value (數值) 中,指定參數的數值。9. (選擇性) 您可以在 Job role (任務角色) 中指定 IAM 角色,這會在您的任務中提供使用 AWS API 的權限

給容器。此功能使用 Amazon ECSIAM 角色來執行任務功能。如需更多資訊,包括組態先決條件,請參閱 Amazon Elastic Container Service Developer Guide 中的任務的 IAM 角色。

Note

此處僅顯示擁有 Amazon Elastic Container Service Task Role (&ECSlong; 任務角色) 信任關係的角色。如需有關建立 AWS Batch 任務 IAM 角色的詳細資訊,請參閱 Amazon ElasticContainer Service Developer Guide 中的 為您的任務建立角色及政策相關文章。

10. 在 Container image (容器映像) 中,選擇任務要使用的 Docker 影像。根據預設,Docker Hub 登錄檔中的映像為可用。您也可以用 repository-url/image:tag 指定其他儲存庫。允許最多 255 個字元(大小寫)、數字、連字號、底線、等號、句號、正斜線、井號。此參數映射到 Docker Remote API 之建立容器區段中的 Image,以及 docker run 的 IMAGE 參數。

Note

Docker 映像架構必須符合執行個體排程所在之運算資源的處理器架構。例如,ARM 型 Docker映像只能在 ARM 型運算資源上執行。

• Amazon ECR 儲存庫內的映像使用完整的 registry/repository:tag 命名慣例。例如,aws_account_id.dkr.ecr.region.amazonaws.com/my-web-app:latest。

• Docker Hub 上官方儲存庫中的映像,使用的是單一名稱 (例如,ubuntu 或 mongo)。• Docker Hub 上的其他儲存庫中的映像要求使用組織名稱 (例如,amazon/amazon-ecs-agent)。• 其他線上儲存庫中的映像更進一步要求使用網域名稱 (例如,quay.io/assemblyline/ubuntu)。

11. 在 Command (命令) 中,指定要傳送至容器的命令。對於簡單的命令,您可以在 Space delimited (空格分隔) 索引標籤上的命令提示字元中輸入命令。接著,確認 JSON 結果 (傳送到 Docker 協助程式) 是否正確。如為更複雜的命令 (例如,包含特殊字元),您可以切換到 JSON 索引標籤,然後在此輸入同等的字串陣列。

此參數映射到 Docker Remote API 之建立容器區段中的 Cmd,以及 docker run 的 COMMAND 參數。如需Docker CMD 參數的詳細資訊,請前往 https://docs.docker.com/engine/reference/builder/#cmd。

Note

您可以使用預設值,做為命令中的替換參數和預留位置。如需更多資訊,請參閱 參數 (p. 36)。

12. 在 vCPU 中,指定保留給容器的 vCPU 數量。此參數映射到 Docker Remote API 之建立容器區段中的CpuShares,以及 docker run 的 --cpu-shares 選項。每個 vCPU 相當於 1,024 個 CPU 共用。您必須指定至少 1 個 vCPU。

13. 在 Memory (記憶體) 中,指定提供給任務容器使用的記憶體硬性限制 (MiB)。如果您的容器嘗試使用超過此處指定的記憶體,容器便會終止。此參數映射到 Docker Remote API 之建立容器區段中的Memory,以及 docker run 的 --memory 選項。您必須為單一任務指定至少 4 MiB 的記憶體。

Note

如果您嘗試盡可能為特定執行個體類型的任務提供最多的記憶體,以將資源使用率最大化,請參閱 記憶體管理 (p. 70)。

14. (選用) 在 Resource requirements (資源需求) 部分,您可以設定任務容器的資源需求。針對 Number ofGPUs (GPU 數量),指定您的任務將使用的 GPU 數量。

容器,視訊以指定的任務上執行的 GPU 鎖定到該容器。15. (選用) 在 Security (安全性) 區段中,設定任務容器的安全性選項。

a. 若要讓您的任務容器取得主機容器執行個體更高的權限 (類似 root 使用者),請選擇 Privileged(具有特殊權限)。此參數映射到 Docker Remote API 之 建立容器 區段中的 Privileged,以及docker run 的 --privileged 選項。

29

Page 35: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南建立多節點平行任務定義

b. 在 User (使用者) 中,輸入要在容器內使用的使用者名稱。此參數映射到 Docker Remote API 之建立容器區段中的 User,以及 docker run 的 --user 選項。

16. (選用) 在 Mount points (掛載點) 部分,您可以設定掛載點讓您任務的容器存取。

a. 在 Container path (容器路徑) 中,輸入要掛載主機磁碟區的容器上的路徑。b. 在 Source volume (來源磁碟區) 中,輸入要掛載的磁碟區名稱。c. 若要將磁碟區設為僅供容器唯讀,請選擇 Read-only (唯讀)。

17. (選用) 在 Volumes (磁碟區) 部分,您可以指定資料磁碟區,讓您的任務傳送到您任務的容器。

a. 在 Name (名稱) 中,輸入磁碟區的名稱。可以包含最多可達 255 個字元 (大小寫)、數字、連字號和底線。

b. (選用) 在 Source Path (來源路徑) 中,輸入要提供給容器的主機執行個體上的路徑。如果讓此欄位留白,Docker 協助程式將為您指派主機路徑。如果您指定來源路徑,資料磁碟區將保留在主機容器執行個體上的指定位置,直到您手動將其刪除為止。如果來源路徑不存在於主機容器執行個體,Docker 協助程式將建立該來源路徑。如果位置存在,來源路徑資料夾的內容將匯出到容器。

18. (選用) 在 Environment variables (環境變數) 部分,您可以指定環境變數,以傳送到您任務的容器。此參數映射到 Docker Remote API 之建立容器區段中的 Env,以及 docker run 的 --env 選項。

Important

不建議在敏感資訊 (例如登入資料) 使用純文字環境變數。

a. 選擇 Add environment variable (新增環境變數)。b. 在 Key (金鑰) 中,指定環境變數的金鑰。

Note

環境變數不能以 AWS_BATCH 開頭;此命名慣例保留供 AWS Batch 服務設定的變數使用。c. 在 Value (數值) 中,指定環境變數的數值。

19. (選用) 在 Ulimits 部分,您可以設定任何 ulimit 值,以用於任務的容器。

a. 選擇 Add limit (新增限制)。b. 在 Limit name (限制名稱) 中,選擇要套用的 ulimit。c. 在 Soft limit (軟性限制) 中,選擇 ulimit 類型要套用的軟性限制。d. 在 Hard limit (硬性限制) 中,選擇 ulimit 類型要套用的硬性限制。

20. (選用) 在 Linux Parameters (Linux 參數) 部分,您可以設定任何裝置映射以用於任務的容器,以便容器可以存取主機執行個體上的裝置。

a. 在 Devices (裝置) 區段中,選擇 Add device (新增裝置)。b. 針對 Host path (主機路徑),指定主機執行個體中的裝置的路徑。c. 針對 Container path (容器路徑),指定容器執行個體中的路徑,以公開對應到主機執行個體的裝

置。如果這裡保留空白,則主機路徑將會用於容器。d. 針對 Permisions (許可),選擇一或多個許可以套用於容器中的裝置。可用的許可為 READ、WRITE

及 MKNOD。21. 選擇 Create job definition (建立任務定義)。

建立多節點平行任務定義您必須先建立任務定義,接著才能在 AWS Batch 執行任務。此程序針對單一節點和多節點平行任務會稍微不同。此主題涵蓋為 AWS Batch 多節點平行任務建立任務定義。如需詳細資訊,請參閱 多節點平行任務 (p. 25)。

若要建立單節點任務定義,請參閱建立任務定義 (p. 28)。

30

Page 36: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南建立多節點平行任務定義

建立多節點平行任務定義

1. 開啟位於 https://console.aws.amazon.com/batch/ 的 AWS Batch 主控台。2. 從導覽列中選取要使用的「區域」。3. 在導覽窗格中,選擇 Job definitions (任務定義)、Create (建立)。4. 在 Job definition name (任務定義名稱) 中,輸入任務定義的唯一名稱。可以包含最多可達 128 個字元

(大小寫)、數字、連字號和底線。5. 在 Job attempts (任務) 中,指定任務 (假如失敗時) 的嘗試次數上限。如需詳細資訊,請參閱 自動化任

務重試 (p. 16)。6. (選用) 在 Execution timeout (執行逾時) 中,指定允許任務嘗試執行的秒數上限。假如嘗試超過逾時時

間,嘗試將停止,狀態將變為 FAILED。如需詳細資訊,請參閱 任務逾時 (p. 16)。7. 選取 Job requires multiple node configurations (需要多節點組態的任務),然後完成以下子步驟。若要改

為建立單一節點平行任務定義,請參閱建立任務定義 (p. 28)。

a. 針對 Number of nodes (節點數),請輸入要在您任務中使用的總節點數量。b. 針對 Main node (主要節點),請輸入要用於主要節點的節點索引。預設的主要節點索引為 0。c. (選用) 若要將您的節點限制為特定執行個體類型,請從下拉式功能表選擇所要的類型。如果您不指

定執行個體類型,AWS Batch 會從您運算環境可供使用的執行個體中,選擇符合您最大節點 (vCPU和記憶體) 需求的最小執行個體類型。

Important

請務必選擇可在您運算環境中啟動的執行個體類型。否則,您的任務會卡在 RUNNABLE 狀態並封鎖後續任務。

8. (選用),在 Parameters (參數) 區段中,您可以指定任務容器啟動時要執行之命令中的替換參數預設值和預留位置。如需詳細資訊,請參閱 參數 (p. 36)。

a. 選擇 Add parameter (新增參數)。b. 在 Key (金鑰) 中,指定參數的金鑰。c. 在 Value (數值) 中,指定參數的數值。

9. 在 Node properties (節點屬性) 區段中,設定您的節點群組。根據預設,系統會為您建立預設節點數量的單一節點群組。

10. 針對 Target nodes (目標節點),請使用 range_start:range_end 標記法指定您節點群組的範圍。

您可以為您任務指定的節點數量,建立高達 5 個節點範圍。節點範圍會使用節點的索引值,且節點索引會從 0 開始。最終節點群組的範圍結束索引值,應該是您在 Step 7.a (p. 31) 中指定的節點數量再減1。例如,如果您指定 10 個節點,而您想要使用單一節點群組,則您的最終範圍應為 9。

11. 在 Container image (容器映像) 中,選擇任務要使用的 Docker 影像。根據預設,Docker Hub 登錄檔中的映像為可用。您也可以用 repository-url/image:tag 指定其他儲存庫。允許最多 255 個字元(大小寫)、數字、連字號、底線、等號、句號、正斜線、井號。此參數映射到 Docker Remote API 之建立容器區段中的 Image,以及 docker run 的 IMAGE 參數。

Note

Docker 映像架構必須符合執行個體排程所在之運算資源的處理器架構。例如,ARM 型 Docker映像只能在 ARM 型運算資源上執行。

• Amazon ECR 儲存庫內的映像使用完整的 registry/repository:tag 命名慣例。例如,aws_account_id.dkr.ecr.region.amazonaws.com/my-web-app:latest。

• Docker Hub 上官方儲存庫中的映像,使用的是單一名稱 (例如,ubuntu 或 mongo)。• Docker Hub 上的其他儲存庫中的映像要求使用組織名稱 (例如,amazon/amazon-ecs-agent)。• 其他線上儲存庫中的映像更進一步要求使用網域名稱 (例如,quay.io/assemblyline/ubuntu)。

31

Page 37: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南建立多節點平行任務定義

12. 在 vCPU 中,指定保留給容器的 vCPU 數量。此參數映射到 Docker Remote API 之建立容器區段中的CpuShares,以及 docker run 的 --cpu-shares 選項。每個 vCPU 相當於 1,024 個 CPU 共用。您必須指定至少 1 個 vCPU。

13. 在 Memory (記憶體) 中,指定提供給任務容器使用的記憶體硬性限制 (MiB)。如果您的容器嘗試使用超過此處指定的記憶體,容器便會終止。此參數映射到 Docker Remote API 之建立容器區段中的Memory,以及 docker run 的 --memory 選項。您必須為單一任務指定至少 4 MiB 的記憶體。

Note

如果您嘗試盡可能為特定執行個體類型的任務提供最多的記憶體,以將資源使用率最大化,請參閱 記憶體管理 (p. 70)。

14. 在 Command (命令) 中,指定要傳送至容器的命令。對於簡單的命令,您可以在 Space delimited (空格分隔) 索引標籤上的命令提示字元中輸入命令。接著,確認 JSON 結果 (傳送到 Docker 協助程式) 是否正確。如為更複雜的命令 (例如,包含特殊字元),您可以切換到 JSON 索引標籤,然後在此輸入同等的字串陣列。

此參數映射到 Docker Remote API 之建立容器區段中的 Cmd,以及 docker run 的 COMMAND 參數。如需Docker CMD 參數的詳細資訊,請前往 https://docs.docker.com/engine/reference/builder/#cmd。

Note

您可以使用預設值,做為命令中的替換參數和預留位置。如需詳細資訊,請參閱 參數 (p. 36)。

15. (選用) 若要讓您的任務容器取得主機執行個體更高的權限 (類似 root 使用者),請選擇 Privileged (具有特殊權限)。此參數映射到 Docker Remote API 之 建立容器 區段中的 Privileged,以及 docker run的 --privileged 選項。

16. (選擇性) 您可以在 Job role (任務角色) 中指定 IAM 角色,這會在您的任務中提供使用 AWS API 的權限給容器。此功能使用 Amazon ECSIAM 角色來執行任務功能。如需更多資訊,包括組態先決條件,請參閱 Amazon Elastic Container Service Developer Guide 中的任務的 IAM 角色。

Note

此處僅顯示擁有 Amazon Elastic Container Service Task Role (&ECSlong; 任務角色) 信任關係的角色。如需有關建立 AWS Batch 任務 IAM 角色的詳細資訊,請參閱 Amazon ElasticContainer Service Developer Guide 中的 為您的任務建立角色及政策相關文章。

17. 在 User (使用者) 中,輸入要在容器內使用的使用者名稱。此參數映射到 Docker Remote API 之建立容器區段中的 User,以及 docker run 的 --user 選項。

18. (選用) 指定供任務容器存取的掛載點。

a. 在 Container path (容器路徑) 中,輸入要掛載主機磁碟區的容器上的路徑。b. 在 Source volume (來源磁碟區) 中,輸入要掛載的磁碟區名稱。c. 若要將磁碟區設為僅供容器唯讀,請選擇 Read-only (唯讀)。

19. (選用) 您可以指定要傳送至任務容器的任務的資料磁碟區。

a. 在 Name (名稱) 中,輸入磁碟區的名稱。可以包含最多可達 255 個字元 (大小寫)、數字、連字號和底線。

b. (選用) 在 Source Path (來源路徑) 中,輸入要提供給容器的主機執行個體上的路徑。如果讓此欄位留白,Docker 協助程式將為您指派主機路徑。如果您指定來源路徑,資料磁碟區將保留在主機容器執行個體上的指定位置,直到您手動將其刪除為止。如果來源路徑不存在於主機容器執行個體,Docker 協助程式將建立該來源路徑。如果位置存在,來源路徑資料夾的內容將匯出到容器。

20. (選用) 您可以指定要傳送至任務容器的環境變數。此參數映射到 Docker Remote API 之建立容器區段中的 Env,以及 docker run 的 --env 選項。

Important

不建議在敏感資訊 (例如登入資料) 使用純文字環境變數。32

Page 38: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南任務定義範本

a. 選擇 Add environment variable (新增環境變數)。b. 在 Key (金鑰) 中,指定環境變數的金鑰。

Note

環境變數不能以 AWS_BATCH 開頭;此命名慣例保留供 AWS Batch 服務設定的變數使用。c. 在 Value (數值) 中,指定環境變數的數值。

21. 在 Ulimits 中,設定任何 ulimit 值,以用於任務的容器。

a. 選擇 Add limit (新增限制)。b. 在 Limit name (限制名稱) 中,選擇要套用的 ulimit。c. 在 Soft limit (軟性限制) 中,選擇 ulimit 類型要套用的軟性限制。d. 在 Hard limit (硬性限制) 中,選擇 ulimit 類型要套用的硬性限制。

22. 回到 Step 10 (p. 31) 並重複為每個節點群組設定您的任務。23. 選擇 Create job definition (建立任務定義)。

任務定義範本空白的任務定義範本如下所示。您可以使用此範本來建立您的任務定義,之後還可儲存至檔案並搭配 AWSCLI--cli-input-json 選項使用。如需這些參數的詳細資訊,請參閱 任務定義參數 (p. 35)。

{ "jobDefinitionName": "", "type": "container", "parameters": { "KeyName": "" }, "containerProperties": { "image": "", "vcpus": 0, "memory": 0, "command": [ "" ], "jobRoleArn": "", "volumes": [ { "host": { "sourcePath": "" }, "name": "" } ], "environment": [ { "name": "", "value": "" } ], "mountPoints": [ { "containerPath": "", "readOnly": true, "sourceVolume": "" } ], "readonlyRootFilesystem": true,

33

Page 39: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南任務定義範本

"privileged": true, "ulimits": [ { "hardLimit": 0, "name": "", "softLimit": 0 } ], "user": "", "instanceType": "", "resourceRequirements": [ { "value": "", "type": "GPU" } ], "linuxParameters": { "devices": [ { "hostPath": "", "containerPath": "", "permissions": [ "WRITE" ] } ] } }, "nodeProperties": { "numNodes": 0, "mainNode": 0, "nodeRangeProperties": [ { "targetNodes": "", "container": { "image": "", "vcpus": 0, "memory": 0, "command": [ "" ], "jobRoleArn": "", "volumes": [ { "host": { "sourcePath": "" }, "name": "" } ], "environment": [ { "name": "", "value": "" } ], "mountPoints": [ { "containerPath": "", "readOnly": true, "sourceVolume": "" } ], "readonlyRootFilesystem": true, "privileged": true, "ulimits": [

34

Page 40: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南任務定義參數

{ "hardLimit": 0, "name": "", "softLimit": 0 } ], "user": "", "instanceType": "", "resourceRequirements": [ { "value": "", "type": "GPU" } ], "linuxParameters": { "devices": [ { "hostPath": "", "containerPath": "", "permissions": [ "READ" ] } ] } } } ] }, "retryStrategy": { "attempts": 0 }, "timeout": { "attemptDurationSeconds": 0 }}

Note

您可以使用下列 AWS CLI 命令,產生上述任務定義範本:

$ aws batch register-job-definition --generate-cli-skeleton

任務定義參數任務定義分割成四個基本部分:任務定義名稱、任務定義類型、參數替換預留位置預設值,以及任務的容器屬性。

內容• 任務定義名稱 (p. 36)• 類型 (p. 36)• 參數 (p. 36)• 容器屬性 (p. 36)• 節點屬性 (p. 42)• 重試策略 (p. 43)• 逾時 (p. 43)

35

Page 41: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南任務定義名稱

任務定義名稱jobDefinitionName

您必須在註冊任務定義時指定名稱。可以包含最多可達 128 個字元 (大小寫)、數字、連字號和底線。第一個使用該名稱註冊的任務定義的修訂版號碼為 1,後續使用該名稱註冊的任何任務定義,將取得遞增的修訂版號碼。

類型:字串

必要:是

類型type

註冊任務定義時,需指定任務類型。如需多節點平行任務 (也稱為陣列任務) 的詳細資訊,請參閱thesection called “建立多節點平行任務定義” (p. 30)。

類型:字串

有效值:container | multinode

必要:是

參數parameters

提交任務時,您可以指定應取代預留位置或覆寫預設任務定義參數的參數。任務提交要求中的參數,優先於任務定義中的預設值。如此您便能將相同的任務定義用在使用相同格式的多個任務,並以程式設計方式在命令提交時變更其中的值。

類型:字串到字串對應

必要:否

註冊任務定義時,您可以在任務容器屬性的 command 欄位使用參數替換預留位置。例如:

"command": [ "ffmpeg", "-i", "Ref::inputfile", "-c", "Ref::codec", "-o", "Ref::outputfile" ]

在上述範例中,命令中有 Ref::inputfile、Ref::codec 和 Ref::outputfile 參數替換預留位置。任務定義中的 parameters 物件可讓您設定這些預留位置的預設值。例如,若要設定Ref::codec 預留位置的預設值,您應在任務定義中指定下列各項:

"parameters" : {"codec" : "mp4"}

此任務定義提交執行時,容器命令中的 Ref::codec 引數會由預設值 mp4 取代。

容器屬性註冊任務定義時,您必須指定容器屬性清單,以在放置任務時傳送到容器執行個體上的 Docker 協助程式。任務定義允許使用以下的容器屬性。針對單節點任務,這些容器屬性會設定在任務定義層級。針對多節點平行任務,每個節點群組的容器屬性會設定在 節點屬性 (p. 42) 層級。

36

Page 42: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南容器屬性

command

傳遞至容器的命令。此參數映射到 Docker Remote API 之建立容器區段中的 Cmd,以及 docker run 的COMMAND 參數。如需 Docker CMD 參數的詳細資訊,請參閱 https://docs.docker.com/engine/reference/builder/#cmd。

"command": ["string", ...]

類型:字串陣列

必要:否environment

傳遞至容器的環境變數。此參數映射到 Docker Remote API 之建立容器區段中的 Env,以及 docker run的 --env 選項。

Important

不建議在敏感資訊 (例如登入資料) 使用純文字環境變數。

類型:金鑰值對的陣列

必要:否name

環境變數的名稱。

類型:字串

必要:是,使用 environment 時。value

環境變數的值。

類型:字串

必要:是,使用 environment 時。

"environment" : [ { "name" : "string", "value" : "string" }, { "name" : "string", "value" : "string" }]

image

用來啟動容器的映像。此字串會直接傳遞至 Docker 協助程式。根據預設,Docker Hub 登錄檔中的映像為可用。您也可以用 repository-url/image:tag 指定其他儲存庫。允許最多 255 個字元 (大小寫)、數字、連字號、底線、等號、句號、正斜線、井號。此參數映射到 Docker Remote API 之建立容器區段中的 Image,以及 docker run 的 IMAGE 參數。

Note

Docker 映像架構必須符合執行個體排程所在之運算資源的處理器架構。例如,ARM 型 Docker映像只能在 ARM 型運算資源上執行。

• Amazon ECR 儲存庫內的映像使用完整的 registry/repository:tag 命名慣例。例如,aws_account_id.dkr.ecr.region.amazonaws.com/my-web-app:latest。

• Docker Hub 上官方儲存庫中的映像,使用的是單一名稱 (例如,ubuntu 或 mongo)。• Docker Hub 上的其他儲存庫中的映像要求使用組織名稱 (例如,amazon/amazon-ecs-agent)。• 其他線上儲存庫中的映像更進一步要求使用網域名稱 (例如,quay.io/assemblyline/ubuntu)。

37

Page 43: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南容器屬性

類型:字串

必要:是jobRoleArn

您在註冊任務定義時必須指定 IAM 角色。角色提供任務容器權限,允許其代表您呼叫相關聯政策中指定的 API 動作。如需詳細資訊,請參閱 Amazon Elastic Container Service Developer Guide中的任務的IAM 角色。

類型:字串

必要:否memory

提供給容器使用的記憶體硬性限制 (MiB)。如果您的容器嘗試使用超過此處指定的記憶體,容器便會終止。此參數映射到 Docker Remote API 之建立容器區段中的 Memory,以及 docker run 的 --memory選項。您必須為單一任務指定至少 4 MiB 的記憶體。

Note

如果您嘗試盡可能為特定執行個體類型的任務提供最多的記憶體,以將資源使用率最大化,請參閱 記憶體管理 (p. 70)。

類型:整數

必要:是mountPoints

容器中資料磁碟區的掛載點。此參數映射到 Docker Remote API 之 建立容器 區段中的 Volumes,以及docker run 的 --volume 選項。

"mountPoints": [ { "sourceVolume": "string", "containerPath": "string", "readOnly": true|false } ]

類型:物件陣列

必要:否sourceVolume

要掛載的磁碟區名稱。

類型:字串

必要:是,使用 mountPoints 時。containerPath

要掛載主機磁碟區的容器上的路徑。

類型:字串

必要:是,使用 mountPoints 時。readOnly

如果此數值為 true,容器擁有磁碟區的唯讀存取權。如果此值為 false,則容器可寫入磁碟區。預設值為 false。

38

Page 44: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南容器屬性

類型:布林值

必要:否privileged

此參數為 true 時,容器便會取得主機容器執行個體的更高權限 (類似 root 使用者)。此參數映射到Docker Remote API 之 建立容器 區段中的 Privileged,以及 docker run 的 --privileged 選項。

"privileged": true|false

類型:布林值

必要:否readonlyRootFilesystem

此參數為 true 時,容器會取得根檔案系統的唯讀存取權。此參數映射到 Docker Remote API 之建立容器區段中的 ReadonlyRootfs,以及 docker run 的 --read-only 選項。

"readonlyRootFilesystem": true|false

類型:布林值

必要:否ulimits

容器中要設定的 ulimits 值的清單。此參數映射到 Docker Remote API 之建立容器區段中的Ulimits,以及 docker run 的 --ulimit 選項。

"ulimits": [ { "name": string, "softLimit": integer, "hardLimit": integer } ... ]

類型:物件陣列

必要:否name

ulimit 的 type。

類型:字串

必要:是,使用 ulimits 時。hardLimit

ulimit 類型的硬性限制。

類型:整數

必要:是,使用 ulimits 時。softLimit

ulimit 類型的軟性限制。

39

Page 45: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南容器屬性

類型:整數

必要:是,使用 ulimits 時。user

要在容器內使用的使用者名稱。此參數映射到 Docker Remote API 之建立容器區段中的 User,以及docker run 的 --user 選項。

"user": "string"

類型:字串

必要:否resourceRequirements

指出要為您的容器預留的 GPU 數量。

"resourceRequirements" : [ { "type": "GPU", "value": "number" } ]

類型:物件陣列

必要:否type

唯一支援的值為 GPU。

類型:字串

必要:是,使用 resourceRequirements 時。value

每個容器將需要的實際 GPU。

類型:字串

必要:是,使用 resourceRequirements 時。linuxParameters

Linux 特定的修改,會套用到容器,例如用於裝置映射的詳細資訊。

"linuxParameters": { "devices": [ { "hostPath": "string", "containerPath": "string", "permissions": [ "READ", "WRITE", "MKNOD" ] } ] }

類型:LinuxParameters 物件

40

Page 46: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南容器屬性

必要:否devices

映射到容器的裝置列表。

類型:Device 物件的陣列

必要:否hostPath

裝置在主機中的可在路徑。

類型:字串

必要:是containerPath

裝置在容器中公開的路徑。如果未指定,裝置會公開在與主機相同的路徑。

類型:字串

必要:否permissions

容器中的裝置的許可。如果未指定,權限將設定為 READ、WRITE 及 MKNOD。

類型:字串陣列

必要:否

有效值:READ | WRITE | MKNODvcpus

為容器保留的 vCPU 數量。此參數映射到 Docker Remote API 之建立容器區段中的 CpuShares,以及 docker run 的 --cpu-shares 選項。每個 vCPU 相當於 1,024 個 CPU 共用。您必須指定至少 1 個vCPU。

類型:整數

必要:是volumes

註冊任務定義時,您可指定磁碟區清單,那些磁碟區會傳送到容器執行個體上的 Docker 協助程式。容器屬性允許使用以下參數:

[ { "name": "string", "host": { "sourcePath": "string" } }]

name

磁碟區名稱。可以包含最多可達 255 個字元 (大小寫)、數字、連字號和底線。 此名稱是參考容器定義 mountPoints 中的 sourceVolume 參數。

41

Page 47: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南節點屬性

類型:字串

必要:是host

host 參數內容決定資料磁碟區是否在主機容器執行個體和儲存位置中保留。如果 host 參數是空的,則 Docker 協助程式會為您的資料磁碟區指派主機路徑。不過,不保證相關聯的容器停止執行後資料仍會保留。

類型:物件

必要:否sourcePath

提供給容器的主機容器執行個體上的路徑。如果此參數是空的,則 Docker 協助程式會為您指派主機路徑。

如果 host 參數包含 sourcePath 檔案位置,資料磁碟區將保留在主機容器執行個體上的指定位置,直到您手動將其刪除為止。如果 sourcePath 值不存在於主機容器執行個體,Docker協助程式將建立該值。如果位置存在,將匯出來源路徑資料夾的內容。

類型:字串

必要:否

節點屬性nodeProperties

在您註冊多節點平行任務定義時,您必須指定節點屬性清單,其定義了您要在任務中使用的節點數量、主節點索引,以及要使用的不同節點範圍。任務定義允許使用以下的節點屬性。如需詳細資訊,請參閱多節點平行任務 (p. 25)。

類型:NodeProperties 物件

必要:否mainNode

為多節點平行任務指定主要節點的節點索引。

類型:整數

必要:是numNodes

與多節點平行任務關聯的節點數量。

類型:整數

必要:是nodeRangeProperties

與多節點平行任務關聯的節點範圍和屬性清單。

類型:NodeRangeProperty 物件陣列

必要:是

42

Page 48: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南重試策略

targetNodes

使用節點索引值的節點範圍。0:3 的範圍表示節點具有 0 到 3 的索引值。如果省略了開始範圍值 (:n),則 0 會用於開始範圍。如果省略了結束範圍值 (n:),則會使用最高可能的節點索引來結束範圍。您的累積節點範圍必須將所有節點納入考量 (0:n)。您可以將節點範圍巢狀處理,例如0:10 和 4:5,在此情況下,4:5 範圍屬性會覆寫 0:10 屬性。

類型:字串

必要:否container

節點範圍的容器詳細資訊。如需詳細資訊,請參閱 容器屬性 (p. 36)。

類型:ContainerProperties 物件

必要:否

重試策略retryStrategy

註冊任務定義,您可以選擇性指定任務失敗後要使用的重試策略,隨此任務定義提交。根據預設,每個任務將嘗試一次。如果指定嘗試多次,任務將在失敗後重試 (例如,如果傳回非零結束代碼或容器執行個體終止)。如需更多資訊,請參閱 自動化任務重試 (p. 16)。

類型:RetryStrategy 物件

必要:否attempts

將任務移至 RUNNABLE 狀態的次數。您可以指定嘗試 1 至 10 次。如果 attempts 超過 1 次,任務失敗後將重試該次數,直到其狀態移至 RUNNABLE。

"attempts": integer

類型:整數

必要:否

逾時timeout

您可以設定任務的逾時時間,如此一來,假如任務執行超過該時間,AWS Batch 便會終止該任務。如需更多資訊,請參閱 任務逾時 (p. 16)。如果任務因逾時而終止,將不會重試。 SubmitJob 操作期間指定的任何逾時設定將覆寫此處定義的逾時設定。如需更多詳細資訊,請參閱 任務逾時 (p. 16)。

類型:JobTimeout 物件

必要:否attemptDurationSeconds

超過持續時間 (以秒為單位) (從任務嘗試的 startedAt 時間戳記開始測量) 之後,AWS Batch 將終止未完成的任務。逾時最小值為 60 秒。

43

Page 49: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南任務定義範例

類型:整數

必要:否

任務定義範例以下任務定義範例說明,如何使用環境變數、參數替換和磁碟區掛載等常見模式。

使用環境變數以下任務定義範例使用環境變數,指定檔案類型和 Amazon S3 URL。此特定範例出自建立簡單的「提取與執行」AWS Batch 任務運算部落格文章。部落格文章中提到的 fetch_and_run.sh 指令碼使用這些環境變數從 S3 下載 myjob.sh 指令碼及宣告其檔案類型。

雖然此範例中的命令和環境變數已硬式編碼到任務定義中,您可以提交使用此定義的任務,並指定命令和環境變數覆寫,讓任務定義更多樣化。

{ "jobDefinitionName": "fetch_and_run", "type": "container", "containerProperties": { "image": "123456789012.dkr.ecr.us-east-1.amazonaws.com/fetch_and_run", "vcpus": 2, "memory": 2000, "command": [ "myjob.sh", "60" ], "jobRoleArn": "arn:aws:iam::123456789012:role/AWSBatchS3ReadOnly", "environment": [ { "name": "BATCH_FILE_S3_URL", "value": "s3://my-batch-scripts/myjob.sh" }, { "name": "BATCH_FILE_TYPE", "value": "script" } ], "user": "nobody" }}

使用替換參數以下任務定義範例說明,如何允許替換參數和設定預設值。

Ref:: 區段中的 command 宣告用於設定的替換參數的預留位置。提交使用此任務定義的任務時,您要指定參數覆寫以填入這些值,例如 inputfile 和 outputfile。以下的 parameters 區段設定 codec 的預設值,但您仍可以視需要覆寫參數。

如需更多詳細資訊,請參閱 參數 (p. 36)。

{ "jobDefinitionName": "ffmpeg_parameters", "type": "container", "parameters": {"codec": "mp4"},

44

Page 50: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南測試 GPU 功能

"containerProperties": { "image": "my_repo/ffmpeg", "vcpus": 2, "memory": 2000, "command": [ "ffmpeg", "-i", "Ref::inputfile", "-c", "Ref::codec", "-o", "Ref::outputfile" ], "jobRoleArn": "arn:aws:iam::123456789012:role/ECSTask-S3FullAccess", "user": "nobody" }}

測試 GPU 功能以下工作定義範例測試 使用 GPU 工作負載 AMI (p. 55) 中所述的 GPU 工作負載 AMI 是否正確設定。此任務定義範例從 GitHub 執行 Tensorflow 深度 MNIST 分類器範例。

{ "containerProperties": { "image": "tensorflow/tensorflow:1.8.0-devel-gpu", "vcpus": 8, "command": [ "sh", "-c", "cd /tensorflow/tensorflow/examples/tutorials/mnist; python mnist_deep.py" ], "memory": 32000 }, "type": "container", "jobDefinitionName": "tensorflow_mnist_deep"}

您可以用上述稱為 tensorflow_mnist_deep.json 的 JSON 文字建立檔案,然後用下列命令註冊 AWSBatch 任務定義:

aws batch register-job-definition --cli-input-json file://tensorflow_mnist_deep.json

多節點平行任務下列任務定義範例說明多節點平行任務。如需詳細資訊,請參閱 AWS 運算部落格中的以 AWS Batch 方式使用多節點平行任務建立緊密耦合的分子動態工作流程。

{ "jobDefinitionName": "gromacs-jobdef", "jobDefinitionArn": "arn:aws:batch:us-east-2:123456789012:job-definition/gromacs-jobdef:1", "revision": 6, "status": "ACTIVE", "type": "multinode", "parameters": {}, "nodeProperties": { "numNodes": 2, "mainNode": 0,

45

Page 51: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南多節點平行任務

"nodeRangeProperties": [ { "targetNodes": "0:1", "container": { "image": "123456789012.dkr.ecr.us-east-2.amazonaws.com/gromacs_mpi:latest", "vcpus": 8, "memory": 24000, "command": [], "jobRoleArn": "arn:aws:iam::123456789012:role/ecsTaskExecutionRole", "ulimits": [], "instanceType": "p3.2xlarge" } } ] }}

46

Page 52: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南建立一個任務佇列

任務佇列任務會提交到一個任務佇列,直到可以安排在運算環境中執行。一個 AWS 帳戶可以有多個任務佇列。例如,您可以為高優先順序任務建立一個使用 Amazon EC2 隨需執行個體的佇列,而為低優先順序任務建立另一個使用 Amazon EC2 Spot 執行個體 (競價型執行個體) 的佇列。任務佇列有優先順序,可供排程器用來評估,決定優先執行的佇列。

建立一個任務佇列您必須先建立任務佇列,接著才能在 AWS Batch 提交任務。當您在建立一個任務佇列時,可以將一個或多個運算環境關聯至佇列中,並為運算環境指定偏好順序。

您也可以為任務佇列設定優先順序,決定 AWS Batch 排程器將任務放置到其關聯的運算環境的順序。例如,如果運算環境與超過一個以上的任務佇列關聯,排程任務會在該運算環境中偏好較高優先順序的任務佇列。

建立任務佇列

1. 開啟位於 https://console.aws.amazon.com/batch/ 的 AWS Batch 主控台。2. 從導覽列中選取要使用的區域。3. 在導覽窗格中,選擇 Job queues (任務佇列)、Create queue (建立佇列)。4. 在 Queue name (佇列名稱) 中,為您的任務佇列輸入獨一無二的名稱。5. 確認 Enable job queue (啟用任務佇列) 已選擇,讓您的任務佇列可以接受任務提交。6. 在 Priority (優先順序),為任務佇列的優先順序輸入整數值。當關聯相同的運算環境時,有更高優先順序

的任務佇列 (或 priority參數更高的整數值) 會先評估。優先順序係以遞減順序決定,例如,在決定排程偏好時,優先順序值 10 的任務佇列會先於優先順序值 1 的任務佇列。

7. 在此佇列區段的已連線運算環境中,從此清單選擇一或多個運算環境以關聯任務佇列,並以佇列應該放置的順序排列。任務排程器會使用運算環境順序,判斷需執行特定任務的運算環境。運算環境必須先處於 VALID 狀態,才能與任務佇列建立關聯。您可以將多達三個運算環境與任務佇列建立關聯。

Note

所有與任務佇列相關聯的運算環境都必須共用相同架構。AWS Batch 不支援在單一任務佇列中混合使用運算環境架構類型。

您可以透過選擇在表格中 Order (順序) 欄位旁的上下箭頭來變更運算環境的順序。8. 選擇 Create (建立) 來完成並建立任務佇列。

任務佇列範本空白的任務佇列範本如下所示。您可以使用此範本來建立您的任務佇列,之後還可儲存至檔案並搭配 AWSCLI--cli-input-json 選項使用。如需有關這些參數的詳細資訊,請參閱 AWS Batch API Reference 中的 CreateJobQueue。

{ "jobQueueName": "", "state": "", "priority": 0, "computeEnvironmentOrder": [{ "order": 0, "computeEnvironment": "" }]

47

Page 53: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南任務佇列參數

}

Note

您可以使用下列 AWS CLI 命令產生上述任務佇列範本。

$ aws batch create-job-queue --generate-cli-skeleton

任務佇列參數任務佇列分割成四個基本元件:名稱、狀態、任務佇列優先順序,以及運算環境。

任務佇列名稱jobQueueName

工作佇列的名稱。可以包含最多達 128 個字元 (大小寫)、數字和底線。

類型:字串

必要:是

狀態state

任務佇列的狀態。若任務佇列狀態為 ENABLED (預設值),表示能夠接受任務。

類型:字串

有效值:ENABLED | DISABLED

必要:否

優先順序priority

任務佇列的優先順序。當關聯相同的運算環境時,優先順序較高的任務佇列 (或 priority參數更高的整數值) 會先進行評估。優先順序係以遞減順序決定,例如,在決定排程偏好時,優先順序值 10 的任務佇列會先於優先順序值 1 的任務佇列。

類型:整數

必要:是

運算環境順序computeEnvironmentOrder

運算環境的設定對應到一個任務佇列以及彼此之間的相對順序。任務排程器使用此參數來判斷需執行特定任務的運算環境。運算環境必須先處於 VALID 狀態,才能與任務佇列建立關聯。您可以將多達三個運算環境與任務佇列建立關聯。

48

Page 54: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南運算環境順序

Note

所有與任務佇列相關聯的運算環境都必須共用相同架構。AWS Batch 不支援在單一任務佇列中混合使用運算環境架構類型。

類型:ComputeEnvironmentOrder 物件陣列

必要:是computeEnvironment

運算環境的 Amazon Resource Name (ARN)。

類型:字串

必要:是order

運算環境順序。運算環境會嘗試遞增排序。例如,如果兩個運算環境關聯至一個任務佇列,較低order整數值的運算環境會優先嘗試任務放置。

49

Page 55: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南

任務排程AWS Batch 排程器會評估提交到任務佇列內之任務的執行時間、地點和方式。只要與其他任務的所有相依性均符合,任務便會按提交的大約順序執行。

50

Page 56: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南受管運算環境

運算環境任務佇列會對應至一或多個運算環境。運算環境包含 Amazon ECS 容器執行個體,用來執行容器化的批次任務。特定的運算環境也可以對應至一或多個任務佇列。在任務佇列內,每個關聯的運算環境皆有一個順序,排程器會利用此順序判斷準備好執行的任務該放置的位置。如果第一個運算環境有免費資源,會將任務排定至該運算環境內的容器執行個體。如果運算環境無法提供適合的運算資源,排程器會在下一個運算環境中,嘗試執行該任務。

主題• 受管運算環境 (p. 51)• 未受管運算環境 (p. 52)• 運算資源 AMI (p. 52)• 啟動範本支援 (p. 58)• 建立運算環境 (p. 62)• 運算環境參數 (p. 65)• 配置策略 (p. 70)• 記憶體管理 (p. 70)

受管運算環境受管運算環境可讓您描述您的業務需求。在受管運算環境中,AWS Batch 會根據您在建立運算環境時定義的運算資源規格,管理環境中運算資源的容量和執行個體類型。您可以選擇在您的受管運算環境,使用Amazon EC2 隨需執行個體或 Spot 執行個體。您可以選擇性地設定最高價,讓 Spot 執行個體只在 Spot 執行個體價格低於隨需定價的指定百分比時才啟動。

當您建立運算環境時,受管的運算環境啟動 Amazon ECS 容器執行個體到您指定的 VPC 和子網路的運算環境。Amazon ECS 容器執行個體需要存取外部網路來與 Amazon ECS 服務端點通訊。如果您的容器執行個體沒有公有 IP 地址 (因為您選擇的子網路預設為不提供),則必須使用網路位址轉譯 (NAT) 來提供存取。如需詳細資訊,請參閱 Amazon VPC User Guide 中的 NAT 閘道。如需建立 VPC 的協助,請參閱 教學:為建立含公有和私有子網路的 VPC (p. 98).

根據預設,AWS Batch 受管運算環境針對運算資源,使用最新核准的 Amazon ECS 最佳化 AMI 版本。然而,您可能會基於各種原因,而想在您的受管運算環境建立自己的 AMI。如需詳細資訊,請參閱 運算資源AMI (p. 52)。

Note

AWS Batch 不會在 AMI 建立後在運算環境中將其升級 (例如,當較新版本的 Amazon ECS 最佳化AMI 可供使用時)。您需負責管理訪客作業系統 (包括更新和安全性修補程式) 和您在運算資源上安裝的任何額外應用程式軟體或公用程式。若要使用新的 AWS Batch 任務 AMI:

1. 新建內有新 AMI 的運算環境。2. 將運算環境新增至現有的任務佇列。3. 將舊的運算環境從任務佇列移除。4. 刪除舊的運算環境。

51

Page 57: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南未受管運算環境

未受管運算環境在未受管運算環境中,由您管理自己的運算資源。您必須確保用於您的運算資源的 AMI,符合 AmazonECS 容器執行個體 AMI 規格。如需更多詳細資訊,請參閱 運算資源 AMI 規格 (p. 52) 及 建立運算資源AMI (p. 53)。

建立完您的未受管運算環境後,使用 DescribeComputeEnvironments API 操作來檢視運算環境詳細資訊。尋找與環境關聯的 Amazon ECS 叢集,然後在該 Amazon ECS 叢集手動啟動容器執行個體。

以下 AWS CLI 命令也提供 Amazon ECS 叢集 ARN:

aws batch describe-compute-environments --compute-environments unmanagedCE --query computeEnvironments[].ecsClusterArn

如需更多資訊,請參閱 Amazon Elastic Container Service Developer Guide中的啟動 Amazon ECS 容器執行個體相關文章。啟動您的運算資源時,使用以下 Amazon ECS 使用者資料來指定資源需註冊的 AmazonEC2 叢集 ARN。將 ecsClusterArn 替換成使用上一條命令取得的叢集 ARN。

#!/bin/bashecho "ECS_CLUSTER=ecsClusterArn" >> /etc/ecs/ecs.config

運算資源 AMI根據預設,AWS Batch 受管運算環境針對運算資源,使用最新核准的 Amazon ECS 最佳化 AMI 版本。然而,您可能會基於下列原因,而想在您的受管及未受管運算環境建立自己的 AMI:

• 增加 AMI 根或資料磁碟區的儲存容量• 針對支援的 Amazon EC2 執行個體類型新增執行個體儲存體磁碟區• 使用自訂選項設定 Amazon ECS 容器代理程式• 將 Docker 設定為使用自訂選項• 設定 GPU 工作負載 AMI,以讓容器存取支援的 Amazon EC2 執行個體類型上的 GPU 硬體

主題• 運算資源 AMI 規格 (p. 52)• 建立運算資源 AMI (p. 53)• 使用 GPU 工作負載 AMI (p. 55)

運算資源 AMI 規格基本 AWS Batch 運算資源 AMI 規格包含:

必要

• 現代 Linux 發行版本,在 HVM 虛擬化類型 AMI 上執行至少 3.10 版本的 Linux 核心。Important

多節點平行任務僅能在已安裝 ecs-init 套件之 Amazon Linux 執行個體所啟動的運算資源上執行。我們建議當您在建立運算環境時,使用預設的 Amazon ECS 最佳化 AMI (即不指定自訂的AMI)。如需詳細資訊,請參閱 多節點平行任務 (p. 25)。

• Amazon ECS 容器代理 (最新版本為佳)。如需更多資訊,請參閱 Amazon Elastic Container ServiceDeveloper Guide中的安裝 Amazon ECS 容器代理程式相關文章。

52

Page 58: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南建立運算資源 AMI

• 啟動 Amazon ECS 容器代理程式時,必須使用 ECS_AVAILABLE_LOGGING_DRIVERS 環境變數將awslogs 日誌驅動程式指定為可用的日誌驅動程式。如需更多資訊,請參閱 Amazon Elastic ContainerService Developer Guide 中的 Amazon ECS 容器代理程式設定相關文章。

• 執行至少 1.9 版本的 Docker 協助程式及任何的 Docker 執行階段相依性。如需詳細資訊,請參閱 Docker文件中的檢查執行時間相依性。

Note

為獲得最佳體驗,建議使用與您現正使用的相應 Amazon ECS 代理版本一起提供並經過測試的Docker 版本。如需更多資訊,請參閱 Amazon Elastic Container Service Developer Guide 中的Amazon ECS 容器代理程式版本相關文章。

建議項目

• 執行及監控 Amazon ECS 代理的初始化和 nanny 程序。Amazon ECS 最佳化 AMI 使用 ecs-initupstart 程序,而其他操作系統可能使用 systemd。請參閱 Amazon Elastic Container Service DeveloperGuide中的容器執行個體使用者資料設定指令碼範例相關文章,以檢視幾個使用 systemd 啟動和監視Amazon ECS 容器代理程式的使用者資料設定指令碼範例。如需有關 ecs-init 的詳細資訊,請參閱ecs-initGitHub 上的 專案。受管運算環境至少需要 Amazon ECS 代理程式才能在開機時啟動。如果Amazon ECS 代理程式未在您的運算資源執行,則無法接受來自 AWS Batch 的任務。

Amazon ECS 最佳化 AMI 會根據這些要求和建議預先設定。建議將 Amazon ECS 最佳化 AMI 或 AmazonLinux AMI,搭配針對您的運算資源安裝的 ecs-init 套件一起使用。如果您的應用程式需要特定的操作系統,或是這些 AMI 中尚未提供的 Docker 版本,請選擇另一個 AMI。如需更多資訊,請參閱 Amazon ElasticContainer Service Developer Guide中的 Amazon ECS 最佳化 AMI。

建立運算資源 AMI您可以建立於受管和未受管運算環境中使用的自訂運算資源 AMI,但前提是需遵循 運算資源 AMI 規格 (p. 52)。建立完自訂的 AMI 後,您可以建立一個使用該 AMI 的運算環境,並將其關聯至任務佇列,然後開始提交任務至該佇列。

建立自訂的運算資源 AMI

1. 選擇基本 AMI 並開始。基本 AMI 必須使用 HVM 虛擬化,且不能是 Windows AMI。

Note

您為運算環境選擇的 AMI 必須符合您打算用於該運算環境之執行個體類型的架構。例如,如果您的運算環境使用 A1 執行個體類型,則您所選擇的運算資源 AMI 必須支援 ARM 執行個體。Amazon ECS 同時銷售 x86 和 ARM 版本的 Amazon ECS 最佳化 Amazon Linux 2 AMI。如需詳細資訊,請參閱 Amazon Elastic Container Service Developer Guide 中的 AmazonECS 最佳化 Amazon Linux 2AMI。

Amazon ECS 最佳化 AMI 是受管運算環境中運算資源的預設 AMI。Amazon ECS 工程師會在 AMI 預先設定和測試 AWS Batch 最佳化 AWS。這是最簡單的 AMI,可讓您快速上手,在 AWS 上執行您的運算資源。如需更多資訊,請參閱 Amazon Elastic Container Service Developer Guide中的 Amazon ECS最佳化 AMI。

或者,您可以選擇另一個 Amazon Linux 變體,並使用下列命令安裝 ecs-init 套件:

sudo yum install -y ecs-init

例如,如果您想要在 AWS Batch 運算資源執行 GPU 工作負載,您可以從 Amazon Linux DeepLearning AMI (Amazon Linux 深度學習 AMI) 開始,並將其設定為可執行 AWS Batch 任務。如需詳細資訊,請參閱 使用 GPU 工作負載 AMI (p. 55)。

53

Page 59: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南建立運算資源 AMI

Important

如果您選擇的基本 AMI 不支援 ecs-init 套件,則必須設定一種方式,使 Amazon ECS 代理程式在開機時啟動並維持執行狀態。請參閱 Amazon Elastic Container Service DeveloperGuide中的容器執行個體使用者資料設定指令碼範例相關文章,以檢視幾個使用 systemd 啟動和監視 Amazon ECS 容器代理程式的使用者資料設定指令碼範例。

2. 使用您的 AMI 適合的儲存選項,從選取的基本 AMI 啟動執行個體。如果您選擇的執行個體類型可支援,您可以設定連接的 Amazon EBS 磁碟區,或執行個體儲存體磁碟區的大小和數量。如需更多資訊,請參閱 Amazon EC2 User Guide for Linux Instances 中的啟動執行個體和 Amazon EC2 執行個體存放區相關文章。

3. 使用 SSH 連接至您的執行個體,並執行任何必要的設定任務,例如:

• 安裝 Amazon ECS 容器代理程式。如需更多資訊,請參閱 Amazon Elastic Container ServiceDeveloper Guide中的安裝 Amazon ECS 容器代理程式相關文章。

• 設定指令碼,以設置執行個體存放區磁碟區的格式。• 將執行個體存放區磁碟區或 Amazon EFS 檔案系統新增至 /etc/fstab 檔案,以讓它們在啟動時掛

載。• 設定 Docker 選項 (啟用偵錯、調整基本映像大小等)。• 安裝套件或複製檔案。

如需更多資訊,請參閱Amazon EC2 User Guide for Linux Instances中的使用 SSH 連接至 Linux 執行個體。

4. 如果您在執行個體上啟動了 Amazon ECS 容器代理程式,則必須在建立 AMI 前停用它並移除持久性資料檢查點檔案,否則該代理程式不會在從您的 AMI 啟動的執行個體上啟動。

a. 停用 Amazon ECS 容器代理。

• Amazon ECS-optimized Amazon Linux 2 AMI:

sudo systemctl stop ecs

• Amazon ECS-optimized Amazon Linux AMI:

sudo stop ecs

b. 移除持久性資料檢查點檔案。此檔案的預設位置為 /var/lib/ecs/data/ecs_agent_data.json。使用下列命令來移除檔案。

sudo rm -rf /var/lib/ecs/data/ecs_agent_data.json

5. 從執行中的執行個體建立新的 AMI。如需更多資訊,請參閱 Amazon EC2 User Guide for LinuxInstances 指南中的建立 Amazon EBS 支援 Linux AMI 相關文章。

在 AWS Batch 使用新的 AMI

1. AMI 建立程序完成時,使用新 AMI 來建立運算環境 (請務必選取 Enable user-specified AMI ID (啟用使用者指定的 &AMI; ID) 並在Step 5.j (p. 63) 中指定您的自訂 AMI ID)。如需詳細資訊,請參閱 建立運算環境 (p. 62)。

Note

您為運算環境選擇的 AMI 必須符合您打算用於該運算環境之執行個體類型的架構。例如,如果您的運算環境使用 A1 執行個體類型,則您所選擇的運算資源 AMI 必須支援 ARM 執行個體。Amazon ECS 同時銷售 x86 和 ARM 版本的 Amazon ECS 最佳化 Amazon Linux 2 AMI。

54

Page 60: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南使用 GPU 工作負載 AMI

如需詳細資訊,請參閱 Amazon Elastic Container Service Developer Guide 中的 AmazonECS 最佳化 Amazon Linux 2AMI。

2. 建立任務佇列,並與新的運算環境建立關聯。如需更多詳細資訊,請參閱 建立一個任務佇列 (p. 47)。

Note

所有與任務佇列相關聯的運算環境都必須共用相同架構。AWS Batch 不支援在單一任務佇列中混合使用運算環境架構類型。

3. (選用) 將範例任務提交到新的任務佇列。如需詳細資訊,請參閱 任務定義範例 (p. 44)、建立任務定義 (p. 28) 及 提交任務 (p. 12)。

使用 GPU 工作負載 AMI若要在您的 AWS Batch 運算資源上執行 GPU 工作負載,您必須搭配 GPU 支援來使用 AMI。如需詳細資訊,請參閱 Amazon Elastic Container Service Developer Guide中 在 Amazon ECS 及 Amazon ECS 最佳化的 AMI 上使用 GPU。

在受管運算環境下,如果運算環境指定了任何 p2、p3、g3、g3s 或 g4 執行個體類型或系列,則 AWSBatch 會使用 Amazon ECS GPU 最佳化的 AMI。

在未受管運算環境下,建議使用 Amazon ECS GPU 最佳化的 AMI。您可以使用 AWS CommandLine Interface 或 AWS Systems Manager 參數存放區 GetParameter、GetParameters、和GetParametersByPath 作業,擷取建議使用之 Amazon ECS GPU 最佳化的 AMI 的中繼資料。

以下範例會示範 GetParameter 的使用。

AWS CLI

$ aws ssm get-parameter --name /aws/service/ecs/optimized-ami/amazon-linux-2/gpu/recommended \ --region us-east-2 --output json

這時輸出會包含透過 Value 參數傳遞的 AMI 資訊:

{ "Parameter": { "Name": "/aws/service/ecs/optimized-ami/amazon-linux-2/gpu/recommended", "LastModifiedDate": 1555434128.664, "Value": "{\"schema_version\":1,\"image_name\":\"amzn2-ami-ecs-gpu-hvm-2.0.20190402-x86_64-ebs\",\"image_id\":\"ami-083c800fe4211192f\",\"os\":\"Amazon Linux 2\",\"ecs_runtime_version\":\"Docker version 18.06.1-ce\",\"ecs_agent_version\":\"1.27.0\"}", "Version": 9, "Type": "String", "ARN": "arn:aws:ssm:us-east-2::parameter/aws/service/ecs/optimized-ami/amazon-linux-2/gpu/recommended" }}

Python

from __future__ import print_function

import jsonimport boto3

ssm = boto3.client('ssm', 'us-east-2')

55

Page 61: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南使用 GPU 工作負載 AMI

response = ssm.get_parameter(Name='/aws/service/ecs/optimized-ami/amazon-linux-2/gpu/recommended')jsonVal = json.loads(response['Parameter']['Value'])print("image_id = " + jsonVal['image_id'])print("image_name = " + jsonVal['image_name'])

這時輸出只會包含 AMI ID 和 AMI 名稱:

image_id = ami-083c800fe4211192fimage_name = amzn2-ami-ecs-gpu-hvm-2.0.20190402-x86_64-ebs

以下範例會示範 GetParameters 的使用。

AWS CLI

$ aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2/gpu/recommended/image_name \ /aws/service/ecs/optimized-ami/amazon-linux-2/gpu/recommended/image_id \ --region us-east-2 --output json

這時輸出會包含個別參數的完整中繼資料:

{ "InvalidParameters": [], "Parameters": [ { "Name": "/aws/service/ecs/optimized-ami/amazon-linux-2/gpu/recommended/image_id", "LastModifiedDate": 1555434128.749, "Value": "ami-083c800fe4211192f", "Version": 9, "Type": "String", "ARN": "arn:aws:ssm:us-east-2::parameter/aws/service/ecs/optimized-ami/amazon-linux-2/gpu/recommended/image_id" }, { "Name": "/aws/service/ecs/optimized-ami/amazon-linux-2/gpu/recommended/image_name", "LastModifiedDate": 1555434128.712, "Value": "amzn2-ami-ecs-gpu-hvm-2.0.20190402-x86_64-ebs", "Version": 9, "Type": "String", "ARN": "arn:aws:ssm:us-east-2::parameter/aws/service/ecs/optimized-ami/amazon-linux-2/gpu/recommended/image_name" } ]}

Python

from __future__ import print_function

import boto3

ssm = boto3.client('ssm', 'us-east-2')

response = ssm.get_parameters( Names=['/aws/service/ecs/optimized-ami/amazon-linux-2/gpu/recommended/image_name',

56

Page 62: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南使用 GPU 工作負載 AMI

'/aws/service/ecs/optimized-ami/amazon-linux-2/gpu/recommended/image_id'])for parameter in response['Parameters']: print(parameter['Name'] + " = " + parameter['Value'])

這時輸出會包含使用完整路徑名稱的 AMI ID 和 AMI 名稱:

/aws/service/ecs/optimized-ami/amazon-linux-2/gpu/recommended/image_id = ami-083c800fe4211192f/aws/service/ecs/optimized-ami/amazon-linux-2/gpu/recommended/image_name = amzn2-ami-ecs-gpu-hvm-2.0.20190402-x86_64-ebs

以下範例會示範 GetParametersByPath 的使用。

AWS CLI

$ aws ssm get-parameters-by-path --path /aws/service/ecs/optimized-ami/amazon-linux-2/gpu/recommended \ --region us-east-2 --output json

這時輸出會包含指定路徑下面之全部參數的完整中繼資料:

{ "Parameters": [ { "Name": "/aws/service/ecs/optimized-ami/amazon-linux-2/gpu/recommended/ecs_agent_version", "LastModifiedDate": 1555434128.801, "Value": "1.27.0", "Version": 8, "Type": "String", "ARN": "arn:aws:ssm:us-east-2::parameter/aws/service/ecs/optimized-ami/amazon-linux-2/gpu/recommended/ecs_agent_version" }, { "Name": "/aws/service/ecs/optimized-ami/amazon-linux-2/gpu/recommended/ecs_runtime_version", "LastModifiedDate": 1548368308.213, "Value": "Docker version 18.06.1-ce", "Version": 1, "Type": "String", "ARN": "arn:aws:ssm:us-east-2::parameter/aws/service/ecs/optimized-ami/amazon-linux-2/gpu/recommended/ecs_runtime_version" }, { "Name": "/aws/service/ecs/optimized-ami/amazon-linux-2/gpu/recommended/image_id", "LastModifiedDate": 1555434128.749, "Value": "ami-083c800fe4211192f", "Version": 9, "Type": "String", "ARN": "arn:aws:ssm:us-east-2::parameter/aws/service/ecs/optimized-ami/amazon-linux-2/gpu/recommended/image_id" }, { "Name": "/aws/service/ecs/optimized-ami/amazon-linux-2/gpu/recommended/image_name", "LastModifiedDate": 1555434128.712, "Value": "amzn2-ami-ecs-gpu-hvm-2.0.20190402-x86_64-ebs", "Version": 9, "Type": "String",

57

Page 63: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南啟動範本支援

"ARN": "arn:aws:ssm:us-east-2::parameter/aws/service/ecs/optimized-ami/amazon-linux-2/gpu/recommended/image_name" }, { "Name": "/aws/service/ecs/optimized-ami/amazon-linux-2/gpu/recommended/os", "LastModifiedDate": 1548368308.143, "Value": "Amazon Linux 2", "Version": 1, "Type": "String", "ARN": "arn:aws:ssm:us-east-2::parameter/aws/service/ecs/optimized-ami/amazon-linux-2/gpu/recommended/os" }, { "Name": "/aws/service/ecs/optimized-ami/amazon-linux-2/gpu/recommended/schema_version", "LastModifiedDate": 1548368307.914, "Value": "1", "Version": 1, "Type": "String", "ARN": "arn:aws:ssm:us-east-2::parameter/aws/service/ecs/optimized-ami/amazon-linux-2/gpu/recommended/schema_version" } ]}

Python

from __future__ import print_function

import boto3

ssm = boto3.client('ssm', 'us-east-2')

response = ssm.get_parameters_by_path(Path='/aws/service/ecs/optimized-ami/amazon-linux-2/gpu/recommended')for parameter in response['Parameters']: print(parameter['Name'] + " = " + parameter['Value'])

這時輸出會包含在指定路徑上,使用完整路徑名稱的全部參數名稱的值:

/aws/service/ecs/optimized-ami/amazon-linux-2/gpu/recommended/ecs_agent_version = 1.27.0/aws/service/ecs/optimized-ami/amazon-linux-2/gpu/recommended/ecs_runtime_version = Docker version 18.06.1-ce/aws/service/ecs/optimized-ami/amazon-linux-2/gpu/recommended/image_id = ami-083c800fe4211192f/aws/service/ecs/optimized-ami/amazon-linux-2/gpu/recommended/image_name = amzn2-ami-ecs-gpu-hvm-2.0.20190402-x86_64-ebs/aws/service/ecs/optimized-ami/amazon-linux-2/gpu/recommended/os = Amazon Linux 2/aws/service/ecs/optimized-ami/amazon-linux-2/gpu/recommended/schema_version = 1

如需詳細資訊,請參閱 Amazon Elastic Container Service Developer Guide中的擷取 Amazon ECS 最佳化的 AMI 中繼資料。

啟動範本支援AWS Batch支援在您的運算環境中使用 Amazon EC2 啟動範本。Launch 範本支援可讓您修改 AWS Batch運算資源的預設組態,而不必建立自訂的 AMI。

58

Page 64: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南啟動範本中的 Amazon EC2 使用者資料

您必須先建立啟動範本,才能將它與運算環境建立關聯。您可以在 Amazon EC2 主控台中建立啟動範本,或者您可以使用 AWS CLI 或 AWS 軟體開發套件。例如,以下的 JSON 檔案代表對預設 AWS Batch 運算資源AMI 調整 Docker 資料磁碟區大小的啟動範本,同時也會將它加密。

{ "LaunchTemplateName": "increase-container-volume-encrypt", "LaunchTemplateData": { "BlockDeviceMappings": [ { "DeviceName": "/dev/xvdcz", "Ebs": { "Encrypted": true, "VolumeSize": 100, "VolumeType": "gp2" } } ] }}

您可以透過將 JSON 儲存至名稱為 lt-data.json 的檔案和執行下列 AWS CLI 命令來建立上述啟動範本:

aws ec2 --region <region> create-launch-template --cli-input-json file://lt-data.json

如需啟動範本的詳細資訊,請參閱 Amazon EC2 User Guide for Linux Instances 中的從啟動範本啟動執行個體。

如果您使用啟動範本建立您的運算環境,您可以將以下現有的運算環境參數移至您的啟動範本:Note

如果任何這些參數 (除了 Amazon EC2 標籤) 已在啟動範本和運算環境組態中指定,則會優先使用運算環境參數。啟動範本和運算環境組態之間的 Amazon EC2 標籤將會合併。如果標籤的金鑰產生衝突,則會優先使用運算環境組態中的值。

• Amazon EC2 金鑰對• Amazon EC2 AMI ID• 安全群組 ID• Amazon EC2 標籤

AWS Batch 會忽略以下的啟動範本參數:

• 執行個體類型 (在您建立運算環境時,指定所需的執行個體類型)• 執行個體角色 (在您建立運算環境時,指定所需的執行個體角色)• 網路界面子網路 (在您建立運算環境時,指定所需的子網路)• 執行個體市場選項 (AWS Batch 必須控制「Spot 執行個體」組態)• 停用 API 終止 (AWS Batch 必須控制執行個體生命週期)

AWS Batch 不支援使用新啟動範本版本來更新運算環境。如果您更新啟動範本,您必須使用新範本建立新的運算環境,才能讓變更生效。

啟動範本中的 Amazon EC2 使用者資料當您的執行個體啟動時,您可以在由 cloud-init 所執行的啟動範本中提供 Amazon EC2 使用者資料。您的使用者資料可以執行常見的組態案例,包括但不限於:

59

Page 65: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南啟動範本中的 Amazon EC2 使用者資料

• 包括使用者或群組• 安裝套件• 建立分區和檔案系統

啟動範本中的 Amazon EC2 使用者資料必須位於 MIME 分段存檔格式中,因為您的使用者資料會與用於設定您運算資源所需的其他 AWS Batch 使用者資料合併。您可以將多個使用者資料區塊組合在一起成為單一MIME 分段檔案。例如,您可能想要結合設定 Docker 協助程式的雲端 boothook,以及寫入 Amazon ECS 容器代理組態資訊的使用者資料 shell 指令碼。

如果您使用的是 AWS CloudFormation,AWS::CloudFormation::Init 類型可與 cfn-init 輔助標記指令碼搭配使用,以執行常見組態案例。

MIME 分段檔案包含下列元件:

• 內容類型和部分邊界宣告:Content-Type: multipart/mixed; boundary="==BOUNDARY=="

• MIME 版本宣告:MIME-Version: 1.0

• 包含以下元件的一或多個使用者資料區塊:• 開啟邊界,表示使用者資料區塊的開始:--==BOUNDARY==

• 區塊的內容類型宣告:Content-Type: text/cloud-config; charset="us-ascii"。如需內容類型的詳細資訊,請參閱「Cloud-Init 說明文件」。

• 使用者資料的內容,例如,shell 命令或 cloud-init 指令的清單• 結束邊界,表示 MIME 分段檔案的結束:--==BOUNDARY==--

以下是一些您可以用來建立自己的範例 MIME 分段檔案。Note

如果您將使用者資料新增到 Amazon EC2 主控台中的啟動範本,您能夠以純文字貼上或從檔案上傳。如果您使用 AWS CLI 或 AWS 軟體開發套件,當您呼叫 CreateLaunchTemplate 時,您必須先base64 編碼使用者資料,並將該字串以 UserData 參數值提交,如以下 JSON 所示。

{ "LaunchTemplateName": "base64-user-data", "LaunchTemplateData": { "UserData": "ewogICAgIkxhdW5jaFRlbXBsYXRlTmFtZSI6ICJpbmNyZWFzZS1jb250YWluZXItdm9sdW..." }}

範例• 範例:掛載現有的 Amazon EFS 檔案系統 (p. 60)• 範例:覆寫預設的 Amazon ECS 容器代理程式組態 (p. 61)• 範例:掛載現有的 Amazon FSx for Lustre 檔案系統 (p. 61)

範例:掛載現有的 Amazon EFS 檔案系統Example

此範例 MIME 多段檔案會設定運算資源,以在 /mnt/efs 上安裝 amazon-efs-utils 套件和掛載現有的Amazon EFS 檔案系統。

MIME-Version: 1.0Content-Type: multipart/mixed; boundary="==MYBOUNDARY=="

--==MYBOUNDARY==

60

Page 66: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南啟動範本中的 Amazon EC2 使用者資料

Content-Type: text/cloud-config; charset="us-ascii"

packages:- amazon-efs-utils

runcmd:- file_system_id_01=fs-abcdef123- efs_directory=/mnt/efs

- mkdir -p ${efs_directory}- echo "${file_system_id_01}:/ ${efs_directory} efs tls,_netdev" >> /etc/fstab- mount -a -t efs defaults

--==MYBOUNDARY==--

範例:覆寫預設的 Amazon ECS 容器代理程式組態Example

此範例 MIME 多段檔案會覆寫運算資源預設的 Docker 影像清除設定。

MIME-Version: 1.0Content-Type: multipart/mixed; boundary="==MYBOUNDARY=="

--==MYBOUNDARY==Content-Type: text/x-shellscript; charset="us-ascii"

#!/bin/bashecho ECS_IMAGE_CLEANUP_INTERVAL=60m >> /etc/ecs/ecs.configecho ECS_IMAGE_MINIMUM_CLEANUP_AGE=60m >> /etc/ecs/ecs.config

--==MYBOUNDARY==--

範例:掛載現有的 Amazon FSx for Lustre 檔案系統Example

此範例 MIME 多段檔案會設定運算資源,以在 /scratch 上從 Extras Library 安裝 lustre2.10 套件和掛載現有的 Amazon FSx for Lustre 檔案系統。此範例適用於 Amazon Linux 2。如需其他 Linux 發行版的安裝指示,請參閱 Amazon FSx for Lustre User Guide 中的 Installing the Lustre Client。

MIME-Version: 1.0Content-Type: multipart/mixed; boundary="==MYBOUNDARY=="

--==MYBOUNDARY==Content-Type: text/cloud-config; charset="us-ascii"

runcmd:- file_system_id_01=fs-0abcdef1234567890- region=us-east-2- fsx_directory=/scratch- amazon-linux-extras install -y lustre2.10- mkdir -p ${fsx_directory}- mount -t lustre ${file_system_id_01}.fsx.${region}.amazonaws.com@tcp:fsx ${fsx_directory}

--==MYBOUNDARY==--

在容器內容的磁碟區和 mountPoints 成員中,掛載點必須對應到容器中。

{ "volumes": [

61

Page 67: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南建立運算環境

{ "host": { "sourcePath": "/scratch" }, "name": "Scratch" } ], "mountPoints": [ { "containerPath": "/scratch", "sourceVolume": "Scratch" } ],}

建立運算環境在您可以在 AWS Batch 執行任務之前,您需要建立運算環境。您可以建立一個受管運算環境,其中 AWSBatch 會根據您的規格管理環境內的執行個體,您也可以建立一個未受管運算環境,由您處理環境內執行個體的設定。

建立受管運算環境

1. 開啟位於 https://console.aws.amazon.com/batch/ 的 AWS Batch 主控台。2. 從導覽列中選取要使用的區域。3. 在導覽窗格中,選擇 Compute environments (運算環境) 和 Create environment (建立環境)。4. 設定環境。

a. 在 Compute environment type (運算環境類型) 中,選擇 Managed (受管)。b. 在 Compute environment name (運算環境名稱) 中,為您的運算環境指定獨一無二的名稱。最多可

達 128 個字元 (大小寫)、數字、連字號和底線。c. 在 Service role (服務角色) 中,選擇建立新角色或使用現有的角色。此角色允許 AWS Batch 服務代

表您呼叫需要的 AWS API。如需詳細資訊,請參閱 AWS Batch 服務 IAM 角色 (p. 81)。如果您選擇建立新角色,會為您建立所需的角色 (AWSBatchServiceRole)。

d. 在 Instance role (執行個體角色) 中,選擇建立新的執行個體描述檔,或使用附有所需 IAM 許可的現有執行個體描述檔。此執行個體描述檔允許為您的運算環境建立的 Amazon ECS 容器執行個體,代表您呼叫所需的 AWS API。如需詳細資訊,請參閱 Amazon ECS 執行個體角色 (p. 84)。如果您選擇建立新的執行個體描述檔,會為您建立所需的角色 (ecsInstanceRole)。

e. 在 EC2 key pair (EC2 金鑰對) 中,選擇現有的 Amazon EC2 金鑰對以在啟動時與執行個體建立關聯。此金鑰對可讓您使用 SSH 連接至您的執行個體 (確保您的安全群組允許通過連接埠 22 的傳入)。

f. 確保選取 Enable compute environment (啟用運算環境),以讓您的運算環境接受來自 AWS Batch任務排程器的任務。

5. 設定您的運算資源。

a. 在 Provisioning model (佈建模型) 中,選擇 On-Demand (隨需) 來啟動 Amazon EC2 隨需執行個體或 Spot 來使用 Amazon EC2 Spot 執行個體。

b. 如果選擇使用 Spot 執行個體:

i. (選用) 在 Maximum Price (最高價) 中,選擇啟動執行個體之前,與該執行個體類型的隨需價格比較時,Spot 執行個體價格必須達到的最大百分比。例如,如果您的最高價為 20%,Spot 價格則必須低於該 EC2 執行個體目前隨需價格的 20%。您一律會支付最低價 (市價) 且絕不超過您的最大百分比。如果您將此欄位空,預設值是隨需價格的 100%。

62

Page 68: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南建立運算環境

ii. 在 Spot fleet role (Spot Fleet 角色) 中,選擇現有的 Amazon EC2 Spot Fleet IAM 角色以應用至您的 Spot 運算環境。如果您未擁有現有的 Amazon EC2 Spot Fleet IAM 角色,則必須先建立一個。如需詳細資訊,請參閱 Amazon EC2 Spot Fleet 角色 (p. 84)。

Important

若要在建立時標記您的 Spot 執行個體 (請參閱Step 7 (p. 64)),您的 Amazon EC2Spot Fleet IAM 角色必須使用較新的 AmazonEC2SpotFleetTaggingRole 受管政策。AmazonEC2SpotFleetRole 受管政策沒有標記 Spot 執行個體的所需權限。如需詳細資訊,請參閱 建立時未標籤 Spot 執行個體 (p. 113)。

c. 在 Allowed instance types (允許的執行個體類型) 中,選擇可以啟動的 Amazon EC2 執行個體類型。您可以指定執行個體系列,以在這些系列中啟動任何執行個體類型 (例如 c5、c5n 或 p3),或是在系列中指定特定大小 (例如 c5.8xlarge)。請注意,金屬執行個體類型不在執行個體系列中(例如 c5 不包含) c5.metal。 您也可以選擇 optimal,立即挑選符合您任務佇列需求的執行個體類型 (C、M、R 執行個體系列)。

Note

在建立運算環境時,您為其選取的執行個體類型必須共用相同架構。例如,您無法在相同的運算環境中混合使用 x86 和 ARM 執行個體。

Note

AWS Batch 將擴展 GPU 在任務量根據所需的佇列。若要使用 GPU 排程,運算環境必須包含源自 p2、p3、g3、g3s 或 g4 系列的執行個體類型。

d. 如為配置策略,從允許的執行個體類型清單中選取執行個體類型時,選取要使用的配置策略。如需詳細資訊,請參閱 the section called “配置策略” (p. 70)。

e. (選用) 對於 Launch template (啟動範本),請選取現有的 Amazon EC2 啟動範本以設定您的運算資源;預設版本的範本已自動填入。如需詳細資訊,請參閱 啟動範本支援 (p. 58)。

f. (選用) 對於 Launch template version (啟動範本版本),請輸入 $Default、$Latest 或指定要使用的版本號碼。

Important

建立運算環境後,即使啟動範本的 $Default 或 $Latest 版本已更新,所使用的啟動範本版本也不會變更。若要使用新的啟動範本版本,請建立新的運算環境,將新的運算環境新增至現有的任務佇列,從任務佇列中移除舊的運算環境,然後刪除舊的運算環境。

g. 在 Minimum vCPUs (最小 vCPU 數) 中,選擇無論您的任務佇列需求為何,運算環境需要維持的最小 EC2 vCPU 數量。

h. 在 Desired vCPUs (所需 vCPU 數) 中,選擇您的運算環境啟動時使用的 EC2 vCPU 數量。隨著任務佇列需求增加,AWS Batch 可以增加運算環境的所需 vCPU 數,並新增 EC2 執行個體 (最多達最大 vCPU 數)。隨著需求減少,AWS Batch 可以減少運算環境的所需 vCPU 數,並移除執行個體(最少可達最小 vCPU 數)。

i. 在 Minimum vCPUs (最小 vCPU 數) 中,選擇無論您的任務佇列需求為何,運算環境可擴展的最大EC2 vCPU 數量。

j. (選用) 核取 Enable user-specified AMI ID (啟用使用者指定 &AMI; ID),以使用您自訂的 AMI。根據預設,AWS Batch 受管運算環境針對運算資源,使用最新核准的 Amazon ECS 最佳化 AMI 版本。您可以遵循運算資源 AMI 規格,在運算環境中建立並使用自己的 AMI。如需詳細資訊,請參閱 運算資源 AMI (p. 52)。

Note

您為運算環境選擇的 AMI 必須符合您打算用於該運算環境之執行個體類型的架構。例如,如果您的運算環境使用 A1 執行個體類型,則您所選擇的運算資源 AMI 必須支援 ARM 執行個體。Amazon ECS 同時銷售 x86 和 ARM 版本的 Amazon ECS 最佳化 Amazon Linux2 AMI。如需詳細資訊,請參閱 Amazon Elastic Container Service Developer Guide 中的Amazon ECS 最佳化 Amazon Linux 2AMI。63

Page 69: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南建立運算環境

• 在 AMI ID 中,貼上自訂的 AMI ID 並選擇 Validate AMI (驗證 &AMI;)。6. 設定網路。

Important

需要存取權限,以便與 Amazon ECS 服務端點通訊。您可以透過界面 VPC 端點或透過擁有。如需有關界面 VPC 端點的詳細資訊,請參閱 Amazon Elastic Container Service DeveloperGuide 中的 。如果您沒有已設定的界面 VPC 端點,且您的不具有公有 IP 地址,則它們必須使用網路位址轉譯 (NAT) 來提供存取。如需詳細資訊,請參閱本指南 Amazon VPC User Guide。如需更多詳細資訊,請參閱 教學:為建立含公有和私有子網路的 VPC (p. 98)。

a. 在 VPC ID 中,選擇啟動您的執行個體的 VPC。b. 在 Subnets (子網路) 中,從選定的 VPC 選擇託管您的執行個體的子網路。根據預設,會選擇所有

選定的 VPC 內的子網路。c. 在 Security groups (安全群組) 中,選擇連接至您的執行個體的安全群組。根據預設,會選擇您的

VPC 預設的安全群組。7. (選用) 標記您的執行個體。舉例來說,您可以將 "Name": "AWS Batch Instance -

C4OnDemand" 指定為標籤,以讓運算環境中的每個執行個體都擁有該名稱。這有助於在 Amazon EC2主控台中識別您的 AWS Batch 執行個體。

8. 選擇 Create (建立政策) 以完成操作。

建立未受管運算環境

1. 開啟位於 https://console.aws.amazon.com/batch/ 的 AWS Batch 主控台。2. 從導覽列中選取要使用的區域。3. 在導覽窗格中,選擇 Compute environments (運算環境) 和 Create environment (建立環境)。4. 在 Compute environment type (運算環境類型) 中,選擇 Unmanaged (未受管)。5. 在 Compute environment name (運算環境名稱) 中,為您的運算環境指定獨一無二的名稱。最多可達

128 個字元 (大小寫)、數字、連字號和底線。6. 在 Service role (服務角色) 中,選擇建立新的角色或使用現有的角色,此角色允許 AWS Batch 服務代表

您呼叫需要的 AWS API。如需詳細資訊,請參閱 AWS Batch 服務 IAM 角色 (p. 81)。如果您選擇建立新角色,會為您建立所需的角色 (AWSBatchServiceRole)。

7. 確保選取 Enable compute environment (啟用運算環境),以讓您的運算環境接受來自 AWS Batch 任務排程器的任務。

8. 選擇 Create (建立政策) 以完成操作。9. (選用) 在 Amazon ECS 叢集 ARN 中擷取關聯的叢集。下列 AWS CLI 命令提供運算環境的 Amazon

ECS 叢集 ARN:

aws batch describe-compute-environments --compute-environments unmanagedCE --query computeEnvironments[].ecsClusterArn

10. (選用) 在關聯的 Amazon ECS 叢集啟動容器執行個體。如需更多資訊,請參閱 Amazon ElasticContainer Service Developer Guide中的啟動 Amazon ECS 容器執行個體相關文章。啟動您的運算資源時,使用以下 Amazon ECS 使用者資料來指定資源需註冊的 Amazon EC2 叢集 ARN。將ecsClusterArn 替換成使用上一條命令取得的叢集 ARN。

#!/bin/bashecho "ECS_CLUSTER=ecsClusterArn" >> /etc/ecs/ecs.config

Note

直到您手動啟動之前,您的未受管運算環境不具有任何運算資源。

64

Page 70: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南運算環境範本

運算環境範本以下顯示空白的運算環境範本。您可以使用此範本來建立您的運算環境,隨後可儲存至檔案並搭配 AWSCLI--cli-input-json 選項使用。如需有關這些參數的詳細資訊,請參閱 AWS Batch API Reference 中的 CreateComputeEnvironment。

{ "computeEnvironmentName": "", "type": "UNMANAGED", "state": "ENABLED", "computeResources": { "type": "SPOT", "allocationStrategy": "SPOT_CAPACITY_OPTIMIZED", "minvCpus": 0, "maxvCpus": 0, "desiredvCpus": 0, "instanceTypes": [ "" ], "imageId": "", "subnets": [ "" ], "securityGroupIds": [ "" ], "ec2KeyPair": "", "instanceRole": "", "tags": { "KeyName": "" }, "placementGroup": "", "bidPercentage": 0, "spotIamFleetRole": "", "launchTemplate": { "launchTemplateId": "", "launchTemplateName": "", "version": "" } }, "serviceRole": ""}

Note

您可以使用下列 AWS CLI 命令產生上述運算環境範本。

$ aws batch create-compute-environment --generate-cli-skeleton

運算環境參數運算環境共分成五種基本元件:名稱、類型、運算環境狀態、運算資源定義 (若為受管運算環境),以及用於向 AWS Batch 提供 IAM 權限的服務角色。

主題• 運算環境名稱 (p. 66)• 類型 (p. 66)

65

Page 71: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南運算環境名稱

• 狀態 (p. 66)• 運算資源 (p. 66)• 服務角色 (p. 70)

運算環境名稱computeEnvironmentName

您的運算環境名稱。最多可達 128 個字元 (大小寫)、數字、連字號和底線。

類型:字串

必要:是

類型type

運算環境類型。選擇 MANAGED 以讓 AWS Batch 管理您定義的運算資源。如需詳細資訊,請參閱 運算資源 (p. 66)。選擇 UNMANAGED 以管理自己的運算資源。

類型:字串

有效值:MANAGED | UNMANAGED

必要:是

狀態state

運算環境狀態。

如果狀態為 ENABLED,AWS Batch 排程器可嘗試在環境內的運算資源,放置來自關聯任務佇列的任務。如果運算環境為受管型,則可根據任務佇列的需求自動擴展或縮減其執行個體。

如果狀態為 DISABLED,AWS Batch 排程器不會嘗試在環境內放置任務。處於 STARTING 或 RUNNING狀態的任務會繼續正常執行。DISABLED 狀態的受管運算環境不會向外擴展,但是一旦執行個體閒置,他們就會向內擴展至滿足 minvCpus 值的最小執行個體數目。

類型:字串

有效值:ENABLED | DISABLED

必要:否

運算資源computeResources

由運算環境管理的運算資源詳細資訊。

類型:ComputeResource 物件

66

Page 72: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南運算資源

必要:受管運算環境必須擁有此參數type

運算環境類型。使用此參數來指定要在運算環境使用 Amazon EC2 隨需執行個體,還是 AmazonEC2 Spot 執行個體。如果您選擇 SPOT,您還必須使用 spotIamFleetRole 參數指定 AmazonEC2 Spot Fleet 角色。如需詳細資訊,請參閱 Amazon EC2 Spot Fleet 角色 (p. 84)。

有效值:EC2 | SPOT

必要:是allocationStrategy

找不到足夠的最佳執行個體類型執行個體時,要針對電腦資源使用的配置策略。這可能是因為區域中的執行個體類型可用性或 Amazon EC2 Service Limits 所致。如果未指定此選項,則預設值為 BEST_FIT,如果沒有預設值可用,則此值將僅使用最佳執行個體類型以等候有其他容量可用。這種配置策略可以降低成本,但可以限制擴展。 BEST_FIT_PROGRESSIVE 將選擇夠大型、可滿足佇列中任務需求的其他執行個體類型,優先選擇每單位 vCPU 具有較低成本的執行個體類型。SPOT_CAPACITY_OPTIMIZED 僅適用於 Spot 執行個體運算資源,並且將選擇夠大、可滿足佇列中任務需求的其他執行個體類型,並優先選取不太可能中斷的執行個體類型。

有效值:BEST_FIT | BEST_FIT_PROGRESSIVE | SPOT_CAPACITY_OPTIMIZED

必要:否minvCpus

環境中應維護的最低 Amazon EC2 vCPU 數量 (即使運算環境為 DISABLED)。

類型:整數

必要:是maxvCpus

環境可達到的最大 Amazon EC2 vCPU 數量。

Note

有了 BEST_FIT_PROGRESSIVE 與 SPOT_CAPACITY_OPTIMIZED 配置策略,AWSBatch 可能需要上述 maxvCpus 以符合您的容量需求。在此事件中,AWS Batch 絕對不會超過 maxvCpus 單一執行個體 (例如,在運算環境中指定的執行個體中,不會超過單一執行個體)。

類型:整數

必要:是desiredvCpus

運算環境所需的 Amazon EC2 vCPUS 數量。根據任務佇列的需求,AWS Batch 會將這個值修改為介於最大和最小值。

類型:整數

必要:否instanceTypes

可能會啟動的執行個體類型。您可以指定執行個體系列,以在這些系列中啟動任何執行個體類型 (例如 c5、c5n 或 p3),或是在系列中指定特定大小 (例如 c5.8xlarge)。請注意,金屬執行個體類型不在執行個體系列中 (例如 c5 不包含) c5.metal。 您也可以選擇 optimal,立即挑選符合您任務佇列需求的執行個體類型 (C、M、R 執行個體系列)。

67

Page 73: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南運算資源

Note

在建立運算環境時,您為其選取的執行個體類型必須共用相同架構。例如,您無法在相同的運算環境中混合使用 x86 和 ARM 執行個體。

類型:字串陣列

必要:是imageId

用於運算環境啟動的執行個體的 Amazon Machine Image (AMI) ID。Note

您為運算環境選擇的 AMI 必須符合您打算用於該運算環境之執行個體類型的架構。例如,如果您的運算環境使用 A1 執行個體類型,則您所選擇的運算資源 AMI 必須支援 ARM 執行個體。Amazon ECS 同時銷售 x86 和 ARM 版本的 Amazon ECS 最佳化 Amazon Linux2 AMI。如需詳細資訊,請參閱 Amazon Elastic Container Service Developer Guide 中的Amazon ECS 最佳化 Amazon Linux 2AMI。

類型:字串

必要:否subnets

啟動運算資源的 VPC 子網路。這些子網路必須位於相同的 VPC 中。

類型:字串陣列

必要:是securityGroupIds

與運算環境啟動的執行個體建立關聯的 EC2 安全群組。

類型:字串陣列

必要:是ec2KeyPair

用於運算環境啟動的執行個體的 EC2 金鑰對。您可以使用此金鑰對,經由 SSH 登入您的執行個體。

類型:字串

必要:否instanceRole

用來連接至運算環境中 Amazon EC2 執行個體的 Amazon ECS 執行個體描述檔。您可以指定執行個體描述檔的簡稱或完整的 Amazon Resource Name (ARN)。例如,ecsInstanceRole 或arn:aws:iam::aws_account_id:instance-profile/ecsInstanceRole。如需詳細資訊,請參閱 Amazon ECS 執行個體角色 (p. 84)。

類型:字串

必要:是tags

要應用至運算環境啟動的執行個體的金鑰值對標籤。舉例來說,您可以將 "Name": "AWS BatchInstance - C4OnDemand" 指定為標籤,以讓運算環境中的每個執行個體都擁有該名稱。這有助於在 Amazon EC2 主控台中識別您的 AWS Batch 執行個體。

68

Page 74: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南運算資源

類型:字串到字串對應

必要:否bidPercentage

啟動執行個體之前,與該執行個體類型的隨需價格比較時,Spot 執行個體價格能夠達到的最大百分比。例如,如果您的百分比上限為 20%,Spot 價格則必須低於該 EC2 執行個體目前隨需價格的20%。您一律會支付最低價 (市價) 且絕不超過您的最大百分比。如果您將此欄位空,預設值是隨需價格的 100%。

必要:否spotIamFleetRole

應用至 SPOT 運算環境的 Amazon EC2 Spot Fleet IAM 角色的 Amazon Resource Name (ARN)。如需詳細資訊,請參閱 Amazon EC2 Spot Fleet 角色 (p. 84)。

Important

若要在建立時標記您的 Spot 執行個體,這裡指定的 Spot Fleet IAM 角色必須使用較新的AmazonEC2SpotFleetTaggingRole 受管政策。先前建議的 AmazonEC2SpotFleetRole 受管政策,沒有標記 Spot 執行個體的所需權限。如需詳細資訊,請參閱 建立時未標籤 Spot執行個體 (p. 113)。

類型:字串

必要:SPOT 運算環境必須擁有此參數。launchTemplate

要與您運算資源相關聯的選用啟動範本。若要使用啟動範本,您必須在請求中擇一指定啟動範本 ID或啟動範本名稱,而非同時指定兩者。如需更多詳細資訊,請參閱 啟動範本支援 (p. 58)。

類型:LaunchTemplateSpecification

物件

必要:否launchTemplateId

啟動範本的 ID。

類型:字串

必要:否launchTemplateName

啟動範本的名稱。

類型:字串

必要:否version

啟動範本的版本編號。

類型:字串

必要:否

69

Page 75: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南服務角色

服務角色serviceRole

IAM 角色的完整 Amazon Resource Name (ARN),此角色允許 AWS Batch 代表您呼叫其他 AWS 服務。如需詳細資訊,請參閱 AWS Batch 服務 IAM 角色 (p. 81)。

類型:字串

必要:是

配置策略建立受管理的運算環境時,AWS Batch 將從 instanceTypes 指定最符合任務需求的執行個體類型中選取。配置策略會在 AWS Batch 需要額外容量時定義行為。

BEST_FIT

AWS Batch 會在最符合具有最低成本的執行個體類型中,選取最符合任務需求的執行個體類型。如果選取的執行個體類型的其他執行個體無法使用,則 AWS Batch 將等候至有其他執行個體可用。如果沒有足夠的執行個體可用,或如果使用者達到 Amazon EC2 Service Limits,則在目前執行中的任務完成之前,系統都不會執行其他任務。這種配置策略可以降低成本,但可能限制擴展。

BEST_FIT_PROGRESSIVE

AWS Batch 將選擇夠大型、可滿足佇列中任務需求的其他執行個體類型,並優先選擇每單位 vCPU 成本較低的執行個體類型。如果先前選取之執行個體類型的其他執行個體無法使用,AWS Batch 將選取新的執行個體類型。

SPOT_CAPACITY_OPTIMIZED

AWS Batch 將選取一個或多個足以滿足佇列中任務需求的執行個體類型,且以較不可能中斷的執行個體類型為首選。此配置策略僅適用於 Spot 執行個體運算資源。

有了 BEST_FIT_PROGRESSIVE 與 SPOT_CAPACITY_OPTIMIZED 策略,AWS Batch 可能需要上述maxvCpus 以符合您的容量需求。在這種情況下,AWS Batch 永遠不會超過 maxvCpus 單一執行個體。

記憶體管理當 Amazon ECS 容器代理程式將 註冊到 時,代理程式必須判斷 有多少可用記憶體能預留給您的 。由於存在平台記憶體額外負荷和由系統核心佔用的記憶體,這數字會與 Amazon EC2 執行個體公告的安裝記憶體數量不同。舉例而言,m4.large 執行個體安裝了 8 GiB 的記憶體。但在 註冊時,並非總是有剛剛好 8192MiB 的記憶體可供 使用。

若指定 8192 MiB 供 使用,而您沒有任何 擁有 8192 MiB 或更多記憶體可滿足此需求, 便無法放置到您的 。

如需更多詳細資訊,請參閱 預留系統記憶體 (p. 71)。

Amazon ECS 容器代理程式會使用 Docker ReadMemInfo() 函數來查詢作業系統可用的記憶體總量。Linux命令列公用程式來判斷記憶體總量。

Example - 判定 Linux 記憶體總量

free 命令會傳回作業系統辨識出的記憶體總量。

70

Page 76: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南預留系統記憶體

$ free -b

於 Amazon ECS-optimized Amazon Linux AMI 上執行的 m4.large 執行個體輸出範例。

total used free shared buffers cachedMem: 8373026816 348180480 8024846336 90112 25534464 205418496-/+ buffers/cache: 117227520 8255799296

執行個體的記憶體總量有 8373026816 位元組,轉為任務可使用的記憶體則有 7985 MiB。

預留系統記憶體若您的 佔用了 上所有的記憶體, 可能會與重要的系統程序爭奪記憶體,也許會引發系統故障。AmazonECS 容器代理程式提供了一個名為 ECS_RESERVED_MEMORY 的組態變數,可從分配給 的集區移除指定 MiB量的記憶體。如此便能有效保留記憶體供重要系統程序使用。這可為重要系統程序有效地預留記憶體。

檢視 記憶體您可以在 Amazon ECS 主控台中檢視 註冊的記憶體量 (也可以使用 DescribeContainerInstances API 操作)。若要為特定執行個體類型的 提供更多記憶體,以提升資源使用率,可以看一下 有多少可用的記憶體量,再將可用的記憶體量分配給 。

查看 記憶體

1. Open the Amazon ECS console at https://console.aws.amazon.com/ecs/.2. 選擇代管您的 叢集即可檢視。3. 選擇 ECS Instances (ECS 執行個體),再從 Container Instance (容器執行個體) 欄選取即可檢視。4. Resources (資源) 區段會顯示已註冊和可使用的記憶體。

Registered (已註冊) 的記憶體值是首次啟動時向 Amazon ECS 註冊的記憶體量,而 Available (可用) 記憶體的值則是尚未分配給的記憶體量。

71

Page 77: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南

Elastic Fabric AdapterElastic Fabric Adapter (EFA) 是一種用於加速高效能運算 (HPC) 應用程式的裝置。如果符合以下條件,AWSBatch 支援使用 EFA 的應用程式。

• 運算環境中只包含支援的執行個體類型(c5n.18xlarge、c5n.metal、i3en.24xlarge、m5dn.24xlarge、m5n.24xlarge、r5dn.24xlarge、r5n.24xlarge和 p3dn.24xlarge)。

• AMI 中支援 EFA 的作業系統:Amazon Linux、Amazon Linux 2、Red Hat Enterprise Linux 7.6、CentOS7.6、Ubuntu 16.04、Ubuntu 18.04。

• AMI 已載入 EFA 驅動程式。• EFA 的安全群組必須允許往返於其本身的所有傳入和傳出流量。• 使用 EFA 的所有執行個體都應該位於相同的叢集置放群組中。• 任務定義必須包含 hostPath 設定為 /dev/infiniband/uverbs0 的 devices 成員,以允許 EFA 裝

置傳遞到容器。如果已指定 containerPath,它也必須設定為 /dev/infiniband/uverbs0。如果已設定 permissions,它必須設定為 READ | WRITE | MKNOD。

LinuxParameters 的位置將不同於多節點平行作業和單一節點容器任務。以下範例示範其差異,但缺少必要的值。

Example 多節點平行任務範例

{ "jobDefinitionName": "EFA-MNP-JobDef", "type": "multinode", "nodeProperties": { ... "nodeRangeProperties": [ { ... "container": { ... "linuxParameters": { "devices": [ { "hostPath": "/dev/infiniband/uverbs0", "containerPath": "/dev/infiniband/uverbs0", "permissions": [ "READ", "WRITE", "MKNOD" ] }, ], }, }, }, ], },}

Example 單一節點容器任務範例

{ "jobDefinitionName": "EFA-Container-JobDef", "type": "container", ...

72

Page 78: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南

"containerProperties": { ... "linuxParameters": { "devices": [ { "hostPath": "/dev/infiniband/uverbs0", }, ], }, },}

如需詳細資訊,請參閱 Amazon EC2 User Guide for Linux Instances中的 Elastic Fabric Adapter。

73

Page 79: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南政策結構

AWS Batch IAM 政策、角色和許可預設情況下,IAM 使用者並未具備建立或修改 AWS Batch 資源或使用 AWS Batch API 執行任務的許可。這表示他們也無法使用 AWS Batch 主控台或 AWS CLI 執行這些作業。若要允許 IAM 使用者建立或修改資源並提交任務,您必須建立 IAM 政策,其會授與 IAM 使用者使用特定資源和 API 動作時所需的許可。然後,將這些政策連接至需要這些許可的 IAM 使用者或群組。

將政策附加至使用者或使用者群組時,政策會允許或拒絕使用者對特定資源執行特定任務的許可。如需詳細資訊,請參閱 IAM User Guide 中的許可與政策。如需管理和建立自訂 IAM 政策的詳細資訊,請參閱管理IAM 政策。

同樣地,AWS Batch 代您呼叫其他 AWS 服務,所以本服務必須使用您的登入資料進行身分驗證。要完成此身分驗證,需建立可提供這些許可的 IAM 角色和政策,然後在建立您的運算環境時將其與該角色相關聯。如需詳細資訊,請參閱 IAM User Guide 中的 Amazon ECS 執行個體角色 (p. 84)、IAM 角色、使用服務連結角色 及 建立角色以將許可委派給 AWS 服務。

入門

IAM 政策必須授予或拒絕使用一項或多項 AWS Batch 動作的許可。

主題• 政策結構 (p. 74)• AWS Batch API 動作支援的資源層級許可 (p. 76)• 範例政策 (p. 77)• AWS Batch 受管政策 (p. 80)• 建立 AWS Batch IAM 政策 (p. 81)• AWS Batch 服務 IAM 角色 (p. 81)• Amazon ECS 執行個體角色 (p. 84)• Amazon EC2 Spot Fleet 角色 (p. 84)• CloudWatch Events IAM 角色 (p. 86)

政策結構下列主題說明 IAM 政策的結構。

主題• 政策語法 (p. 74)• AWS Batch 動作 (p. 75)• AWS Batch 的 Amazon Resource Name (p. 75)• 檢查使用者已具備必要的許可 (p. 76)

政策語法IAM 政策為包含一或多個陳述式的 JSON 文件。每個陳述式的結構如下所示:

{ "Statement":[{

74

Page 80: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南AWS Batch 動作

"Effect":"effect", "Action":"action", "Resource":"arn", "Condition":{ "condition":{ "key":"value" } } } ]}

陳述式由各種元素組成:

• Effect (效果):效果 可以是 Allow 或 Deny。根據預設,IAM 使用者沒有使用資源和 API 動作的許可,因此所有請求均會遭到拒絕。明確允許覆寫預設值。明確拒絕覆寫任何允許.

• Action (動作):動作 是您授予或拒絕許可的特定 API 動作。若要了解指定動作,請參閱AWS Batch 動作 (p. 75)。

• Resource (資源):受動作影響的資源。有些 AWS Batch API 動作可讓您在政策中包含可由動作建立或修改的特定資源。若要在陳述式中指定資源,請使用它的 Amazon Resource Name (ARN)。如需詳細資訊,請參閱 AWS Batch API 動作支援的資源層級許可 (p. 76) 及 AWS Batch 的 Amazon ResourceName (p. 75)。如果 AWS Batch API 操作目前不支援資源層級許可,則您必須使用 * 萬用字元指定所有可能受動作影響的資源。

• Condition (條件):條件為選擇性。您可以使用它們來控制何時政策開始生效。

如需 AWS Batch 的範例 IAM 政策陳述式的詳細資訊,請參閱建立 AWS Batch IAM 政策 (p. 81)。

AWS Batch 動作在 IAM 政策陳述式中,您可以從任何支援 IAM 的服務指定任何 API 動作。針對 AWS Batch,請在 API 動作名稱使用下列字首:batch:。例如:batch:SubmitJob 和 batch:CreateComputeEnvironment。

若要在單一陳述式中指定多個動作,請用逗號分隔,如下所示:

"Action": ["batch:action1", "batch:action2"]

您也可以使用萬用字元指定多個動作。例如,您可以指定名稱開頭有「Describe」文字的所有動作,如下所示:

"Action": "batch:Describe*"

若要指定所有的 AWS Batch API 動作,請使用 * 萬用字元,如下所示:

"Action": "batch:*"

如需 AWS Batch 動作的清單,請參閱AWS Batch API Reference中的動作。

AWS Batch 的 Amazon Resource Name每個 IAM 政策陳述式都會套用到您使用其 ARN 指定的資源。

ARN 一般的語法如下所示:

arn:aws:[service]:[region]:[account]:resourceType/resourcePath

75

Page 81: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南測試許可

服務

服務 (例如,batch)。region

資源的區域 (例如,us-east-2)。帳戶

AWS 帳戶 ID,無連字號 (例如,123456789012)。resourceType

資源類型 (例如,compute-environment)。resourcePath

識別資源的路徑。您可以在路徑中使用 * 萬用字元。

AWS Batch API 操作目前支援數個 API 操作的資源層級許可。如需詳細資訊,請參閱 AWS Batch API 動作支援的資源層級許可 (p. 76)。若要指定所有資源,或如果特定的 API 動作不支援 ARN,請在 Resource元素中使用 * 萬用字元,如下所示:

"Resource": "*"

檢查使用者已具備必要的許可在您讓 IAM 政策生效之前,我們建議您檢查該政策是否授予使用者許可,允許他們使用所需要的特定 API 動作和資源。

首先,建立一個用於測試的 IAM 使用者並將 IAM 政策連接至測試使用者。接著,以測試使用者的身分提出請求。您可以在主控台或 AWS CLI 中提出測試請求。

Note

也可以用「IAM 政策模擬器」測試政策。如需政策模擬器的詳細資訊,請參閱 IAM User Guide 中的使用 IAM 政策模擬器。

如果政策未授予使用者預期的許可,或授予過多許可,您可以視需要調整政策並重新測試。重新測試,直到您取得所要的結果。

Important

政策變更的散佈可能需要幾分鐘時間才能生效。因此,我們建議您等待五分鐘,然後再測試您的政策更新。

如果授權檢查失敗,請求將傳回包含診斷資訊的編碼訊息。您可使用 DecodeAuthorizationMessage動作將訊息解碼。如需詳細資訊,請參閱《AWS Security Token Service API Reference》中的DecodeAuthorizationMessage 和《AWS CLI Command Reference》中的 decode-authorization-message。

AWS Batch API 動作支援的資源層級許可資源層級許可 一詞指能夠指定使用者可對哪些資源執行動作的能力。AWS Batch 部分支援資源層級許可。針對特定 AWS Batch 動作,您可以根據應滿足的條件,或允許使用者使用特定的資源,來控制使用者何時可以使用那些動作。例如,您可以授予使用者提交任務的許可,但僅限特定任務佇列,且僅能藉由特定的任務定義來達成。

76

Page 82: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南範例政策

下表說明目前支援資源層級許可的 AWS Batch API 動作,以及每個動作支援的資源、資源 ARN 和條件鍵。Important

若在此資料表中並未列出某個 AWS Batch API 動作,表示該動作目前不支援資源層級許可。若AWS Batch API 動作不支援資源層級許可,您可以授予使用者使用此動作的許可,但您必須針對政策陳述式中的資源元素指定 * 萬用字元。

API 動作 資源 條件鍵

RegisterJobDefinition 任務定義

arn:aws:batch:region:account:job-definition/*

arn:aws:batch:region:account:job-definition/definition-name:revision

batch:User

batch:Privileged

batch:Image

DeregisterJobDefinition 任務定義

arn:aws:batch:region:account:job-definition/*

arn:aws:batch:region:account:job-definition/definition-name:revision

提交任務 任務定義

arn:aws:batch:region:account:job-definition/*

arn:aws:batch:region:account:job-definition/definition-name:revision

任務佇列

arn:aws:batch:region:account:job-queue/*

arn:aws:batch:region:account:job-queue/queue-name

範例政策以下範例示範政策陳述式,您可以使用該陳述式來控制 IAM 使用者具有的 AWS Batch 許可。

範例• 範例:唯讀存取 (p. 77)• 範例:限制為任務提交中的 POSIX 使用者、Docker 影像、權限等級及角色 (p. 78)• 範例:在任務提交時限制任務定義前綴 (p. 79)• 例如:重新導向至任務佇列 (p. 79)

範例:唯讀存取下列政策可授予使用者使用名稱開頭為 Describe 和 List 之所有 AWS Batch API 動作的許可。

77

Page 83: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南限制使用者、影像、權限、角色

因為根據預設會拒絕使用者使用 API 動作的許可,所以使用者沒有對資源執行任何動作的許可 (除非其他陳述式授予他們該許可)。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "batch:Describe*", "batch:List*" ], "Resource": "*" } ]}

範例:限制為任務提交中的 POSIX 使用者、Docker 影像、權限等級及角色以下政策允許使用者管理自己的一組限制任務定義。

第一個和第二個陳述式允許使用者註冊及取消註冊任何名稱前綴為 JobDefA_ 的任務定義名稱。

第一個陳述式也使用條件式內容金鑰來限制任務定義內 containerProperties 的 POSIX 使用者、權限狀態,以及容器映像值。如需詳細資訊,請參閱 AWS Batch API Reference 中的 RegisterJobDefinition。在這個範例中,只有在 POSIX 使用者設為 nobody、權限旗標設為 false 以及在 Amazon ECR 儲存庫中的映像設為 myImage 才能註冊任務定義。

Important

Docker 會從容器映像中該使用者的 uid 解析 user 參數。多數情況下,可以在容器映像中的 /etc/passwd 檔案中找到此項目。此名稱解析可以透過同時在任務定義與任何相關的 IAM 政策中,使用直接 uid 值來避免。AWS Batch API 和 batch:User IAM 條件鍵皆支援數值。

第三個陳述式限制使用者只能將特定角色傳送到任務定義。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "batch:RegisterJobDefinition" ], "Resource": [ "arn:aws:batch:<aws_region>:<aws_account_id>:job-definition/JobDefA_*" ], "Condition": { "StringEquals": { "batch:User": [ "nobody" ], "batch:Image": [ "<aws_account_id>.dkr.ecr.<aws_region>.amazonaws.com/myImage" ] }, "Bool": { "batch:Privileged": "false" }

78

Page 84: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南限制任務定義

} }, { "Effect": "Allow", "Action": [ "batch:DeregisterJobDefinition" ], "Resource": [ "arn:aws:batch:<aws_region>:<aws_account_id>:job-definition/JobDefA_*" ] }, { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": [ "arn:aws:iam::<aws_account_id>:role/MyBatchJobRole" ], "Condition": { "StringEquals": { "iam:PassedToService": [ "batch.amazonaws.com" ] } } } ]}

範例:在任務提交時限制任務定義前綴以下政策允許使用者以任何任務定義名稱,將任務提交至任何名稱開頭為 JobDefA 的任務佇列。

Important

在限制任務提交的資源層級存取範圍時,您必須同時提供任務佇列和任務定義資源類型。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "batch:SubmitJob" ], "Resource": [ "arn:aws:batch:<aws_region>:<aws_account_id>:job-definition/JobDefA_*", "arn:aws:batch:<aws_region>:<aws_account_id>:job-queue/*" ] } ]}

例如:重新導向至任務佇列以下政策允許使用者以任何任務定義名稱,將任務提交至名稱為 queue1 的特定任務佇列。

Important

在限制任務提交的資源層級存取範圍時,您必須同時提供任務佇列和任務定義資源類型。

79

Page 85: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南AWS Batch 受管政策

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "batch:SubmitJob" ], "Resource": [ "arn:aws:batch:<aws_region>:<aws_account_id>:job-definition/*", "arn:aws:batch:<aws_region>:<aws_account_id>:job-queue/queue1" ] } ]}

AWS Batch 受管政策AWS Batch 提供受管政策,您可將政策附加到 IAM 使用者,提供其使用 AWS Batch 資源和 API 操作的權限。您可以直接套用此政策,或用它做為起點來建立您自己的政策。如需這些政策中所提及之各 API 操作的詳細資訊,請參閱 AWS Batch API Reference 中的動作。

AWSBatchFullAccess此政策允許完整的 AWS Batch 管理員存取權。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "batch:*", "cloudwatch:GetMetricStatistics", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups", "ec2:DescribeKeyPairs", "ec2:DescribeVpcs", "ec2:DescribeImages", "ec2:DescribeLaunchTemplates", "ec2:DescribeLaunchTemplateVersions", "ecs:DescribeClusters", "ecs:Describe*", "ecs:List*", "logs:Describe*", "logs:Get*", "logs:TestMetricFilter", "logs:FilterLogEvents", "iam:ListInstanceProfiles", "iam:ListRoles" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": [ "arn:aws:iam::*:role/AWSBatchServiceRole",

80

Page 86: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南建立 IAM 政策

"arn:aws:iam::*:role/service-role/AWSBatchServiceRole", "arn:aws:iam::*:role/ecsInstanceRole", "arn:aws:iam::*:instance-profile/ecsInstanceRole", "arn:aws:iam::*:role/iaws-ec2-spot-fleet-role", "arn:aws:iam::*:role/aws-ec2-spot-fleet-role", "arn:aws:iam::*:role/AWSBatchJobRole*" ] } ]}

建立 AWS Batch IAM 政策您可以建立特定 IAM 政策,限制您帳戶中的使用者有權存取的呼叫和資源,然後將那些政策連接到 IAM 使用者。

將政策附加至使用者或使用者群組時,政策會允許或拒絕使用者對特定資源執行特定任務的許可。如需詳細資訊,請參閱 IAM User Guide 中的許可與政策。如需管理和建立自訂 政策的詳細資訊,請參閱IAM管理 政策。

AWS Batch 服務 IAM 角色AWS Batch 會代您呼叫其他 AWS 服務,以管理您搭配本服務使用的資源。您開始使用服務之前,必須擁有IAM 政策和角色,以提供必要權限給 AWS Batch。

多數情況下,在主控台初次執行體驗時會自動為您建立 AWS Batch 服務角色。您可以使用以下程序來檢查您的帳戶是否擁有 AWS Batch 服務角色。

AWSBatchServiceRole 政策顯示如下。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:DescribeAccountAttributes", "ec2:DescribeInstances", "ec2:DescribeInstanceAttribute", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups", "ec2:DescribeKeyPairs", "ec2:DescribeImages", "ec2:DescribeImageAttribute", "ec2:DescribeSpotInstanceRequests", "ec2:DescribeSpotFleetInstances", "ec2:DescribeSpotFleetRequests", "ec2:DescribeSpotPriceHistory", "ec2:DescribeVpcClassicLink", "ec2:DescribeLaunchTemplateVersions", "ec2:CreateLaunchTemplate", "ec2:DeleteLaunchTemplate", "ec2:RequestSpotFleet", "ec2:CancelSpotFleetRequests", "ec2:ModifySpotFleetRequest", "ec2:TerminateInstances", "ec2:RunInstances", "autoscaling:DescribeAccountLimits",

81

Page 87: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南AWS Batch 服務 IAM 角色

"autoscaling:DescribeAutoScalingGroups", "autoscaling:DescribeLaunchConfigurations", "autoscaling:DescribeAutoScalingInstances", "autoscaling:CreateLaunchConfiguration", "autoscaling:CreateAutoScalingGroup", "autoscaling:UpdateAutoScalingGroup", "autoscaling:SetDesiredCapacity", "autoscaling:DeleteLaunchConfiguration", "autoscaling:DeleteAutoScalingGroup", "autoscaling:CreateOrUpdateTags", "autoscaling:SuspendProcesses", "autoscaling:PutNotificationConfiguration", "autoscaling:TerminateInstanceInAutoScalingGroup", "ecs:DescribeClusters", "ecs:DescribeContainerInstances", "ecs:DescribeTaskDefinition", "ecs:DescribeTasks", "ecs:ListClusters", "ecs:ListContainerInstances", "ecs:ListTaskDefinitionFamilies", "ecs:ListTaskDefinitions", "ecs:ListTasks", "ecs:CreateCluster", "ecs:DeleteCluster", "ecs:RegisterTaskDefinition", "ecs:DeregisterTaskDefinition", "ecs:RunTask", "ecs:StartTask", "ecs:StopTask", "ecs:UpdateContainerAgent", "ecs:DeregisterContainerInstance", "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents", "logs:DescribeLogGroups", "iam:GetInstanceProfile", "iam:GetRole" ], "Resource": "*" }, { "Effect": "Allow", "Action": "iam:PassRole", "Resource": [ "*" ], "Condition": { "StringEquals": { "iam:PassedToService": [ "ec2.amazonaws.com", "ec2.amazonaws.com.cn", "ecs-tasks.amazonaws.com" ] } } }, { "Effect": "Allow", "Action": "iam:CreateServiceLinkedRole", "Resource": "*", "Condition": { "StringEquals": { "iam:AWSServiceName": [ "spot.amazonaws.com", "spotfleet.amazonaws.com", "autoscaling.amazonaws.com",

82

Page 88: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南AWS Batch 服務 IAM 角色

"ecs.amazonaws.com" ] } } }, { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": [ "*" ], "Condition": { "StringEquals": { "ec2:CreateAction": "RunInstances" } } } ]}

您可以使用以下程序查看您的帳戶是否已有 AWS Batch 服務角色,並視需要連接受管的 IAM 政策。

在 IAM 主控台檢查 AWSBatchServiceRole

1. Open the IAM console at https://console.aws.amazon.com/iam/.2. 在導覽窗格中,選擇 Roles (角色)。3. 搜尋 AWSBatchServiceRole 的角色清單。如果該角色不存在,請使用下列程序建立角色。如果該角

色存在,選取角色來檢視附加的政策。4. 選擇 Permissions (許可)。5. 確定 AWSBatchServiceRole 受管政策附加到該角色。如果已附加政策,您的 AWS Batch 服務角色已適

當設定。如未連接,請按照以下子步驟連接政策。

a. 選擇 Attach Policy (連結政策)。b. 若要針對 Filter (篩選條件) 將可附加的政策清單範圍縮小,請輸入 AWSBatchServiceRole。c. 選擇 AWSBatchServiceRole 政策,然後選擇 Attach Policy (附加政策)。

6. 選擇 Trust Relationships (信任關係)、Edit Trust Relationship (編輯信任關係)。7. 確認信任關係包含下列政策。如果信任關係符合下列政策,請選擇 Cancel (取消)。如果信任關係不符

合,請將政策複製到 Policy Document (政策文件) 視窗中,並選擇 Update Trust Policy (更新信任政策)。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": {"Service": "batch.amazonaws.com"}, "Action": "sts:AssumeRole" }]}

建立 AWSBatchServiceRole IAM 角色

1. Open the IAM console at https://console.aws.amazon.com/iam/.2. 在導覽窗格中,選擇 Roles (角色)、Create New Role (建立新角色)。3. 針對 Select type of trusted entity (選取受信任實體的類型),選擇 AWS service (AWS 服務)。針對

Choose the service that will use this role (選擇將使用此角色的服務),選擇 Batch (批次)。

83

Page 89: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南Amazon ECS 執行個體角色

4. 選擇 Next: Permissions (下一步:許可)、Next: Tags (下一步:標籤) 及 Next: Review (下一步:檢閱)。5. 針對 Role Name (角色名稱),輸入 AWSBatchServiceRole,然後選擇 Create Role (建立角色)。

Amazon ECS 執行個體角色AWS Batch 運算環境會填入 Amazon ECS 容器執行個體,這些執行個體會在本機上執行 Amazon ECS 容器代理程式。Amazon ECS 容器代理程式會代表您呼叫各種 AWS API,因此執行代理程式的容器執行個體需要 IAM 政策和角色,這些服務才會知道代理程式為您所有。在您建立運算環境和啟動容器執行個體之前,您必須先建立 IAM 角色和執行個體描述檔,讓這些容器執行個體啟動時可以使用。此要求適用於使用或不使用Amazon 提供之 Amazon ECS 最佳化 AMI 啟動的容器執行個體。

主控台初次執行體驗時會自動為您建立 Amazon ECS 執行個體角色和執行個體描述檔。不過,您可以使用以下程序,檢查並查看您的帳戶是否已有 Amazon ECS 執行個體角色和執行個體描述檔,並視需要連接受管IAM 政策。

在 IAM 主控台檢查 ecsInstanceRole

1. Open the IAM console at https://console.aws.amazon.com/iam/.2. 在導覽窗格中,選擇 Roles (角色)。3. 搜尋 ecsInstanceRole 的角色清單。如果該角色不存在,請使用下列步驟建立角色。

a. 選擇 Create Role (建立角色)。b. 針對 Select type of trusted entity (選取受信任實體的類型),選擇 AWS service (AWS 服務)。針

對 Choose the service that will use this role (選擇將使用此角色的服務),請選擇 Elastic ContainerService。針對 Select your use case (選取您的使用案例),選擇 EC2 Role for Elastic ContainerService (Elastic Container Service 的 EC2 角色)。

c. 選擇 Next: Permissions (下一步:許可)、Next: Tags (下一步:標籤) 及 Next: Review (下一步:檢閱)。

d. 針對 Role Name (角色名稱),輸入 ecsInstanceRole,然後選擇 Create Role (建立角色)。

Amazon EC2 Spot Fleet 角色如果您建立使用 Amazon EC2 Spot Fleet 執行個體的受管運算環境,您必須建立一個授予 Spot Fleet 許可的角色,允許其代表您啟動、標記和終止執行個體。在您的 Spot Fleet 請求中指定角色。您也必須擁有Amazon EC2 Spot 與 Spot Fleet 的 AWSServiceRoleForEC2Spot 和 AWSServiceRoleForEC2SpotFleet 服務連結角色。請使用下列程序建立所有這些角色。如需詳細資訊,請參閱 IAM User Guide 中的 使用服務連結角色 及 建立角色以將許可委派給 AWS 服務。

主題• 在 AWS Management Console 中建立 Amazon EC2 Spot Fleet 角色 (p. 84)• 使用 Amazon EC2 建立 AWS CLI Spot Fleet 角色 (p. 85)

在 AWS Management Console 中建立 Amazon EC2Spot Fleet 角色建立 AWSServiceRoleForEC2Spot Amazon EC2 Spot 的 IAM 服務連結角色

1. Open the IAM console at https://console.aws.amazon.com/iam/.2. 在導覽窗格中,選擇 Roles (角色)、Create role (建立新角色)。

84

Page 90: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南使用 Amazon EC2 建立 AWS CLI Spot Fleet 角色

3. 針對 Select type of trusted entity (選取受信任實體的類型),選擇 AWS service (AWS 服務)。針對Choose the service that will use this role (選擇將使用此角色的服務),請選擇 EC2。

4. 在 Select your use case (選擇您的使用案例) 部分,選擇 EC2 - Spot Instances (EC2 - Spot 執行個體)。5. 選擇 Next: Permissions (下一步:許可)、Next: Tags (下一步:標籤) 及 Next: Review (下一步:檢閱)。6. 在 Role Name (角色名稱) 中,輸入 AmazonEC2SpotFleetRole。選擇 Create Role (建立角色)。

建立 AWSServiceRoleForEC2SpotFleet Amazon EC2 Spot Fleet 的 IAM 服務連結角色

1. Open the IAM console at https://console.aws.amazon.com/iam/.2. 在導覽窗格中,選擇 Roles (角色)、Create role (建立新角色)。3. 針對 Select type of trusted entity (選取受信任實體的類型),選擇 AWS service (AWS 服務)。針對

Choose the service that will use this role (選擇將使用此角色的服務),請選擇 EC2。4. 在 Select your use case (選擇您的使用案例) 部分,選擇 EC2 - Spot Fleet。5. 選擇 Next: Permissions (下一步:許可)、Next: Tags (下一步:標籤) 及 Next: Review (下一步:檢閱)。6. 在 Role Name (角色名稱) 中,輸入 AWSServiceRoleForEC2SpotFleet。選擇 Create Role (建立角

色)。

Note

在過去,Amazon EC2 Spot Fleet 角色有兩個受管政策。

• AmazonEC2SpotFleetRole :此為 Spot Fleet 角色原本的受管政策。其擁有緊密的 IAM 權限,但不支援運算環境中的 Spot 執行個體標記。如果您先前已建立使用此政策的 Spot Fleet 角色,請參閱 建立時未標籤 Spot 執行個體 (p. 113) 以套用新的建議政策到該角色。

• AmazonEC2SpotFleetTaggingRole:此角色提供標記 Amazon EC2 Spot 執行個體所有必要的權限。使用此角色,便能在 AWS Batch 運算環境中執行 Spot 執行個體標記。

使用 Amazon EC2 建立 AWS CLI Spot Fleet 角色為 Spot Fleet 運算環境建立 AmazonEC2SpotFleetRole IAM 角色

1. 使用 AWS CLI 執行下列命令:

aws iam create-role --role-name AmazonEC2SpotFleetRole \ --assume-role-policy-document '{"Version":"2012-10-17","Statement":[{"Sid":"","Effect":"Allow","Principal":{"Service":"spotfleet.amazonaws.com"},"Action":"sts:AssumeRole"}]}'

2. 若要附加 AmazonEC2SpotFleetTaggingRole 受管 IAM 政策到您的 AmazonEC2SpotFleetRole角色,請用 AWS CLI 執行下列命令:

aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEC2SpotFleetTaggingRole \ --role-name AmazonEC2SpotFleetRole

建立 AWSServiceRoleForEC2Spot Amazon EC2 Spot 的 IAM 服務連結角色

• 使用 AWS CLI 執行下列命令:

aws iam create-service-linked-role --aws-service-name spot.amazonaws.com

85

Page 91: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南CloudWatch Events IAM 角色

建立 AWSServiceRoleForEC2SpotFleet Amazon EC2 Spot Fleet 的 IAM 服務連結角色

• 使用 AWS CLI 執行下列命令:

aws iam create-service-linked-role --aws-service-name spotfleet.amazonaws.com

CloudWatch Events IAM 角色Amazon CloudWatch Events 傳送近乎即時的系統事件串流,說明 Amazon Web Services 資源發生的變動。AWS Batch 任務可做為 CloudWatch Events 目標。利用可快速設定的簡單規則,匹配事件並提交 AWSBatch 任務以回應事件。使用 CloudWatch Events 規則和目標提交 AWS Batch 任務之前,CloudWatchEvents 必須先取得代表您執行 AWS Batch 任務的許可。

Note

您在 CloudWatch Events 主控台中建立規則以指定 AWS Batch 佇列做為目標時,有機會可建立此角色。如需範例演練,請參閱「以 AWS Batch 任務做為 CloudWatch Events 目標 (p. 88)」。

CloudWatch EventsIAM 角色的信任關係必須提供 events.amazonaws.com 服務委託人擔任該角色的能力,如下所示。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sts:AssumeRole" } ]}

連接到您 CloudWatch Events IAM 角色的政策允許 batch:SubmitJob 資源的權限。AWS Batch 提供AWSBatchServiceEventTargetRole 受管政策,以提供這些權限,如下所示。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "batch:SubmitJob" ], "Resource": "*" } ]}

86

Page 92: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南AWS Batch 事件

適用於 CloudWatch Events 的 AWSBatch 事件串流

您可使用適用於 AWS Batch 的 CloudWatch Events 事件串流,以近乎即時的方式接收有關已提交至任務佇列的任務目前狀態的通知。

您可以使用 CloudWatch Events 監控任務流程、建置有複雜相依性的 AWS Batch 自訂任務流程、產生關於任務執行的用量報告或指標,或建置自己的自訂儀表板。有了 AWS Batch 和 CloudWatch Events,您可以不用再為了持續輪詢 AWS Batch 的任務狀態變更而排程及監控程式碼。反之,您可使用像是 AWSLambda、Amazon Simple Queue Service、Amazon Simple Notification Service 或 Amazon Kinesis DataStreams 等任何 CloudWatch Events 目標以非同步方式處理 AWS Batch 的任務狀態變更。

AWS Batch 事件串流的事件會確保至少傳送一次。假如傳送了重複的事件,事件會提供足夠的資訊來識別重複項目 (您可以比較事件和任務狀態的時間戳記)。

AWS Batch 任務可做為 CloudWatch Events 目標。利用可快速設定的簡單規則,匹配事件並提交 AWSBatch 任務以回應事件。如需更多資訊,請參閱 Amazon CloudWatch Events User Guide中的什麼是Amazon CloudWatch Events?。您也可使用 CloudWatch Events 排程自動化動作,讓動作使用 cron 或 rate運算式在特定時間自動觸發。如需更多資訊,請參閱 Amazon CloudWatch Events User Guide中的規則的排程運算式。如需範例演練,請參閱「以 AWS Batch 任務做為 CloudWatch Events 目標 (p. 88)」。

主題• AWS Batch 事件 (p. 87)• 以 AWS Batch 任務做為 CloudWatch Events 目標 (p. 88)• 教學:接聽 AWS Batch CloudWatch Events (p. 91)• 教學課程:傳送 Amazon Simple Notification Service 提醒,表示任務事件失敗 (p. 92)

AWS Batch 事件AWS Batch 傳送任務狀態變更事件至 CloudWatch Events。AWS Batch 追蹤您任務的狀態。如果之前提交的任務變更狀態,就會觸發事件,例如,如果 RUNNING 狀態的任務移至 FAILED 狀態,這些事件便歸類為任務狀態變更事件。

Note

AWS Batch 日後可能新增其他的事件類型、來源和詳細資訊。如果您是透過程式設計方式將事件JSON 資料還原序列化,請確定您的應用程式已準備好處理不明屬性,以免新增這些額外屬性時發生問題。

任務狀態變更事件只要現有 (之前提交) 的任務變更狀態,便會隨即建立事件。如需有關 AWS Batch 任務狀態的詳細資訊,請參閱 任務狀態 (p. 14)。

Note

初始提交任務時不會建立事件。

Example 任務狀態變更事件

任務狀態變更事件以下列格式 (下方的 detail 區段類似從 AWS Batch API Reference 的 DescribeJobs API操作傳回的 Job 物件)。如需 CloudWatch Events 參數的詳細資訊,請參閱 Amazon CloudWatch EventsUser Guide 中的事件和事件模式。

87

Page 93: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南以 AWS Batch 任務做為 CloudWatch Events 目標

{ "version": "0", "id": "c8f9c4b5-76e5-d76a-f980-7011e206042b", "detail-type": "Batch Job State Change", "source": "aws.batch", "account": "aws_account_id", "time": "2017-10-23T17:56:03Z", "region": "us-east-1", "resources": [ "arn:aws:batch:us-east-1:aws_account_id:job/4c7599ae-0a82-49aa-ba5a-4727fcce14a8" ], "detail": { "jobName": "event-test", "jobId": "4c7599ae-0a82-49aa-ba5a-4727fcce14a8", "jobQueue": "arn:aws:batch:us-east-1:aws_account_id:job-queue/HighPriority", "status": "RUNNABLE", "attempts": [], "createdAt": 1508781340401, "retryStrategy": { "attempts": 1 }, "dependsOn": [], "jobDefinition": "arn:aws:batch:us-east-1:aws_account_id:job-definition/first-run-job-definition:1", "parameters": {}, "container": { "image": "busybox", "vcpus": 2, "memory": 2000, "command": [ "echo", "'hello world'" ], "volumes": [], "environment": [], "mountPoints": [], "ulimits": [] } }}

以 AWS Batch 任務做為 CloudWatch Events 目標Amazon CloudWatch Events 傳送近乎即時的系統事件串流,說明 Amazon Web Services 資源發生的變動。AWS Batch 任務可做為 CloudWatch Events 目標。利用可快速設定的簡單規則,匹配事件並提交AWS Batch 任務以回應事件。如需更多資訊,請參閱 Amazon CloudWatch Events User Guide中的什麼是Amazon CloudWatch Events?。

您也可使用 CloudWatch Events 排程自動化動作,讓動作使用 cron 或 Rate 運算式在特定時間自動觸發。如需更多資訊,請參閱 Amazon CloudWatch Events User Guide中的規則的排程運算式。

AWS Batch 任務做為 CloudWatch Events 目標使用的部分常用案例如下:

• 建立按定期時間間隔發生的排程任務,例如讓 cron 任務在 Amazon EC2 Spot 執行個體成本較便宜的低用量時段發生。

• 執行 AWS Batch 任務以回應 CloudTrail 中記錄的 API 操作,例如,當物件上傳至指定的 Amazon S3 儲存貯體時自動提交任務,以及使用 AWS Batch 輸入轉換器傳遞物件的儲存貯體和金鑰名稱至 CloudWatchEvents 參數。

88

Page 94: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南建立排程的任務

Note

在此案例中,所有 AWS 資源 (Amazon S3 儲存貯體、CloudWatch Events 規則、CloudTrail 日誌等) 必須在相同的區域。

使用 AWS Batch 規則和目標提交 CloudWatch Events 任務之前,CloudWatch Events 服務需先取得代表您執行 AWS Batch 任務的權限。您在 CloudWatch Events 主控台中建立規則以指定 AWS Batch 任務做為目標時,有機會可建立此角色。如需有關此角色必要的服務原理和 IAM 權限的詳細資訊,請參閱 CloudWatchEvents IAM 角色 (p. 86)。

建立排程的 AWS Batch 任務以下程序說明如何建立排程的 AWS Batch 任務和必要的 CloudWatch EventsIAM 角色。

使用 AWS Batch 建立排程的 CloudWatch Events 任務

1. Open the CloudWatch console at https://console.aws.amazon.com/cloudwatch/.2. 在左側導覽中,選擇 Events (事件)、Create rule (建立規則)。3. 在 Event source (事件來源) 中,選擇 Schedule (排程),然後選擇要使用固定間隔排程或使用 cron 運

算式做為排程規則。如需更多資訊,請參閱 Amazon CloudWatch Events User Guide中的規則的排程運算式。

• 假如選擇 Fixed rate of (固定頻率),請輸入間隔和排程單位。• 假如選擇 Cron expression (Cron 表達式),請輸入工作排程的 cron 表達式。這些表達式有六個必

要欄位,欄位各以空格隔開。如需更多資訊和 cron 運算式的範例,請參閱 Amazon CloudWatchEvents User Guide 中的 Cron 運算式。

4. 在 Targets (目標) 中,選擇 Add target (新增目標)。5. 選擇 Batch job queue (批次任務佇列),並正確填寫下列欄位:

• Job queue (任務佇列):輸入可排程任務之任務佇列的 Amazon Resource Name (ARN)。• Job definition (任務定義):輸入用於任務之任務定義的名稱,及其修訂版或完整 ARN。• Job name (任務名稱):輸入任務的名稱。• Array size (陣列大小):(選擇性) 輸入任務要執行多個副本的陣列大小。如需更多資訊,請參閱 陣列任

務 (p. 17)。• Job attempts (任務嘗試):(選擇性) 輸入任務失敗時的重試次數。如需更多資訊,請參閱 自動化任務

重試 (p. 16)。6. 選擇現有的 CloudWatch EventsIAM 角色,以用於您的任務,或 Create a new role for this specific

resource (為此特定資源建立新角色),以建立新的角色。如需更多資訊,請參閱CloudWatch EventsIAM 角色 (p. 86)。

7. 在 Rule definition (規則定義) 中,正確地填寫底下的欄位,然後選擇 Create rule (建立規則)。

• Name (名稱):輸入規則的名稱。• Description (說明):(選擇性) 輸入規則的說明。• State (狀態):選擇是否要啟用規則,以便在下次間隔開始排程,或停用規則直到之後的日期。

使用 AWS Batch 輸入轉換器以傳遞事件資訊到CloudWatch Events 目標您可以使用 CloudWatch Events 輸入轉換器,在任務提交中傳遞事件資訊至 AWS Batch。如果您是因為其他 AWS 事件資訊而觸發任務,例如上傳物件到 Amazon S3 儲存貯體,這會特別有用。您可以在容器命令中

89

Page 95: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南事件輸入轉換器

使用任務定義來搭配替換參數值,而 CloudWatch Events 輸入轉換器可以根據事件資料提供參數值。例如,下列任務定義應會出現名為 S3bucket 和 S3key 的參數值。

{ "jobDefinitionName": "echo-parameters", "containerProperties": { "image": "busybox", "vcpus": 2, "memory": 2000, "command": [ "echo", "Ref::S3bucket", "Ref::S3key" ] }}

然後,您只需建立 AWS Batch 事件目標,用於從觸發它的事件剖析資訊並將其轉換為 parameters 物件。當此任務執行後,來自觸發事件的參數會傳遞到任務容器的命令。

Note

在此案例中,所有 AWS 資源 (Amazon S3 儲存貯體、CloudWatch Events 規則、CloudTrail 日誌等) 必須在相同的區域。

若要建立使用輸入轉換器的 AWS Batch 目標

1. Open the CloudWatch console at https://console.aws.amazon.com/cloudwatch/.2. 在左側導覽中,選擇 Events (事件)、Create rule (建立規則)。3. 對於 Event source (事件來源),選擇 Event Pattern (事件模式),然後建構所需規則以符合您的應用程式

需求。4. 對於 Targets (目標),選擇 Batch job queue (批次任務佇列),然後為此規則觸發的任務,指定其任務佇

列、任務定義和任務名稱。5. 選擇 Configure input (設定輸入),然後選擇 Input Transformer (輸入轉換器)。6. 對於上方輸入轉換器文字方塊,指定從觸發事件剖析的值。例如,若要從 Amazon S3 事件剖析儲存貯

體和金鑰名稱,請使用下列 JSON。

{"S3BucketValue":"$.detail.requestParameters.bucketName","S3KeyValue":"$.detail.requestParameters.key"}

7. 對於下方輸入轉換器文字方塊,建立要傳遞到 Parameters 任務的 AWS Batch 結構。當任務執行時,這些參數會替換為任務容器命令中的 Ref::S3bucket 和 Ref::S3key 預留位置。

{"Parameters" : {"S3bucket": <S3BucketValue>, "S3key": <S3KeyValue>}}

8. 選擇現有的 CloudWatch EventsIAM 角色,以用於您的任務,或 Create a new role for this specificresource (為此特定資源建立新角色),以建立新的角色。如需更多資訊,請參閱CloudWatch EventsIAM 角色 (p. 86)。

9. 選擇 Configure details (設定詳細資訊) 然後在 Rule definition (規則定義) 中,正確地填寫底下的欄位,然後選擇 Create rule (建立規則)。

• Name (名稱):輸入規則的名稱。• Description (說明):(選擇性) 輸入規則的說明。• State (狀態):選擇是否要立即啟用您的規則,或是停用它直到稍晚的日期。

90

Page 96: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南教學:接聽 AWS Batch CloudWatch Events

教學:接聽 AWS Batch CloudWatch Events在此教學中,您會設定簡單的 AWS Lambda 函數以接聽 AWS Batch 任務事件,並將之寫入 CloudWatchLogs 日誌串流。

先決條件此教學課程假設您有一個運作中的運算環境,和已準備好要接受任務的任務佇列。如果您沒有運作中的運算環境和可擷取事件的任務佇列,請依照 AWS Batch 入門 (p. 8) 中的步驟建立。在本教學課程的最後,您可以提交任務至任務佇列,藉此測試您的 Lambda 函數設定是否正確。

步驟 1:建立 Lambda 函數在此程序中,您要建立一個簡單的 Lambda 函數,做為 AWS Batch 事件串流訊息的目標。

建立目標的 Lambda 函數

1. Open the AWS Lambda console at https://console.aws.amazon.com/lambda/.2. 選擇 Create a Lambda function (建立 Lambda 函數)、Author from scratch (從頭開始撰寫)。3. 在 Name (名稱) 中,輸入 batch-event-stream-handler。4. 在 Role (角色) 中,選擇 Create a custom role (建立自訂角色)、Allow (允許)。5. 選擇 Create function (建立函式)。6. 在 Function code (函數程式碼) 區段中,選擇 Python 2.7 做為執行時間,並編輯範本程式碼,以符合以

下範例:

import json

def lambda_handler(event, context): if event["source"] != "aws.batch": raise ValueError("Function only supports input from events with a source type of: aws.batch") print(json.dumps(event))

這是一個簡單的 Python 2.7 函數,此函數列印 AWS Batch 傳送的事件。如果一切設定正確,則在此教學的最後,您會看到事件詳細資訊出現在與此 Lambda 函數建立關聯的 CloudWatch Logs 日誌串流中。

7. 請選擇 Save (儲存)。

步驟 2:註冊事件規則接著,您建立一個 CloudWatch Events 事件規則,擷取來自 AWS Batch 資源的任務事件。此規則擷取來自所定義帳戶中的 AWS Batch 的所有事件。任務訊息本身包含關於事件來源的資訊,包括提交的任務佇列,可用來讓您透過編寫程式的方式篩選及排序事件。

Note

使用 AWS Management Console 建立事件規則時,主控台會自動新增可授予 CloudWatch Events許可呼叫 Lambda 函數所需的 IAM 許可。如果您使用 AWS CLI 建立事件規則,您必須明確授予權限。如需更多資訊,請參閱 Amazon CloudWatch User Guide中的事件和事件模式。

建立 CloudWatch Events 規則

1. Open the CloudWatch console at https://console.aws.amazon.com/cloudwatch/.

91

Page 97: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南步驟 3:測試組態

2. 在導覽窗格上,選擇 Events (事件)、Create rule (建立規則)。3. 在 Event source (事件來源) 中,選擇 Event Pattern (事件模式) 做為事件來源,然後選擇 Build custom

event pattern (建置自訂事件模式)。4. 將下列的事件模式貼到文字區域。

{ "source": [ "aws.batch" ]}

此規則適用於所有 AWS Batch 群組的所有 AWS Batch 事件。或者,您可以建立一個更針對性的規則,來篩選掉一些結果。

5. 在 Targets (目標) 中,選擇 Add target (新增目標)。在 Target type (目標類型) 中,選擇 Lambdafunction (Lambda 函數),然後選擇您的 Lambda 函數。

6. 選擇 Configure details (設定詳細資訊)。7. 針對 Rule definition (規則定義),輸入您規則的名稱和描述,然後選擇 Create rule (建立規則)。

步驟 3:測試組態最後,您可以提交任務至您的任務佇列,以測試您的 CloudWatch Events 組態。如果一切均組態正確,您的Lambda 函數將觸發,並將事件資料寫入到函數的 CloudWatch Logs 日誌串流。

測試組態

1. Open the AWS Batch console at https://console.aws.amazon.com/batch/.2. 提交新的 AWS Batch 任務。如需更多資訊,請參閱 提交任務 (p. 12)。3. Open the CloudWatch console at https://console.aws.amazon.com/cloudwatch/.4. 在導覽窗格上,選擇 Logs (日誌),然後選取 Lambda 函數的日誌群組 (例如,/aws/lambda/my-

function)。5. 選取日誌串流,以檢視事件資料。

教學課程:傳送 Amazon Simple Notification Service提醒,表示任務事件失敗

在此教學課程中,您將設定 CloudWatch Events 事件規則,使其只會擷取任務已移到 FAILED 狀態的任務事件。本教學課程結束後,您可以提交任務至任務佇列,藉此測試您的 Amazon SNS 提醒設定是否正確。

先決條件此教學課程假設您有一個運作中的運算環境,和已準備好要接受任務的任務佇列。如果您沒有運作中的運算環境和可擷取事件的任務佇列,請依照 AWS Batch 入門 (p. 8) 中的步驟建立。

步驟 1:建立並訂閱 Amazon SNS 主題在此教學中,您會設定 Amazon SNS 主題,做為新事件規則的事件目標。

建立 Amazon SNS 主題

1. Open the Amazon SNS console at https://console.aws.amazon.com/sns/v3/home.

92

Page 98: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南步驟 2:註冊事件規則

2. 選擇 Topics (主題)、Create new topic (建立新主題)。3. 對於 Topic name (主題名稱),輸入 JobFailedAlert,並選擇 Create topic (建立主題)。4. 選擇剛建立的主題。在 Topic details: JobFailedAlert (主題詳細資訊) 畫面上,選擇 Create subscription

(建立訂閱)。5. 對於 通訊協定 ,選擇 電子郵件 。在 Endpoint (端點) 中,輸入您目前能存取的電子郵件地址,並選擇

Create subscription (建立訂閱)。6. 檢查您的電子郵件帳戶,並等待收到訂閱確認的電子郵件訊息。您收到訊息時,請選擇 Confirm

subscription (確認訂閱)。

步驟 2:註冊事件規則接著,註冊事件規則,使其只擷取任務失敗的事件。

建立事件規則

1. Open the CloudWatch console at https://console.aws.amazon.com/cloudwatch/.2. 在導覽窗格中,選擇 Events (事件)、Create rule (建立規則)。3. 選擇 Show advanced options (顯示進階選項)、edit (編輯)。4. 針對 Build a pattern that selects events for processing by your targets (建置模式以選取要讓目標處理的

事件),將現有文字取代為下列文字:

{ "detail-type": [ "Batch Job State Change" ], "source": [ "aws.batch" ], "detail": { "status": [ "FAILED" ] }}

此程式碼定義符合任務狀態變更為 FAILED 的任何事件的 CloudWatch Events 規則。如需事件模式的詳細資訊,請參閱 Amazon CloudWatch User Guide中的事件和事件模式。

5. 在 Targets (目標) 中,選擇 Add target (新增目標)。在 Target type (目標類型) 中,選擇 SNS topic(SNS 主題)、JobFailedAlert 。

6. 選擇 Configure details (設定詳細資訊)。7. 針對 Rule definition (規則定義),輸入您規則的名稱和描述,然後選擇 Create rule (建立規則)。

步驟 3:測試您的規則為了測試您的規則,提交在使用非零結束代碼啟動後不久結束的任務。如果您的事件規則設定正確,您應該會在幾分鐘內收到一封包含事件文字的電子郵件訊息。

測試規則

1. Open the AWS Batch console at https://console.aws.amazon.com/batch/.2. 提交新的 AWS Batch 任務。如需更多詳細資訊,請參閱 提交任務 (p. 12)。針對任務的命令,將結束容

器的此命令換成結束代碼 1。

93

Page 99: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南步驟 3:測試您的規則

/bin/sh, -c, 'exit 1'

3. 檢查您的電子郵件,確認是否收到關於任務失敗通知的電子郵件提醒。

94

Page 100: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南CloudTrail 中的 AWS Batch 資訊

使用 AWS CloudTrail 記錄 AWSBatch API 呼叫

AWS Batch 是與 AWS CloudTrail 整合的一種服務,可提供由使用者、角色或 AWS 服務在 AWS Batch 中所採取動作的記錄。CloudTrail 會將 AWS Batch 的所有 API 呼叫做為事件擷取。擷取的呼叫包括從 AWSBatch 主控台進行的呼叫,以及針對 AWS Batch API 操作的程式碼呼叫。如果您建立線索,就可以持續將CloudTrail 事件傳送至 Amazon S3 儲存貯體,包括 AWS Batch 的事件。如果您不設定追蹤記錄,仍然可以透過 CloudTrail 主控台中的 Event history (事件歷史記錄) 檢視最新的事件。使用由 CloudTrail 收集的資訊,您就可以判斷送至 AWS Batch 的請求、提出請求的 IP 地址、提出請求的人員、提出請求的時間,以及其他詳細資訊。

若要進一步了解 CloudTrail,請參閱 AWS CloudTrail User Guide。

CloudTrail 中的 AWS Batch 資訊當您建立帳戶時,系統會在您的 AWS 帳戶中啟用 CloudTrail。當 AWS Batch 中發生活動時,該活動會記錄在 CloudTrail 事件中,其他 AWS 服務事件則記錄於 Event history (事件歷程記錄)。您可以檢視、搜尋和下載 AWS 帳戶的最新事件。如需詳細資訊,請參閱使用 CloudTrail 事件歷程記錄檢視事件。

如需您 AWS 帳戶中正在進行事件的記錄 (包含 AWS Batch 的事件),請建立線索。追蹤記錄可讓 CloudTrail將日誌檔案交付到 Amazon S3 儲存貯體。依預設,當您在主控台建立追蹤時,該追蹤會套用到所有 AWS 區域。該追蹤會記錄來自 AWS 分割區中所有區域的事件,並將日誌檔案交付到您指定的 Amazon S3 儲存貯體。此外,您可以設定其他 AWS 服務,以進一步分析和處理 CloudTrail 日誌中所收集的事件資料。如需詳細資訊,請參閱下列內容:

• 建立追蹤的概觀• CloudTrail 支援的服務和整合• 設定 CloudTrail 的 Amazon SNS 通知• 接收多個區域的 CloudTrail 日誌檔案及接收多個帳戶的 CloudTrail 日誌檔案

CloudTrail 會記錄所有 AWS Batch 動作,並記錄在 https://docs.aws.amazon.com/batch/latest/APIReference/ 中。例如,對 SubmitJob、ListJobs 及 DescribeJobs 區段的呼叫,都會在 CloudTrail日誌檔案中產生項目。

每一筆事件或記錄項目都會包含產生請求者的資訊。身分資訊可協助您判斷下列事項:

• 該請求是否使用根或 AWS Identity and Access Management (IAM) 使用者登入資料提出。• 提出該請求時,是否使用了特定角色或聯合身分使用者的暫時安全登入資料。• 該請求是否由另一項 AWS 服務提出。

如需詳細資訊,請參閱 CloudTrail 使用者身分元素。

了解 AWS Batch 日誌檔項目追蹤記錄是一種組態,能讓事件以日誌檔案的形式交付至您指定的 Amazon S3 儲存貯體。CloudTrail 日誌檔案包含一個或多個日誌項目。事件代表來自任何來源的單一要求,並包含有關要求的動作、動作的日期和

95

Page 101: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南了解 AWS Batch 日誌檔項目

時間、要求參數等資訊。CloudTrail 日誌檔不是公有 API 呼叫的排序堆疊追蹤,因此不會以任何特定順序顯示。

以下範例說明進行 CloudTrail 動作的 CreateComputeEnvironment 日誌項目。

{ "eventVersion": "1.05", "userIdentity": { "type": "AssumedRole", "principalId": "AIDACKCEVSQ6C2EXAMPLE:admin", "arn": "arn:aws:sts::012345678910:assumed-role/Admin/admin", "accountId": "012345678910", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "sessionContext": { "attributes": { "mfaAuthenticated": "false", "creationDate": "2017-12-20T00:48:46Z" }, "sessionIssuer": { "type": "Role", "principalId": "AIDACKCEVSQ6C2EXAMPLE", "arn": "arn:aws:iam::012345678910:role/Admin", "accountId": "012345678910", "userName": "Admin" } } }, "eventTime": "2017-12-20T00:48:46Z", "eventSource": "batch.amazonaws.com", "eventName": "CreateComputeEnvironment", "awsRegion": "us-east-1", "sourceIPAddress": "203.0.113.1", "userAgent": "aws-cli/1.11.167 Python/2.7.10 Darwin/16.7.0 botocore/1.7.25", "requestParameters": { "computeResources": { "subnets": [ "subnet-5eda8e04" ], "tags": { "testBatchTags": "CLI testing CE" }, "desiredvCpus": 0, "minvCpus": 0, "instanceTypes": [ "optimal" ], "securityGroupIds": [ "sg-aba9e8db" ], "instanceRole": "ecsInstanceRole", "maxvCpus": 128, "type": "EC2" }, "state": "ENABLED", "type": "MANAGED", "serviceRole": "service-role/AWSBatchServiceRole", "computeEnvironmentName": "Test" }, "responseElements": { "computeEnvironmentName": "Test", "computeEnvironmentArn": "arn:aws:batch:us-east-1:012345678910:compute-environment/Test" }, "requestID": "890b8639-e51f-11e7-b038-EXAMPLE", "eventID": "874f89fa-70fc-4798-bc00-EXAMPLE",

96

Page 102: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南了解 AWS Batch 日誌檔項目

"readOnly": false, "eventType": "AwsApiCall", "recipientAccountId": "012345678910"}

97

Page 103: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南步驟 1:為 NAT 閘道建立彈性 IP 地址

教學:為建立含公有和私有子網路的VPC

此教學會逐步引導您建立含兩個公有子網路和兩個私有子網路的 VPC,並透過 NAT 閘道提供網際網路存取。

步驟 1:為 NAT 閘道建立彈性 IP 地址NAT 閘道需要公有子網路中的彈性 IP 地址,但 VPC 精靈不會自動建立。請先建立彈性 IP 地址,再執行VPC 精靈。

建立彈性 IP 地址

1. Open the Amazon VPC console at https://console.aws.amazon.com/vpc/.2. 在左側導覽窗格中,選擇 Elastic IP (彈性 IP)。3. 選擇 Allocate new address (配置新地址)、Allocate (配置)、Close (關閉)。4. 請記下您新建立的彈性 IP 地址的 Allocation ID (配置 ID);您稍後需要將此項目輸入 VPC 精靈中。

步驟 2:執行 VPC 精靈VPC 精靈會自動建立並設定您多數的 VPC 資源。

執行 VPC 精靈

1. 在左側導覽窗格中,選擇 VPC Dashboard (VPC 儀表板)。2. 選擇 Launch VPC Wizard (啟動 VPC 精靈)、VPC with Public and Private Subnets (含公有和私有子網

路的 VPC)、Select (選取)。3. 針對 VPC name (VPC 名稱),為您的 VPC 設定唯一名稱。4. 針對 Elastic IP Allocation ID (彈性 IP 配置 ID),選擇先前建立的彈性 IP 地址的 ID。5. 選擇 Create VPC (建立 VPC)。6. 精靈完成時,請選擇 OK (確定)。請記下建立您 VPC 子網路的可用區域。您應該在不同的可用區域中建

立其他子網路。

系統不會自動指派非預設子網路 (例如 VPC 精靈所建立的子網路) 的公用 IPv4 位址。在公用子網路中啟動的執行個體必須指派公用 IPv4 位址,才能與 Amazon ECS 服務端點進行通訊。

修改子網路的公有 IPv4 定址行為

1. 在左側導覽窗格中,選擇 Subnets (子網路)。2. 選取預設 VPC 的公用子網路,VPC 精靈所建立的名稱是 Public subnet (公用子網路)。3. 選擇 Actions (動作),Modify auto-assign IP settings (修改自動指派 IP 設定)。4. 選取 Enable auto-assign public IPv4 address (啟用自動指派公有 IPv4 位址) 核取方塊,然後選擇 Save

(儲存)。

98

Page 104: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南步驟 3:建立其他子網路

步驟 3:建立其他子網路精靈會在單一可用區域建立含單一公有和單一私有子網路的 VPC。如需更高的可用性,您應該在不同的可用區域中為每個子網路類型建立至少一個,讓您的 VPC 跨兩個可用區域有公有和私有子網路。

建立其他私有子網路

1. 在左側導覽窗格中,選擇 Subnets (子網路)。2. 選擇 Create Subnet (建立子網路)。3. 針對 Name tag (名稱標籤),輸入子網路名稱,例如 Private subnet (私有子網路)。4. 針對 VPC,選擇先前建立的 VPC。5. 針對 Availability Zone (可用區域),選擇 VPC 中與您的原始子網路不同的可用區域。6. 針對 IPv4 CIDR block (IPv4 CIDR 區塊),輸入有效的 CIDR 區塊。例如,精靈預設會在 10.0.0.0/24 和

10.0.1.0/24 建立 CIDR 區塊。您的第二個私有子網路可以使用 10.0.3.0/24。7. 選擇 Yes, Create (是,建立)。

建立其他公有子網路

1. 在左側導覽窗格中,選擇 Subnets (子網路),然後選擇 Create Subnet (建立子網路)。2. 針對 Name tag (名稱標籤),輸入子網路名稱,例如 Public subnet (公有子網路)。3. 針對 VPC,選擇先前建立的 VPC。4. 針對 Availability Zone (可用區域),選擇與您在先前程序中建立的其他私有子網路相同的可用區域。5. 針對 IPv4 CIDR block (IPv4 CIDR 區塊),輸入有效的 CIDR 區塊。例如,精靈預設會在 10.0.0.0/24 和

10.0.1.0/24 建立 CIDR 區塊。您的第二個公有子網路可以使用 10.0.2.0/24。6. 選擇 Yes, Create (是,建立)。7. 選取剛建立的公有子網路,並選擇 Route Table (路由表)、Edit (編輯)。8. 預設會選取私有路由表。選擇其他可用的路由表,讓 0.0.0.0/0 目標路由至網際網路閘道

(igw-xxxxxxxx),然後選擇 Save (儲存)。9. 仍然選取您的第二個公有子網路,然後選擇 Subnet Actions (子網路動作)、Modify auto-assign IP

settings (修改自動指派 IP 設定)。10. 選取 Enable auto-assign public IPv4 address (啟用自動指派公有 IPv4 地址),然後選擇 Save (儲

存)、Close (關閉)。

後續步驟建立 VPC 之後,您應該考慮以下後續步驟:

• 如果您的公有和私有資源需要入站網路存取,則為其建立安全群組。如需更多資訊,請參閱 Amazon VPCUser Guide 中的使用安全群組。

99

Page 105: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南Identity and Access Management

AWS Batch 中的安全安全是 AWS 與您共同肩負的責任。共同責任模型將其描述為雲端「的」安全性和雲端「中」的安全性:

• 雲端本身的安全 – AWS 負責保護執行 AWS 雲端內 AWS 服務的基礎設施。AWS 提供的服務,也可讓您安全使用。第三方稽核人員會定期測試和驗證我們安全性的有效性,做為 AWS 合規計劃的一部分。若要了解適用於 AWS Batch 的合規計劃,請參閱 合規計劃的 AWS 服務範圍 。

• 雲端內部的安全 – 您的責任取決於所使用的 AWS 服務。您也必須對其他因素負責,包括資料的機密性、您公司的要求和適用法律和法規。

本文件有助於您了解如何在使用 AWS Batch 時套用共同責任模型。下列主題將顯示如何設定 AWS Batch 以達到您的安全和合規目標。您也將了解如何使用其他 AWS 服務,幫助您監控並保護 AWS Batch 資源。

主題• 適用於 AWS Batch 的 Identity and Access Management (p. 100)• AWS Batch 的合規驗證 (p. 109)• AWS Batch 中的基礎設施安全 (p. 109)

適用於 AWS Batch 的 Identity and AccessManagement

AWS Identity and Access Management (IAM) 是一種 AWS 服務,可協助管理員安全地控制 AWS 資源的存取。IAM 管理員可以控制能進行身份驗證 (登入) 及獲得授權 (具備許可) 以使用 AWS Batch 資源的人員。IAM 是一種 AWS 服務,無須支付任何額外的費用即可使用。

主題• 對象 (p. 100)• 使用身分來驗證 (p. 101)• 使用政策管理存取權 (p. 102)• AWS Batch 如何搭配 IAM 運作 (p. 103)• AWS Batch 身分型政策範例 (p. 106)• 針對 AWS Batch Identity and Access 進行故障診斷 (p. 107)

對象根據您在 AWS Batch 中所進行的工作而定,AWS Identity and Access Management (IAM) 的使用方式會不同。

服務使用者 – 若您使用 AWS Batch 來執行您的作業,您的管理員可以提供您需要的登入資料和許可。隨著您為了執行作業而使用的 AWS Batch 功能數量變多,您可能會需要額外的許可。了解存取的管理方式可協助您向管理員請求正確的許可。若您無法存取 AWS Batch 中的某項功能,請參閱針對 AWS Batch Identityand Access 進行故障診斷 (p. 107)。

服務管理員 – 若您是負責管理您公司的 AWS Batch 資源,您應該會具備 AWS Batch 的完整存取權限。您的任務是判斷您員工應存取的 AWS Batch 功能及資源。您接著必須將請求提交給您的 IAM 管理員,來變

100

Page 106: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南使用身分來驗證

更您服務使用者的許可。檢閱此頁面上的資訊,了解 IAM 的基本概念。若要進一步了解您公司可搭配 AWSBatch 使用 IAM 的方式,請參閱 AWS Batch 如何搭配 IAM 運作 (p. 103)。

IAM 管理員 – 如果您是 IAM 管理員,請了解如何撰寫政策來管理 AWS Batch 存取的詳細資訊。若要檢視您可以在 IAM 中使用的範例 AWS Batch 身分類型政策,請參閱 身分型政策範例 (p. 106)。

使用身分來驗證身份驗證是使用身分登入資料登入 AWS 的方式。如需使用 AWS Management Console 登入的詳細資訊,請參閱 IAM User Guide中的 IAM 主控台及登入頁面。

您必須以 AWS 帳戶根使用者、IAM 使用者,或取得 IAM 角色身分的方式進行身份驗證 (登入 AWS)。您也可以使用貴公司的單一登入身分驗證,甚至使用 Google 或 Facebook 進行登入。在上述案例中,您的管理員會使用 IAM 角色預先設定聯合身分。當您使用來自其他公司的身份驗證來存取 AWS 時,您是間接地擔任角色。

若要直接登入 AWS Management Console,請使用您的密碼及您的 root user 電子郵件或您的 IAM 使用者名稱。您可以使用您的 root user 或 IAM 使用者存取金鑰,透過編寫程式的方式存取 AWS。AWS 提供軟體開發套件和命令列工具,以加密的方式使用您的登入資料簽署您的請求。如果您不使用 AWS 工具,您必須自行簽署請求。請使用 Signature 第 4 版來執行此作業,它是針對傳入 API 請求進行身份驗證的通訊協定。如需驗證請求的詳細資訊,請參閱 AWS General Reference 中的 Signature 第 4 版簽署程序。

無論您使用何種身份驗證方法,您可能還需要提供額外的安全性資訊。例如,AWS 建議您使用多重驗證(MFA) 來提高帳戶的安全。若要進一步了解,請參閱 IAM User Guide 中的在 AWS 中使用多重驗證 (MFA)。

AWS 帳戶根使用者當您首次建立 AWS 帳戶時,您會先有單一的登入身分,可以完整存取帳戶中所有 AWS 服務與資源。此身分稱為 AWS 帳戶 root user,是藉由您用來建立帳戶的電子郵件地址和密碼以登入並存取。強烈建議您不要以 root user 處理日常作業,即使是管理作業。反之,請遵循僅以 root user 建立您第一個 IAM 使用者的最佳實務。接著請妥善鎖定 root user 登入資料,只用來執行少數的帳戶與服務管理作業。

IAM 使用者和群組IAM 使用者是您 AWS 帳戶中的一種實體,具備單一人員或應用程式的特定許可。IAM 使用者可有長期登入資料 (例如,使用者名稱和密碼或一組存取金鑰)。若要了解如何產生存取金鑰,請參閱 IAM User Guide中的管理 IAM 使用者的存取金鑰。當您產生 IAM 使用者的存取金鑰時,請確認您已檢視且安全地儲存金鑰對。您在這之後便無法復原私密存取金鑰。屆時您必須改為產生新的存取金鑰對。

IAM 群組是一種指定 IAM 使用者集合的實體。您無法以群組身分登入。您可以使用群組來一次為多名使用者指定許可。群組可讓管理大量使用者許可的過程變得更為容易。例如,您可以擁有一個名為 IAMAdmin 的群組,並給予該群組管理 IAM 資源的許可。

使用者與角色不同。使用者只會與單一人員或應用程式建立關聯,但角色的目的是在由任何需要它的人員取得。使用者擁有永久的長期登入資料,但角色僅提供暫時登入資料。若要進一步了解,請參閱 IAM UserGuide中的建立 IAM 使用者 (而非角色) 的時機。

IAM 角色IAM 角色是您 AWS 帳戶中的一種實體,具備特定許可。它與 IAM 使用者相似,但是不會與特定人員建立關聯。您可以在 AWS Management Console 中透過切換角色來暫時取得 IAM 角色。您可以透過呼叫 AWSCLI 或 AWS API 操作,或是使用自訂 URL 來取得角色。如需使用角色的方法詳細資訊,請參閱 IAM UserGuide中的使用 IAM 角色。

使用臨時登入資料的 IAM 角色在下列情況中非常有用。

101

Page 107: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南使用政策管理存取權

• 暫時 IAM 使用者許可 – IAM 使用者可以取得 IAM 角色來暫時針對特定任務具備不同的許可。• 聯合身分使用者存取 – Instead of creating an IAM user, you can use existing identities from AWS

Directory Service, your enterprise user directory, or a web identity provider. These are known asfederated users. AWS assigns a role to a federated user when access is requested through an identityprovider. For more information about federated users, see Federated Users and Roles in the IAM UserGuide.

• 跨帳戶存取 – 您可以使用 IAM 角色,允許不同帳戶中的某人 (信任的委託人) 存取您帳戶的資源。角色是授予跨帳戶存取的主要方式。但是,針對某些 AWS 服務,您可以將政策直接連接到資源 (而非使用角色做為代理)。若要了解跨帳戶存取角色和資源類型政策間的差異,請參閱 IAM User Guide中的 IAM 角色與資源類型政策的差異。

• AWS 服務存取 – A service role is an IAM role that a service assumes to perform actions in your accounton your behalf. When you set up some AWS service environments, you must define a role for the serviceto assume. This service role must include all the permissions that are required for the service to accessthe AWS resources that it needs. Service roles vary from service to service, but many allow you tochoose your permissions as long as you meet the documented requirements for that service. Serviceroles provide access only within your account and cannot be used to grant access to services in otheraccounts. You can create, modify, and delete a service role from within IAM. For example, you can createa role that allows Amazon Redshift to access an Amazon S3 bucket on your behalf and then load datafrom that bucket into an Amazon Redshift cluster. For more information, see Creating a Role to DelegatePermissions to an AWS Service in the IAM User Guide.

• 在 Amazon EC2 上執行的應用程式 – You can use an IAM role to manage temporary credentials forapplications that are running on an EC2 instance and making AWS CLI or AWS API requests. This ispreferable to storing access keys within the EC2 instance. To assign an AWS role to an EC2 instanceand make it available to all of its applications, you create an instance profile that is attached to theinstance. An instance profile contains the role and enables programs that are running on the EC2instance to get temporary credentials. For more information, see Using an IAM Role to Grant Permissionsto Applications Running on Amazon EC2 Instances in the IAM User Guide.

若要了解是否要使用 IAM 角色,請參閱 IAM User Guide中的建立 IAM 角色 (而非使用者) 的時機。

使用政策管理存取權您可以透過建立政策並將其連接到 IAM 身分或 AWS 資源,在 AWS 中控制存取。政策是 AWS 中的一個物件,當其和實體或資源建立關聯時,便可定義其許可。AWS 會在實體 (root user、IAM 使用者或 IAM 角色)發出請求時評估這些政策。政策中的許可,決定是否允許或拒絕請求。大部分政策以 JSON 文件形式存放在AWS 中。如需 JSON 政策文件結構和內容的詳細資訊,請參閱 IAM User Guide中的 JSON 政策概觀。

IAM 管理員可以使用政策指定能存取 AWS 資源的人員,以及他們能在這些資源上執行的動作。每個 IAM 實體 (使用者或角色) 在開始時都沒有許可。換句話說,根據預設,使用者無法執行任何作業,甚至也無法變更他們自己的密碼。若要授予使用者執行動作的許可,管理員必須將許可政策連接到使用者。或者,管理員可以將使用者新增到具備預定許可的群組。管理員將許可給予群組時,該群組中的所有使用者都會獲得那些許可。

IAM 政策定義該動作的許可,無論您使用何種方法來執行操作。例如,假設您有一個允許 iam:GetRole 動作的政策。具備該政策的使用者便可以從 AWS Management Console、AWS CLI 或 AWS API 取得使用者資訊。

身分型政策身分類型政策是您可以連接到身分 (例如 IAM 使用者、角色或群組) 的 JSON 許可政策文件。這些政策可控制身分在何種條件下能對哪些資源執行哪些動作。若要了解如何建立身分類型政策,請參閱 IAM UserGuide中的建立 IAM 政策。

身分類型政策可進一步分類成內嵌政策或受管政策。內嵌政策會直接內嵌到單一使用者、群組或角色。受管政策則是獨立的政策,您可以將這些政策連接到 AWS 帳戶中的多個使用者、群組和角色。受管政策包含

102

Page 108: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南AWS Batch 如何搭配 IAM 運作

AWS 受管政策和客戶受管政策。若要了解如何在受管政策及內嵌政策間選擇,請參閱 IAM User Guide中的在受管政策和內嵌政策間選擇。

資源型政策以資源為基礎的政策是附加到資源 (如 Amazon S3 儲存貯體) 的 JSON 政策文件。服務管理員可使用這些政策來定義指定委託人 (帳戶成員、使用者或角色) 可以在什麼情況下對該資源執行什麼動作。以資源為基礎的政策是內嵌政策。不存在受管的以資源為基礎的政策。

存取控制清單 (ACL)存取控制政策 (ACL) 可控制哪些委託人 (帳戶成員、使用者或角色) 擁有存取某資源的許可。ACL 類似以資源為基礎的政策,雖然是不使用 JSON 政策文件格式的唯一政策類型。Amazon S3、AWS WAF 和 AmazonVPC 是支援 ACL 的服務範例。如需進一步了解 ACL 的相關資訊,請參閱 Amazon Simple Storage Service開發人員指南中的存取控制清單 (ACL) 概觀。

其他政策類型AWS 支援其他較少見的政策類型。這些政策類型可設定較常見政策類型授予您的最大許可。

• 許可界限 – 許可界限是一種進階功能,可供您設定身分類型政策能授予 IAM 實體 (IAM 使用者或角色) 的最大許可。您可以為實體設定許可界限。所產生的許可會是實體的身分類型政策和其許可界限的交集。會在 Principal 欄位中指定使用者或角色的資源類型政策則不會受到許可界限限制。所有這類政策中的明確拒絕都會覆寫該允許。如需許可界限的詳細資訊,請參閱《IAM User Guide》中的 IAM 實體的許可界限。

• 服務控制政策 (SCP) – SCP 是 JSON 政策,可指定 AWS Organizations 中組織或組織單位的最大許可。AWS Organizations 是一種用來群組和集中管理您商業所擁有多個 AWS 的一項服務。若您啟用組織中的所有功能,您可以將服務控制政策 (SCP) 套用到任何或所有帳戶。SCP 會限制成員帳戶中實體的許可,包括每個 AWS 帳戶根使用者。如需 Organizations 和 SCP 的詳細資訊,請參閱《AWSOrganizations User Guide》中的 SCP 的運作方式。

• 工作階段政策 – 工作階段政策是一種進階政策,您可以在透過編寫程式的方式建立角色或聯合身分使用者的暫時工作階段時,做為參數傳遞。所產生工作階段的許可會是使用者或角色的身分類型政策和工作階段政策的交集。許可也可以來自資源類型政策。所有這類政策中的明確拒絕都會覆寫該允許。如需詳細資訊,請參閱 IAM User Guide 中的工作階段政策。

多種政策類型將多種政策類型套用到請求時,其結果形成的許可會更為複雜、更加難以理解。若要了解 AWS 在涉及多種政策類型時如何判斷是否允許一項請求,請參閱《IAM User Guide》中的政策評估邏輯。

如需 AWS Batch Identity and Access Management 的詳細資訊,請繼續參閱以下頁面。

• AWS Batch 如何搭配 IAM 運作 (p. 103)• 針對 AWS Batch Identity and Access 進行故障診斷 (p. 107)

AWS Batch 如何搭配 IAM 運作在您使用 IAM 管理 AWS Batch 的存取權前,建議您先了解可搭配 AWS Batch 使用的 IAM 功能有哪些。若要取得 AWS Batch 和其他 AWS 服務與 IAM 搭配運作的高層級檢視,請參閱《IAM User Guide》中的與IAM 搭配運作的 AWS 服務。

主題• AWS Batch 身分型政策 (p. 104)

103

Page 109: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南AWS Batch 如何搭配 IAM 運作

• AWS Batch IAM 角色 (p. 105)

AWS Batch 身分型政策使用 IAM 身分型政策,您可以指定允許或拒絕的動作和資源,以及在何種條件下會允許或拒絕動作。AWSBatch 支援特定動作、資源及條件金鑰。若要了解您在 JSON 政策中使用的所有元素,請參閱 IAM UserGuide中的 IAM JSON 政策元素參考。

動作

IAM 身分類型政策的 Action 元素會描述政策將允許或拒絕的特定動作。政策動作的名稱通常會和相關聯的AWS API 操作相同。政策會使用動作來授予執行相關聯操作的許可。

AWS Batch 中的政策動作會在動作前使用以下前綴:batch:。例如,若要授予某人使用 AWS Batch 任務搭配 AWS Batch SubmitJob API 操作的許可,請在其政策中包含 batch:SubmitJob 動作。政策陳述式必須包含 Action 或 NotAction 元素。AWS Batch 會定義一組自己的動作,來描述您可以使用此服務執行的任務。

若要在單一陳述式中指定多個動作,請用逗號分隔,如下所示。

"Action": [ "batch:action1", "batchaction2"

您也可以使用萬用字元 (*) 來指定多個動作。例如,若要指定開頭是 Describe 文字的所有動作,請包含以下動作:

"Action": "batch:Describe*"

若要查看 AWS Batch 動作的清單,請參閱 IAM User Guide中的 Actions Defined by AWS Batch。

資源

Resource 元素可指定動作套用的物件。陳述式必須包含 Resource 或 NotResource 元素。您可以使用ARN 來指定資源,或是使用萬用字元 (*) 來指定陳述式套用到所有資源。

AWS Batch 任務定義資源具有以下 ARN。

arn:${Partition}:batch:${Region}:${Account}:job-definition/${JobDefinition}

如需 ARN 格式的詳細資訊,請參閱 Amazon Resource Name (ARN) 和 AWS 服務命名空間。

例如,若要在陳述式中指定 JobDefinitionAlpha 任務定義,請使用以下 ARN。

"Resource": "arn:aws:batch:us-east-1:123456789012:job-definition/JobDefinitionAlpha"

若要指定屬於特定帳戶的所有執行個體,請使用萬用字元 (*)。

"Resource": "arn:aws:batch:us-east-1:123456789012:job-definition/*"

有些 AWS Batch 動作 (例如用來建立資源的動作) 無法在特定資源上執行。在那些情況下,您必須使用萬用字元 (*)。

104

Page 110: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南AWS Batch 如何搭配 IAM 運作

"Resource": "*"

一個 AWS Batch API 動作涉及多個資源。 SubmitJob 會將任務提交至任務佇列,而 IAM 使用者必須擁有許可才能使用任務定義和任務佇列。若要在單一陳述式中指定多項資源,請使用逗號分隔 ARN。

"Resource": [ "resource1", "resource2"

若要查看 AWS Batch 資源類型的清單及其 ARN,請參閱《IAM User Guide》中的 Resources Definedby AWS Batch。您若要了解您可以使用哪些動作指定每項資源的 ARN,請參閱 Actions Defined by AWSBatch。

條件金鑰Condition 元素 (或 Condition「區塊」) 可讓您指定使陳述式生效的條件。Condition 元素是選用的。您可以建置使用條件運算子的條件表達式 (例如等於或小於),來比對政策中的條件和請求中的值。

若您在陳述式中指定多個 Condition 元素,或是在單一 Condition 元素中指定多個金鑰,AWS 會使用邏輯 AND 操作評估他們。若您為單一條件金鑰指定多個值,AWS 會使用邏輯 OR 操作評估條件。必須符合所有條件,才會授予陳述式的許可。

您也可以在指定條件時使用預留位置變數。例如,您可以只在使用者使用其 IAM 使用者名稱標記時,將存取資源的許可授予該 IAM 使用者。如需詳細資訊,請參閱 IAM 使用者指南中的 IAM 政策元素:變數和標籤。

AWS Batch 會定義自己的一組條件金鑰,也支援一些全域條件金鑰的使用。若要查看所有 AWS 全域條件金鑰,請參閱 IAM User Guide中的 AWS 全域條件內容金鑰。

AWS Batch RegisterJobDefinition 動作支援 batch:User, batch:Privileged 和 batch:Image 條件金鑰。如需詳細資訊,請參閱the section called “支援的資源層級許可” (p. 76)。

若要查看 AWS Batch 條件金鑰的清單,請參閱《IAM User Guide》中的 Condition Keys for AWS Batch。若要了解您可以針對何種動作及資源使用條件金鑰,請參閱 Actions Defined by AWS Batch。

範例

若要檢視 AWS Batch 身分型政策範例,請參閱身分型政策範例 (p. 106)。

AWS Batch 不支援資源類型政策。

AWS Batch 不支援根據標籤來標記資源或控制存取。

AWS Batch IAM 角色IAM 角色是您 AWS 帳戶中的一種實體,具備特定許可。

搭配 AWS Batch 使用暫時登入資料您可以搭配聯合使用暫時登入資料登入、取得 IAM 角色,或是取得跨帳戶角色。您取得暫時安全登入資料的方式是透過呼叫 AWS STS API 操作 (例如,AssumeRole 或 GetFederationToken)。

AWS Batch 支援使用暫時登入資料。

服務連結角色服務連結角色可讓 AWS 服務存取其他服務中的資源,以代您完成動作。服務連結角色會顯示在您的 IAM 帳戶中,並由該服務所擁有。IAM 管理員可以檢視,但不能編輯服務連結角色的許可。

105

Page 111: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南身分型政策範例

AWS Batch 不支援服務連結角色。

服務角色此功能可讓服務代表您擔任服務角色。此角色可讓服務存取其他服務中的資源,以代表您完成動作。服務角色會出現在您的 IAM 帳戶,且由該帳戶所擁有。這表示 IAM 管理員可以變更此角色的許可。不過,這樣可能會破壞此服務的功能。

AWS Batch 支援服務角色。

AWS Batch 身分型政策範例根據預設,IAM 使用者和角色不具備建立或修改 AWS Batch 資源的許可。他們也無法使用 AWSManagement Console、AWS CLI 或 AWS API 執行任務。IAM 管理員必須建立 IAM 政策,授予使用者和角色在他們所需指定資源上執行特定 API 操作的許可。管理員接著必須將這些政策連接至需要這些許可的 IAM使用者或群組。

若要了解如何使用這些範例 JSON 政策文件建立 IAM 身分型政策,請參閱 IAM User Guide中的在 JSON 標籤上建立政策。

主題• 政策最佳實務 (p. 106)• 允許使用者檢視他們自己的許可 (p. 106)

政策最佳實務身分類型政策相當強大。他們可以判斷您帳戶中的某個人員是否可以建立、存取或刪除 AWS Batch 資源。這些動作可能會讓您的 AWS 帳戶產生成本。當您建立或編輯身分類型政策時,請遵循下列準則及建議事項。

• 開始使用 AWS 受管政策 – 若要快速地開始使用 AWS Batch,請使用 AWS 受管政策來給予您的員工他們需要的許可。這些政策已在您的帳戶中提供,並由 AWS 維護和更新。如需詳細資訊,請參閱《IAM UserGuide》中的開始搭配 AWS 受管政策使用許可。

• 授予最低權限 – 當您建立自訂政策時,請只授予執行任務所需要的許可。以最小一組許可開始,然後依需要授予額外的許可。這比一開始使用太寬鬆的許可,稍後再嘗試將他們限縮更為安全。如需詳細資訊,請參閱《IAM User Guide》中的授予最低權限。

• 為敏感操作啟用 MFA – 為了增加安全,請要求 IAM 使用者使用多重驗證 (MFA) 存取敏感資源或 API 操作。如需詳細資訊,請參閱《IAM User Guide》中的在 AWS 中使用多重驗證 (MFA)。

• 使用政策條件以增加安全 – 在切實可行的範圍中,請定義您身分類型政策允許存取資源的條件。例如,您可以撰寫條件,指定請求必須來自一定的允許 IP 地址範圍。您也可以撰寫條件,只在指定的日期或時間範圍內允許請求,或是要求使用 SSL 或 MFA。如需詳細資訊,請參閱《IAM User Guide》中的 IAM JSON政策元素:條件。

允許使用者檢視他們自己的許可此範例會示範如何建立政策,允許 IAM 使用者檢視連接到他們使用者身分的內嵌及受管政策。此政策包含在主控台上,或是使用 AWS CLI 或 AWS API 透過編寫程式的方式完成此動作的許可。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ViewOwnUserInfo", "Effect": "Allow", "Action": [

106

Page 112: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南故障診斷

"iam:GetUserPolicy", "iam:ListGroupsForUser", "iam:ListAttachedUserPolicies", "iam:ListUserPolicies", "iam:GetUser" ], "Resource": [ "arn:aws:iam::*:user/${aws:username}" ] }, { "Sid": "NavigateInConsole", "Effect": "Allow", "Action": [ "iam:GetGroupPolicy", "iam:GetPolicyVersion", "iam:GetPolicy", "iam:ListAttachedGroupPolicies", "iam:ListGroupPolicies", "iam:ListPolicyVersions", "iam:ListPolicies", "iam:ListUsers" ], "Resource": "*" } ] }

針對 AWS Batch Identity and Access 進行故障診斷請使用以下資訊來協助您診斷和修復使用 AWS Batch 和 IAM 時發生的常見問題。

主題• 我未獲得在 AWS Batch 中執行動作的授權 (p. 107)• 我未獲得執行 iam:PassRole 的授權 (p. 107)• 我想要檢視我的存取金鑰 (p. 108)• 我是管理員,而且我想要允許其他人存取 AWS Batch (p. 108)• 我想要允許我的 AWS 帳戶之外的人存取我的 AWS Batch 資源 (p. 108)

我未獲得在 AWS Batch 中執行動作的授權若 AWS Management Console 告知您並未獲得執行動作的授權,您必須聯絡您的管理員以取得協助。您的管理員是提供您使用者名稱和密碼的人員。

以下範例錯誤發生於當 mateojackson IAM 使用者嘗試使用主控台來檢視關於運算環境的詳細資訊,但沒有 batch:DescribeComputeEnvironments 許可的情況。

User: arn:aws:iam::123456789012:user/mateojackson is not authorized to perform: batch:DescribeComputeEnvironments on resource: my-example-compute-environment

在此情況下,Mateo 會請求管理員更新他的政策,允許他使用 batch:DescribeComputeEnvironments動作存取 my-example-compute-environment 資源。

我未獲得執行 iam:PassRole 的授權若您收到錯誤,告知您並未獲得執行 iam:PassRole 動作的授權,您必須聯絡您的管理員以取得協助。您的管理員是提供您使用者名稱和密碼的人員。請求該人員更新您的政策,允許您將角色傳遞給 AWS Batch。

107

Page 113: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南故障診斷

有些 AWS 服務允許您傳遞現有的角色至該服務,而無須建立新的服務角色或服務連結角色。若要執行此作業,您必須擁有將角色傳遞至該服務的許可。

以下範例錯誤會在名為 marymajor 的 IAM 使用者嘗試使用主控台在 AWS Batch 中執行動作時發生。但是,動作要求服務具備服務角色授予的許可。Mary 沒有將角色傳遞至該服務的許可。

User: arn:aws:iam::123456789012:user/marymajor is not authorized to perform: iam:PassRole

在這種情況下,Mary 會請求管理員更新她的政策,允許她執行 iam:PassRole 動作。

我想要檢視我的存取金鑰在您建立 IAM 使用者存取金鑰後,您可以隨時檢視您的存取金鑰 ID。但是,您無法再次檢視您的私密存取金鑰。若您遺失了秘密金鑰,您必須建立新的存取金鑰對。

存取金鑰包含兩個部分:存取金鑰 ID (例如 AKIAIOSFODNN7EXAMPLE) 和私密存取金鑰 (例如wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY)。如同使用者名稱和密碼,您必須一起使用存取金鑰ID 和私密存取金鑰來驗證您的請求。就如對您的使用者名稱和密碼一樣,安全地管理您的存取金鑰。

Important

請不要將您的存取金鑰提供給第三方,甚至是協助尋找您的標準使用者 ID。執行此作業,可能會讓他人能夠永久存取您的帳戶。

建立存取金鑰對時,您會收到提示,要求您將存取金鑰 ID 和私密存取金鑰儲存在安全位置。私密存取金鑰只會在您建立它的時候顯示一次。若您遺失了私密存取金鑰,您必須將新的存取金鑰新增到您的 IAM 使用者。您最多可以擁有兩個存取金鑰。若您已有兩個存取金鑰,您必須先刪除其中一個金鑰對,才能建立新的金鑰對。若要檢視說明,請參閱《IAM User Guide》中的管理存取金鑰。

我是管理員,而且我想要允許其他人存取 AWS Batch若要允許其他人存取 AWS Batch,您必須針對需要存取的人員或應用程式建立 IAM 實體 (使用者或角色)。他們將使用該實體的登入資料來存取 AWS。您接著必須將政策連接到實體,在 AWS Batch 中授予正確的許可。

若要立即開始使用,請參閱《IAM User Guide》中的建立您的第一個 IAM 委派使用者及群組。

我想要允許我的 AWS 帳戶之外的人存取我的 AWS Batch 資源您可以建立一個角色,讓其他帳戶中的使用者或您組織外部的人員存取您的資源。您可以指定要允許哪些信任對象取得該角色。針對支援資源類型政策或存取控制清單 (ACL) 的服務,您可以使用那些政策來授予人員存取您資源的權限。

若要進一步了解,請參閱以下內容。

• 若要了解 AWS Batch 是否支援這些功能,請參閱AWS Batch 如何搭配 IAM 運作 (p. 103)。• 若要了解如何對您擁有的所有 AWS 帳戶提供資源的存取,請參閱《IAM User Guide》中的對您所擁有的

另一個 AWS 帳戶中的 IAM 使用者提供存取。• 若要了解如何將資源的存取權限提供給第三方 AWS 帳戶,請參閱《IAM User Guide》中的將存取權限提

供給第三方擁有的 AWS 帳戶。• 若要了解如何透過聯合身分提供存取權限,請參閱《IAM User Guide》中的將存取權限提供給在外部進行

身份驗證的使用者 (聯合身分)。• 若要了解針對跨帳戶存取使用角色及資源類型政策的差異,請參閱《IAM User Guide》中的 IAM 角色與資

源類型政策的差異。

108

Page 114: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南合規驗證

AWS Batch 的合規驗證在多個 AWS 合規計劃中,第三方稽核人員會評估 AWS Batch 的安全與合規。這些包括SOC、PCI、ISO、HIPAA BAA、MTCS 和其他。

如需特定合規計劃範圍內的 AWS 服務清單,請參閱合規計劃範圍內的 AWS 服務。如需一般資訊,請參閱AWS 合規計劃。

您可使用 AWS Artifact 下載第三方稽核報告。如需詳細資訊,請參閱在 AWS Artifact 中下載報告。

您使用 AWS Batch 時的合規責任,取決於資料的機密性、您公司的合規目標,以及適用的法律和法規。AWS 會提供以下資源協助您處理合規事宜。

• 安全與合規快速入門指南 – 這些部署指南討論在 AWS 上部署以安全及合規為重心基準環境的架構考量和步驟。

• HIPAA 安全與合規架構白皮書 – 本白皮書說明公司可如何運用 AWS 來建立 HIPAA 合規的應用程式。• AWS 合規資源 – 這組手冊和指南可能適用於您的產業和位置。• AWS Config – 此 AWS 服務可評定資源組態與內部實務、業界準則和法規的合規狀態。• AWS Security Hub – 此 AWS 服務可供您檢視 AWS 中的安全狀態,可助您檢查是否符合安全產業標準和

最佳實務。

AWS Batch 中的基礎設施安全AWS Batch 為受管服務,受到 Amazon Web Services:安全程序概觀白皮書所述 AWS 全球網路安全程序的保護。

您可使用 AWS 發佈的 API 呼叫,透過網路存取 AWS Batch。用戶端必須支援 Transport Layer Security(TLS) 1.0 或更新版本。建議使用 TLS 1.2 或更新版本。用戶端也必須支援具備完美轉送私密 (PFS) 的密碼套件,例如臨時 Diffie-Hellman (DHE) 或橢圓曲線臨時 Diffie-Hellman (ECDHE)。現代系統 (如 Java 7 和更新版本) 大多會支援這些模式。

此外,請求必須使用存取金鑰 ID 和與 IAM 委託人相關聯的私密存取金鑰來簽署。或者,您可以使用 AWSSecurity Token Service (AWS STS) 來產生暫時安全登入資料來簽署請求。

109

Page 115: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南

AWS Batch Service Limits下表提供無法變更的 AWS Batch 服務限制。每個限制都是區域特定的。

資源 限制

任務佇列的數量上限如需更多詳細資訊,請參閱 任務佇列 (p. 47)。 20

運算環境的數量上限如需更多詳細資訊,請參閱 運算環境 (p. 51)。 50

每個任務佇列的運算環境上限數量 3

任務相依性上限數量 20

最大任務定義大小 (適用於 RegisterJobDefinition API 操作) 24 KiB

最大任務承載大小 (適用於 SubmitJob API 操作) 30 KiB

陣列任務的最大陣列大小 10000

SUBMITTED 狀態任務的最大數量 1000000

根據您使用 AWS Batch 的方式而定,可能需要額外的配額。若要了解 Amazon EC2 配額的相關資訊,請參閱 AWS General Reference 中的 Amazon EC2 服務配額。若要了解 Amazon ECS 配額的相關資訊,請參閱AWS General Reference 中的 Amazon ECS 配額。

110

Page 116: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南INVALID 運算環境

AWS Batch 故障診斷您的運算環境、任務佇列、任務定義或任務可能發生問題,因而需要疑難排解。本章將協助您進行疑難排解並修復 AWS Batch 環境的問題。

INVALID 運算環境受管運算環境可能在不正確設定下進入 INVALID 狀態,而無法接受置放任務。以下各節描述可能的原因,以及如何修正。

不正確的角色名稱或 ARN導致運算環境無效最常見的原因是 AWS Batch 服務角色或 Amazon EC2 Spot Fleet 角色的名稱或 ARN 不正確。這問題通常發生在 AWS CLI 或 AWS 開發套件所建立的運算環境;當您在 AWS Management Console內建立運算環境時,AWS Batch 可協助您選出正確的服務或 Spot Fleet 角色,如此您便不會拼錯或誤用ARN 的名稱。

不過,如果您手動以 AWS CLI 命令或軟體開發套件程式碼為 IAM 輸入名稱或 ARN,AWS Batch 將無法驗證字串,且可接受錯誤的值,並嘗試建立環境。環境建立失敗後,環境將變為 INVALID 狀態,而且會出現以下錯誤。

如為無效的服務角色:

CLIENT_ERROR - Not authorized to perform sts:AssumeRole (Service: AWSSecurityTokenService; Status Code: 403; Error Code: AccessDenied; Request ID: dc0e2d28-2e99-11e7-b372-7fcc6fb65fe7)

如為無效的 Spot Fleet 角色:

CLIENT_ERROR - Parameter: SpotFleetRequestConfig.IamFleetRole is invalid. (Service: AmazonEC2; Status Code: 400; Error Code: InvalidSpotFleetRequestConfig; Request ID: 331205f0-5ae3-4cea-bac4-897769639f8d) Parameter: SpotFleetRequestConfig.IamFleetRole is invalid

造成此問題的其中一個常見原因為,您使用 AWS CLI 或 AWS 開發套件時僅指定 IAM 角色的名稱,未指定完整的 ARN。這是因為 ARN 可能視您建立角色的方式而包含 service-role 路徑字首。例如,如果您利用 AWS Batch 服務 IAM 角色 (p. 81) 所述程序手動建立 AWS Batch 服務角色,您的服務角色 ARN 看起來像這樣:

arn:aws:iam::123456789012:role/AWSBatchServiceRole

不過,如果您今天在主控台初次執行精靈中建立服務角色,您的服務角色 ARN 看起來像這樣:

arn:aws:iam::123456789012:role/service-role/AWSBatchServiceRole

您使用 AWS CLI 或 AWS 開發套件時僅指定 IAM 角色的名稱,AWS Batch 便假設您的 ARN 不使用service-role 路徑字首。因此,我們建議您在建立運算環境時為 IAM 角色指定完整的 ARN。

若要修復按上述方式錯誤設定的運算環境,請參閱 修復 INVALID 的運算環境 (p. 112)。

111

Page 117: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南修復 INVALID 的運算環境

修復 INVALID 的運算環境您的運算環境處於 INVALID 狀態時,您應該進行更新,以修復無效的參數。如為 不正確的角色名稱或ARN (p. 111) 的情況,您可以更新運算環境為正確的服務角色。

修復設定錯誤的運算環境

1. 開啟位於 https://console.aws.amazon.com/batch/ 的 AWS Batch 主控台。2. 從導覽列中選取要使用的區域。3. 在導覽窗格中,選擇 Compute environments (運算環境)。4. 在 Compute environments (運算環境) 頁面,選擇要編輯的運算環境旁的選項按鈕,然後選擇 Edit (編

輯)。5. 在 Update compute environment (更新運算環境) 頁面,針對 Service role (服務角色) 選擇 IAM 角色,

以用於您的運算環境。AWS Batch 主控台只會顯示與運算環境有正確信任關係的角色。6. 選擇 Save (儲存),更新運算環境。

任務停留在 RUNNABLE 狀態如果您的運算環境包含運算資源,但您的任務無法跳至 RUNNABLE 以外的狀態,表示有原因使您的任務無法放置到運算資源。以下是一些造成此問題的常見原因:

您的運算資源未設定 awslogs 日誌驅動程式

AWS Batch 任務傳送其日誌資訊至 CloudWatch Logs。若要啟用此功能,您必須設定運算資源使用awslogs 日誌驅動程式。如果您將運算資源 AMI 建立在 Amazon ECS 最佳化 AMI (或 Amazon Linux)之外,然後該驅動程式預設以 ecs-init 套件註冊。如果您使用不同的基本 AMI,則您必須確保啟動Amazon ECS 容器代理程式時用 ECS_AVAILABLE_LOGGING_DRIVERS 環境變數將 awslogs 日誌驅動程式指定為可用的日誌驅動程式。如需詳細資訊,請參閱 運算資源 AMI 規格 (p. 52) 及 建立運算資源AMI (p. 53)。

資源不足

如果任務定義指定的 CPU 或記憶體資源超出運算資源,則您的任務絕對無法放置。例如,如果您的任務指定 4 GiB 的記憶體,而您的運算資源少於這個容量,則任務無法放置在這些運算資源上。在此情況下,您必須減少任務定義中所指定的記憶體,或在環境中加入更多運算資源。有些記憶體已預留給Amazon ECS 容器代理程式和其他關鍵系統的程序。如需詳細資訊,請參閱 記憶體管理 (p. 70)。

無運算資源的網際網路存取

需要存取權限,以便與 Amazon ECS 服務端點通訊。您可以透過界面 VPC 端點或透過擁有。

如需有關界面 VPC 端點的詳細資訊,請參閱 Amazon Elastic Container Service Developer Guide 中的 。

如果您沒有已設定的界面 VPC 端點,且您的不具有公有 IP 地址,則它們必須使用網路位址轉譯 (NAT)來提供存取。如需詳細資訊,請參閱本指南 Amazon VPC User Guide。如需更多詳細資訊,請參閱 教學:為建立含公有和私有子網路的 VPC (p. 98)。

達到 Amazon EC2 執行個體限制

您的帳戶在 AWS 區域內可以啟動的 Amazon EC2 執行個體數取決於您的 EC2 執行個體限制。有些執行個體類型也擁有根據執行個體類型的限制。如需您帳戶 Amazon EC2 執行個體限制 (包括如何請求提升限制) 的詳細資訊,請參閱 Amazon EC2 User Guide for Linux Instances 中的 Amazon EC2 ServiceLimits

如需有關診斷任務停滯於 RUNNABLE 狀態的詳細資訊,請參閱 AWS 知識中心中的為什麼我的 AWS 批次任務任務停滯於 RUNNABLE 狀態? 。

112

Page 118: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南建立時未標籤 Spot 執行個體

建立時未標籤 Spot 執行個體2017 年 10 月 25 日起支援 AWS Batch 運算資源的 Spot 執行個體標記。但在支援之前,適用於 AmazonEC2 Spot Fleet 角色的建議 IAM 受管政策 (AmazonEC2SpotFleetRole) 於啟動時並未包含標籤 Spot 執行個體的權限。新的建議 IAM 受管政策稱之為 AmazonEC2SpotFleetTaggingRole。

若要在建立時修正 Spot 執行個體標記,請依照下列程序將目前的建議 IAM 受管政策套用到您的 AmazonEC2 Spot Fleet 角色,然後該角色日後建立的任何 Spot 執行個體皆有權限可在建立時套用執行個體標籤。

將目前的 IAM 受管政策套用到 Amazon EC2 Spot Fleet 角色

1. Open the IAM console at https://console.aws.amazon.com/iam/.2. 選擇 Roles (角色),然後選擇您 Amazon EC2 Spot Fleet 角色。3. 選擇 Attach policy (連接政策)。4. 選擇 AmazonEC2SpotFleetTaggingRole,然後選擇 Attach policy (連結政策)。5. 再次選擇您的 Amazon EC2 Spot Fleet 角色,以移除先前的政策。6. 選擇 AmazonEC2SpotFleetRole 政策右側的 x,然後選擇 Detach (分離)。

113

Page 119: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南

文件歷史記錄下表說明 AWS Batch 初始版本後,文件的重要變更。我們也會經常更新文件,以處理您傳送給我們的意見回饋。

update-history-change update-history-description update-history-date

配置策略 AWS Batch 針對多種策略加入支援以選擇執行個體類型。

October 16, 2019

EFA 支援 AWS Batch 新增支援 ElasticFabric Adapter (EFA) 裝置。

August 2, 2019

GPU 排程 GPU 任務可讓您指定每個任務需要的 GPU。 AWS Batch 將擴展執行個體適用於您的任務。

April 4, 2019

多節點平行任務 多節點平行任務可讓您執行跨越多個 Amazon EC2 執行個體的單一任務。

November 19, 2018

資源層級許可 AWS Batch 現在支援數個 API 操作的資源層級許可。

November 12, 2018

Amazon EC2啟動範本支援 AWS Batch新增可在運算環境中使用啟動範本的支援。

November 12, 2018

AWS Batch 任務逾時 您可以設定任務的逾時時間,如此一來,假如任務執行超過該時間,AWS Batch 便會終止該任務。

April 5, 2018

以 AWS Batch 任務做為CloudWatch Events 目標

AWS Batch 任務可做為CloudWatch Events 目標。利用可快速設定的簡單規則,匹配事件並提交 AWS Batch 任務以回應事件。

March 1, 2018

適用於 AWS Batch 的 CloudTrail稽核

CloudTrail 可稽核對 AWS BatchAPI 動作所做的呼叫。

January 10, 2018

陣列任務 AWS Batch 支援陣列任務,這有助於參數掃描和 Monte Carlo 任務負載。

November 28, 2017

擴展 AWS Batch 標記 AWS Batch 可讓您指定在受管運算環境內啟動之 Amazon EC2Spot 執行個體的標籤。

October 26, 2017

適用於 CloudWatch Events 的AWS Batch 事件串流

可使用適用於 AWS Batch 的CloudWatch Events 事件串流,以近乎即時的方式接收有關已提交至任務佇列的任務目前狀態的通知。

October 24, 2017

自動化任務重試 您可套用重試策略至任務和任務定義,讓任務在失敗後自動重試。

March 28, 2017

114

Page 120: AWS Batch - 使用者指南 · 2020-02-07 · AWS Batch 使用者指南 AWS Batch 元件 什麼是 AWS Batch? AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。開發人員、科學家和工程師經常使用批次運算存

AWS Batch 使用者指南

AWS Batch 一般可用性 (p. 114) AWS Batch 可讓您在 AWS 雲端上執行批次運算工作負載。

January 5, 2017

115