使用自訂 AMI - Amazon EMR

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

使用自訂 AMI

使用 Amazon EMR 5.7.0 或更高版本時,您可以選擇指定自訂 Amazon Linux AMI,而不指定預設 Amazon Linux AMI for Amazon EMR。如果您要執行下列動作,可以使用自訂 AMI:

  • 預先安裝應用程式,並執行其他自訂項目,而不使用引導操作。這可以改善叢集開始時間並簡化啟動工作流程。如需詳細資訊和範例,請參閱 從預先設定的執行個體建立自訂 Amazon Linux AMI

  • 實作比引導操作所允許的組態更為複雜的叢集和節點組態。

  • 如果您使用的是低於 5.24.0 的 Amazon EMR 版本,加密叢集中 EC2 執行個體的 EBS 根裝置磁碟區 (根磁碟區)。與預設 AMI 一樣,若為 Amazon EMR 6.9 版及更低版本,自訂 AMI 的最小根磁碟區大小為 10 GiB,若為 Amazon EMR 6.10 版及更高版本,則為 15 GiB。如需詳細資訊,請參閱 建立具有加密 Amazon EBS 根裝置磁碟區的自訂 AMI

    注意

    從 Amazon EMR 5.24.0 版開始,當您指定 AWS KMS 為金鑰提供者時,您可以使用安全組態選項來加密 EBS 根裝置和儲存磁碟區。如需詳細資訊,請參閱 本機磁碟加密

自訂 AMI 必須存在於您建立叢集的相同 AWS 區域中。它也應與 EC2 執行個體架構相符。例如,m5.xlarge 執行個體具有 x86_64 架構。因此,若要使用自訂 AMI 佈建 m5.xlarge,您的自訂 AMI 也應具有 x86_64 架構。同樣地,若要佈建具有 arm64 架構的 m6g.xlarge 執行個體,您的自訂 AMI 應具有 arm64 架構。如需針對您的執行個體類型識別 Linux AMI 的詳細資訊,請參閱 Amazon EC2 使用者指南中的尋找 Linux AMI

重要

執行 Amazon Linux 或 Amazon Linux 2 Amazon Machine Image (AMI) 的 EMR 叢集會使用預設的 Amazon Linux 行為,而且不會自動下載和安裝需要重新開機的重要和關鍵核心更新。這與執行預設 Amazon Linux AMI 的其他 Amazon EC2 執行個體的行為相同。如果需要重新開機的新 Amazon Linux 軟體更新 (例如核心、NVIDIA 和 CUDA 更新) 在 Amazon EMR 版本發行後可用,則執行預設 AMI 的 EMR 叢集執行個體不會自動下載並安裝這些更新。若要取得核心更新,您可以自訂 Amazon EMR AMI,以使用最新的 Amazon Linux AMI

從預先設定的執行個體建立自訂 Amazon Linux AMI

預先安裝軟體並執行其他組態以建立自訂 Amazon Linux AMI for Amazon EMR 的基本步驟如下:

  • 從基本 Amazon Linux AMI 啟動執行個體。

  • 連接到執行個體以安裝軟體並執行其他自訂。

  • 建立您所設定執行個體的新映像 (AMI 快照)。

在您根據自訂的執行個體建立映像之後,您可以將該映像複製到加密的目標,如 建立具有加密 Amazon EBS 根裝置磁碟區的自訂 AMI 中所述。

教學課程:從已安裝自訂軟體的執行個體建立 AMI

根據最新的 Amazon Linux AMI 啟動 EC2 執行個體
  1. 使用執 AWS CLI 行下列命令,該命令會從現有 AMI 建立執行個體。請以您用來連線到執行個體的 key pair 以及MyAmiId適當 Amazon Linux AMI 的識別碼取MyKeyName代。如需最新的 AMI ID,請參閱 Amazon Linux AMI

    注意

    包含 Linux 行接續字元 (\) 是為了提高可讀性。它們可以在 Linux 命令中移除或使用。對於 Windows,請將其移除或取代為插入符號 (^)。

    aws ec2 run-instances --image-id MyAmiID \ --count 1 --instance-type m5.xlarge \ --key-name MyKeyName --region us-west-2

    InstanceId 輸出值會在下一個步驟中做為 MyInstanceId 使用。

  2. 執行以下命令:

    aws ec2 describe-instances --instance-ids MyInstanceId

    PublicDnsName 輸出值會在下一個步驟中用來連線到執行個體。

連線到執行個體並安裝軟體
  1. 使用可讓您在 Linux 執行個體上執行 shell 命令的 SSH 連線。如需詳細資訊,請參閱 Amazon EC2 使用者指南中的使用安全殼層連線到 Linux 執行個體。

  2. 進行任何必要的自訂。例如:

    sudo yum install MySoftwarePackage sudo pip install MySoftwarePackage
從自訂映像建立快照

如何在 Amazon EMR 叢集中使用自訂 AMI

您可以透過兩種方式,使用自訂 AMI 佈建 Amazon EMR 叢集:

  • 針對叢集中的所有 EC2 執行個體,使用單一自訂 AMI。

  • 針對叢集中使用的不同 EC2 執行個體類型,使用不同的自訂 AMI。

在佈建 EMR 叢集時,您只能使用這兩個選項之一,一旦叢集啟動就無法變更。

在 Amazon EMR 叢集中使用單一與多個自訂 AMI 的考量
考量事項 單一自訂 AMI 多個自訂 AMI

在相同叢集中同時將 x86 和 Graviton2 處理器與自訂 AMI 搭配使用

不支援

支援

AMI 自訂因執行個體類型而異

不支援

支援

將新的任務執行個體群組/機群新增至執行中的叢集時,變更自訂 AMI。注意:您無法變更現有執行個體群組/機群的自訂 AMI。

不支援

支援

使用 AWS 主控台啟動叢集

支援

不支援

用 AWS CloudFormation 於啟動叢集

支援

支援

在 EMR 叢集中使用單一自訂 AMI

若要在您建立叢集時指定自訂 AMI ID,請使用下列其中一項:

Amazon EMR console
從主控台指定單一自訂 AMI
  1. 登入 AWS Management Console,然後開啟 Amazon EMR 主控台,網址為 https://console.aws.amazon.com/emr

  2. 在左側導覽窗格中的 EC2 上的 EMR 下,選擇叢集,然後選擇建立叢集

  3. 名稱和應用程式下,尋找作業系統選項。選擇自訂 AMI,然後在自訂 AMI 欄位中輸入您的 AMI ID。

  4. 選擇適用於您的叢集的任何其他選項。

  5. 若要啟動您的叢集,請選擇建立叢集

AWS CLI
使用指定單一自訂 AMI AWS CLI
  • 在您執行 --custom-ami-id 命令時,使用 aws emr create-cluster 參數來指定 AMI ID。

    下列範例指定使用單一自訂 AMI 和 20 GiB 開機磁碟區的叢集。如需詳細資訊,請參閱 自訂 Amazon EBS 根裝置磁碟區

    注意

    包含 Linux 行接續字元 (\) 是為了提高可讀性。它們可以在 Linux 命令中移除或使用。對於 Windows,請將其移除或取代為插入符號 (^)。

    aws emr create-cluster --name "Cluster with My Custom AMI" \ --custom-ami-id MyAmiID --ebs-root-volume-size 20 \ --release-label emr-5.7.0 --use-default-roles \ --instance-count 2 --instance-type m5.xlarge

在 Amazon EMR 叢集中使用多個自訂 AMI

若要使用多個自訂 AMI 建立叢集,請使用下列其中一項:

AWS 管理主控台目前不支援使用多個自訂 AMI 建立叢集。

範例 -使用 AWS CLI 建立使用多個自訂 AMI 的執行個體群組叢集

使用 AWS CLI 版本 1.20.21 或更高版本,您可以將單一自訂 AMI 指派給整個叢集,也可以將多個自訂 AMI 指派給叢集中的每個執行個體節點。

下列範例顯示透過跨節點類型 (主節點、核心節點、任務節點) 使用的兩種執行個體類型 (m5.xlarge) 所建立的統一執行個體群組叢集。每個節點都具有多個自訂 AMI。此範例說明多個自訂 AMI 組態的數個功能:

  • 沒有在叢集層級指派自訂 AMI。這是為了避免多個自訂 AMI 與單一自訂 AMI 之間的衝突,這會導致叢集啟動失敗。

  • 該叢集可以在主節點、核心節點和個別任務節點上具有多個自訂 AMI。這允許個別 AMI 自訂,例如預先安裝的應用程式、複雜的叢集組態,以及加密的 Amazon EBS 根裝置磁碟區。

  • 執行個體群組核心節點只能具有一個執行個體類型和對應的自訂 AMI。同樣地,主節點只能具有一個執行個體類型和對應的自訂 AMI。

  • 叢集可以具有多個任務節點。

aws emr create-cluster --instance-groups InstanceGroupType=PRIMARY,InstanceType=m5.xlarge,InstanceCount=1,CustomAmiId=ami-123456 InstanceGroupType=CORE,InstanceType=m5.xlarge,InstanceCount=1,CustomAmiId=ami-234567 InstanceGroupType=TASK,InstanceType=m6g.xlarge,InstanceCount=1,CustomAmiId=ami-345678 InstanceGroupType=TASK,InstanceType=m5.xlarge,InstanceCount=1,CustomAmiId=ami-456789
範例 -使用 AWS CLI 版本 1.20.21 或更新版本,將任務節點新增至具有多個執行個體類型和多個自訂 AMI 的執行中執行個體群組叢集

使用 AWS CLI 版本 1.20.21 或更新版本,您可以將多個自訂 AMI 新增至新增至執行中叢集的執行個體群組。CustomAmiId 引數可以與 add-instance-groups 命令搭配使用,如下列範例所示。請注意,在多個節點中使用相同的多個自訂 AMI ID (ami-123456)。

aws emr create-cluster --instance-groups InstanceGroupType=PRIMARY,InstanceType=m5.xlarge,InstanceCount=1,CustomAmiId=ami-123456 InstanceGroupType=CORE,InstanceType=m5.xlarge,InstanceCount=1,CustomAmiId=ami-123456 InstanceGroupType=TASK,InstanceType=m5.xlarge,InstanceCount=1,CustomAmiId=ami-234567 { "ClusterId": "j-123456", ... } aws emr add-instance-groups --cluster-id j-123456 --instance-groups InstanceGroupType=Task,InstanceType=m6g.xlarge,InstanceCount=1,CustomAmiId=ami-345678
範例 -使用 AWS CLI 版本 1.20.21 或更高版本建立執行個體叢集、多個自訂 AMI、多個執行個體類型、隨需主要、隨需核心、多個核心和任務節點
aws emr create-cluster --instance-fleets InstanceFleetType=PRIMARY,TargetOnDemandCapacity=1,InstanceTypeConfigs=['{InstanceType=m5.xlarge, CustomAmiId=ami-123456}'] InstanceFleetType=CORE,TargetOnDemandCapacity=1,InstanceTypeConfigs=['{InstanceType=m5.xlarge,CustomAmiId=ami-234567},{InstanceType=m6g.xlarge, CustomAmiId=ami-345678}'] InstanceFleetType=TASK,TargetSpotCapacity=1,InstanceTypeConfigs=['{InstanceType=m5.xlarge,CustomAmiId=ami-456789},{InstanceType=m6g.xlarge, CustomAmiId=ami-567890}']
範例 -使用 AWS CLI 版本 1.20.21 或更高版本,將任務節點新增至具有多個執行個體類型和多個自訂 AMI 的執行中叢集
aws emr create-cluster --instance-fleets InstanceFleetType=PRIMARY,TargetOnDemandCapacity=1,InstanceTypeConfigs=['{InstanceType=m5.xlarge, CustomAmiId=ami-123456}'] InstanceFleetType=CORE,TargetOnDemandCapacity=1,InstanceTypeConfigs=['{InstanceType=m5.xlarge,CustomAmiId=ami-234567},{InstanceType=m6g.xlarge, CustomAmiId=ami-345678}'] { "ClusterId": "j-123456", ... } aws emr add-instance-fleet --cluster-id j-123456 --instance-fleet InstanceFleetType=TASK,TargetSpotCapacity=1,InstanceTypeConfigs=['{InstanceType=m5.xlarge,CustomAmiId=ami-234567},{InstanceType=m6g.xlarge, CustomAmiId=ami-345678}']

管理 AMI 套件儲存庫更新

第一次開機時,Amazon Linux AMI 預設會在其他服務啟動之前,先連接至套件儲存庫以安裝安全更新。根據您的要求,您可以在為 Amazon EMR 指定自訂 AMI 時選擇停用這些更新。停用此功能的選項只有在您使用自訂 AMI 時才可使用。依預設,不會更新 Amazon Linux 核心更新及其他需要重新開機的軟體套件。請注意,您的聯網組態必須允許 HTTP 和 HTTPS 輸出至 Amazon S3 中的 Amazon Linux 儲存庫,否則安全更新將不會成功。

警告

我們強烈建議您在指定自訂 AMI 時,選擇在重新開機時更新所有已安裝的套件。選擇不更新套件會產生其他安全風險。

使用 AWS Management Console,您可以在選擇 [自訂 AMI] 時選取停用更新的選項。

使用 AWS CLI,您可以在使用指--repo-upgrade-on-boot NONEcreate-cluster--custom-ami-id時指定。

使用 Amazon EMR API,您可以NONERepoUpgradeOnBoot參數指定。

建立具有加密 Amazon EBS 根裝置磁碟區的自訂 AMI

若要加密 Amazon Linux AMI for Amazon EMR 的 Amazon EBS 根裝置磁碟區,請將快照映像從未加密的 AMI 複製到加密的目標。如需建立加密 EBS 磁碟區的相關資訊,請參閱 Amazon EC2 使用者指南中的 Amazon EBS 加密。快照的來源 AMI 可以是基本 Amazon Linux AMI,您也可以從您自訂的基本 Amazon Linux AMI 衍生的 AMI 複製快照。

注意

從 Amazon EMR 5.24.0 版開始,當您指定 AWS KMS 為金鑰提供者時,您可以使用安全組態選項來加密 EBS 根裝置和儲存磁碟區。如需詳細資訊,請參閱 本機磁碟加密

您可以使用外部金鑰提供者或 AWS KMS 金鑰來加密 EBS 根磁碟區。Amazon EMR 使用的服務角色 (通常是預設 EMR_DefaultRole) 必須至少能夠加密和解密磁碟區,Amazon EMR 才能使用 AMI 建立叢集。當作 AWS KMS 為金鑰提供者使用時,這表示必須允許下列動作:

  • kms:encrypt

  • kms:decrypt

  • kms:ReEncrypt*

  • kms:CreateGrant

  • kms:GenerateDataKeyWithoutPlaintext"

  • kms:DescribeKey"

這樣做的最簡單方法,是新增該角色作為金鑰使用者,如下列教學課程所述。如果您需要自訂角色政策,請參考以下提供的範例政策陳述式。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "EmrDiskEncryptionPolicy", "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:CreateGrant", "kms:GenerateDataKeyWithoutPlaintext", "kms:DescribeKey" ], "Resource": [ "*" ] } ] }

教學課程:使用 KMS 金鑰建立具有加密根裝置磁碟區的自訂 AMI

此範例中的第一個步驟是尋找 KMS 金鑰的 ARN,或建立新金鑰。如需有關建立金鑰的詳細資訊,請參閱《AWS Key Management Service 開發人員指南》中的建立金鑰。下列程序說明如何將預設服務角色 EMR_DefaultRole 做為金鑰使用者新增至金鑰政策。在您建立或編輯時,記下金鑰的 ARN (ARN) 值。建立 AMI 時,您可以使用更高等級的 ARN。

使用主控台將 Amazon EC2 的服務角色新增至加密金鑰使用者清單
  1. 登入 AWS Management Console 並開啟 AWS Key Management Service (AWS KMS) 主控台,網址為 https://console.aws.amazon.com/kms

  2. 若要變更 AWS 區域,請使用頁面右上角的「地區」選取器。

  3. 選擇要使用的 KMS 金鑰別名。

  4. Key Users (金鑰使用者) 下的金鑰詳細資訊頁面上,選擇 Add (新增)

  5. 附接對話方塊中,選擇 Amazon EMR 服務角色。預設角色的名稱為 EMR_DefaultRole

  6. 選擇 Attach (連接)。

若要建立加密的 AMI AWS CLI
  • 使用中的aws ec2 copy-image命令建立具有加密 EBS 根裝置磁碟區和您修改的金鑰的 AMI。 AWS CLI 將指定的 --kms-key-id 值取代為您建立或修改的更低等級的完整金鑰 ARN。

    注意

    包含 Linux 行接續字元 (\) 是為了提高可讀性。它們可以在 Linux 命令中移除或使用。對於 Windows,請將其移除或取代為插入符號 (^)。

    aws ec2 copy-image --source-image-id MyAmiId \ --source-region us-west-2 --name MyEncryptedEMRAmi \ --encrypted --kms-key-id arn:aws:kms:us-west-2:12345678910:key/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

命令的輸出會提供您建立的 AMI ID,您可以在建立叢集時指定。如需詳細資訊,請參閱 在 EMR 叢集中使用單一自訂 AMI。您也可以藉由安裝軟體並執行其他組態選擇自訂此 AMI。如需詳細資訊,請參閱 從預先設定的執行個體建立自訂 Amazon Linux AMI

最佳實務和考量

當您建立自訂 AMI for Amazon EMR 時,請考慮下列事項:

  • Amazon EMR 7.x 系列基於 Amazon Linux 2023。對於這些 Amazon EMR 版本,您需要使用以 Amazon Linux 2023 為基礎的映像來進行自訂 AMI。若要尋找基礎自訂 AMI,請參閱尋找 Linux AMI

  • 對於低於 7 倍的 Amazon EMR 版本,不支援 Amazon 2023 AMI。

  • Amazon EMR 5.30.0 及更高版本和 Amazon EMR 6.x 系列以 Amazon Linux 2 為基礎。對於這些 Amazon EMR 版本,您需要使用以適用於自訂 AMI 的 Amazon Linux 2 為基礎的映像。若要尋找基礎自訂 AMI,請參閱尋找 Linux AMI

  • 低於 5.30.0 和 6.x 的 Amazon EMR 版本不支援 Amazon Linux 2 AMI。

  • 您必須使用 64 位元的 Amazon Linux AMI。不支援 32 位元 AMI。

  • 不支援具有多個 Amazon EBS 磁碟區的 Amazon Linux AMI。

  • 以 EBS 支援的最新 Amazon Linux AMI 為基礎進行自訂。如需 Amazon Linux AMI 和對應 AMI ID 的清單,請參閱 Amazon Linux AMI

  • 不要複製現有的 Amazon EMR 執行個體快照來建立自訂 AMI。這樣會造成錯誤。

  • 僅支援 HVM 虛擬化類型以及與 Amazon EMR 相容的執行個體。在進行 AMI 自訂的過程中,務必選取 HVM 映像以及與 Amazon EMR 相容的執行個體類型。如需了解相容的執行個體和虛擬化類型,請參閱 支援的執行個體類型

  • 您的服務角色必須擁有 AMI 的啟動許可,因此 AMI 必須為公有,或者您必須是 AMI 的擁有者,或是請擁有者與您分享。

  • 在 AMI 上建立與應用程式同名的使用者會造成錯誤 (例如 hadoophdfsyarnspark)。

  • /tmp/var/emr 的內容 (如存在 AMI 上) 會在啟動期間分別移至 /mnt/tmp/mnt/var/mnt/emr。檔案會保留,但如果有大量資料,則啟動時間可能會比預期更久。

  • 如果您使用基於建立日期為 2018 年 8 月 11 日的 Amazon Linux AMI 的自訂 Amazon Linux AMI,Oozie 伺服器將無法啟動。如果您使用 Oozie,請根據具有不同建立日期的 Amazon Linux AMI ID 建立自訂 AMI。您可以使用以下 AWS CLI 命令傳回所有具有 2018.03 版本的 HVM Amazon Linux AMI 的映像 ID 清單,以及發行日期,以便您可以選擇適當的 Amazon Linux AMI 做為基礎。替換為您 MyRegion 的區域標識符,例如 us-west-2。

    aws ec2 --region MyRegion describe-images --owner amazon --query 'Images[?Name!=`null`]|[?starts_with(Name, `amzn-ami-hvm-2018.03`) == `true`].[CreationDate,ImageId,Name]' --output text | sort -rk1
  • 如果您使用具有非標準網域名稱和 AmazonProvided DNS 的 VPC,則不應使用作業系統 DNS 組態中的rotate選項。

如需詳細資訊,請參閱亞馬遜 EC2 使用者指南中的建立以 Amazon EBS 為基礎的 Linux AMI