Utilizzo di un'AMI personalizzata - Amazon EMR

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Utilizzo di un'AMI personalizzata

Se utilizzi Amazon EMR 5.7.0 o versioni successive, puoi scegliere di specificare un'AMI Amazon Linux personalizzata anziché l'AMI Amazon Linux predefinita per Amazon EMR. Un'AMI personalizzata è utile se desideri effettuare le seguenti operazioni:

  • Preinstallazione delle applicazioni ed esecuzione di altre personalizzazioni invece di utilizzare operazioni di bootstrap. In questo modo è possibile migliorare il tempo di avvio del cluster e semplificare il flusso di lavoro di startup. Per ulteriori informazioni e un esempio, consulta Creazione di un'AMI Amazon Linux personalizzata da un'istanza preconfigurata.

  • Implementazione di configurazioni per cluster e nodo più sofisticate di quelle consentite dalle operazioni di bootstrap.

  • Esegui la crittografia dei volumi del dispositivo root EBS (volumi di avvio) di istanze EC2 nel cluster se utilizzi una versione di Amazon EMR precedente a 5.24.0. Come per l'AMI predefinita, la dimensione minima del volume root per un'AMI personalizzata è 10 GiB per Amazon EMR rilascio 6.9 e precedenti e 15 GiB per Amazon EMR rilascio 6.10 e successivi. Per ulteriori informazioni, consulta Creazione di un'AMI personalizzata con un volume del dispositivo di root Amazon EBS crittografato.

    Nota

    A partire dalla versione 5.24.0 di Amazon EMR, puoi utilizzare un'opzione di configurazione di sicurezza per crittografare il dispositivo root e i volumi di storage EBS quando lo specifichi come provider di chiavi. AWS KMS Per ulteriori informazioni, consulta Crittografia del disco locale.

Un AMI personalizzato deve esistere nella stessa AWS regione in cui si crea il cluster. Dovrebbe anche corrispondere all'architettura dell'istanza EC2. Ad esempio, un'istanza m5.xlarge ha un'architettura x86_64. Pertanto, per effettuare il provisioning di un m5.xlarge utilizzando un'AMI personalizzata, anche l'AMI personalizzata dovrebbe avere un'architettura x86_64. Allo stesso modo, per eseguire il provisioning di un'istanza m6g.xlarge, con architettura arm64, l'AMI personalizzata dovrebbe avere l'architettura arm64. Per ulteriori informazioni sull'identificazione di un'AMI Linux per il tipo di istanza, consulta Trovare un'AMI Linux nella Guida per l'utente di Amazon EC2 per le istanze Linux.

Importante

I cluster EMR che eseguono le AMI (Amazon Machine Images) Amazon Linux o Amazon Linux 2 utilizzano il comportamento predefinito di Amazon Linux e non scaricano e installano automaticamente aggiornamenti importanti e critici dei kernel che richiedono un riavvio. Si tratta dello stesso comportamento assunto da altre istanze Amazon EC2 che eseguono l'AMI predefinita di Amazon Linux. Se nuovi aggiornamenti software Amazon Linux che richiedono un riavvio (ad esempio, aggiornamenti del kernel, NVIDIA e CUDA) risultano disponibili dopo il rilascio di una versione di Amazon EMR, le istanze del cluster EMR che eseguono l'AMI predefinita non scaricano e installano automaticamente tali aggiornamenti. Per ottenere gli aggiornamenti del kernel, puoi personalizzare l'AMI di Amazon EMR per utilizzare l'AMI di Amazon Linux più recente.

Creazione di un'AMI Amazon Linux personalizzata da un'istanza preconfigurata

Di seguito è riportata la procedura di base per la preinstallazione di software e l'esecuzione di altre configurazioni per creare un'AMI Amazon Linux personalizzata per Amazon EMR:

  • Avvia un'istanza dall'AMI Amazon Linux di base.

  • Connessione all'istanza per l'installazione di software e l'esecuzione di altre personalizzazioni.

  • Creazione di una nuova immagine (snapshot AMI) dell'istanza configurata.

Una volta creata l'immagine in base alla tua istanza personalizzata, puoi copiare tale immagine in una destinazione crittografata, come descritto in Creazione di un'AMI personalizzata con un volume del dispositivo di root Amazon EBS crittografato.

Tutorial: creazione di un'AMI da un'istanza con software personalizzato installato

Per avviare un'istanza EC2 in base alla più recente AMI Amazon Linux
  1. Utilizzate il AWS CLI per eseguire il comando seguente, che crea un'istanza da un'AMI esistente. Sostituisci MyKeyName con la key pair che usi per connetterti all'istanza e MyAmiIdcon l'ID di un'AMI Amazon Linux appropriata. Per gli ID AMI più recenti, consulta AMI Amazon Linux.

    Nota

    I caratteri di continuazione della riga Linux (\) sono inclusi per la leggibilità. Possono essere rimossi o utilizzati nei comandi Linux. Per Windows, rimuoverli o sostituirli con un accento circonflesso (^).

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

    Il valore di output InstanceId viene usato come MyInstanceId nella fase successiva.

  2. Esegui il comando seguente:

    aws ec2 describe-instances --instance-ids MyInstanceId

    Il valore di output PublicDnsName viene usato per connettersi all'istanza nella fase successiva.

Per connettersi all'istanza e installare il software
  1. Utilizza una connessione SSH che consente di eseguire comandi shell sull'istanza di Linux. Per ulteriori informazioni, consulta Connessione all'istanza Linux tramite SSH nella Guida per l'utente di Amazon EC2 per le istanze Linux.

  2. Esegui eventuali personalizzazioni necessarie. Ad esempio:

    sudo yum install MySoftwarePackage sudo pip install MySoftwarePackage
Per creare una snapshot dall'immagine personalizzata

Come utilizzare un'AMI personalizzata in un cluster Amazon EMR

Puoi utilizzare un'AMI personalizzata per eseguire il provisioning di un cluster Amazon EMR in due modi:

  • Usa un'AMI personalizzata per tutte le istanze EC2 nel cluster.

  • Utilizzare AMI personalizzate diverse per i diversi tipi di istanza EC2 utilizzati nel cluster.

È possibile utilizzare solo una delle due opzioni durante il provisioning di un cluster EMR e non è possibile modificarlo una volta avviato il cluster.

Considerazioni sull'utilizzo di AMI personalizzate singole o multiple in un cluster Amazon EMR
Considerazione AMI personalizzata singola AMI personalizzate multiple

Utilizzare processori x86 e Graviton2 con AMI personalizzate nello stesso cluster

Non supportato

Supportato

La personalizzazione di AMI varia a seconda dei tipi di istanza

Non supportato

Supportato

Modificare le AMI personalizzate quando si aggiungono nuovi gruppi/parchi istanze di processo a un cluster in esecuzione. Nota: non è possibile modificare l'AMI personalizzata dei gruppi/parchi istanze esistenti.

Non supportato

Supportato

Usa AWS Console per avviare un cluster

Supportato

Non supportato

Usa AWS CloudFormation per avviare un cluster

Supportato

Supportato

Utilizzare un'AMI personalizzata singola in un cluster EMR

Per specificare un ID AMI personalizzato al momento della creazione di un cluster, utilizzare una delle seguenti opzioni:

Amazon EMR console
Per specificare una singola AMI personalizzata dalla console
  1. Accedi a e apri AWS Management Console la console Amazon EMR all'indirizzo https://console.aws.amazon.com/emr.

  2. In EMR on EC2 (EMR su EC2), nel riquadro di navigazione a sinistra, scegli Clusters (Cluster) e seleziona Create cluster (Crea cluster).

  3. In Name and applications (Nome e applicazioni), cerca Operating system options (Opzioni del sistema operativo). Scegli Custom AMI (AMI personalizzata) e inserisci l'ID della tua AMI nel campo Custom AMI (AMI personalizzata).

  4. Scegli qualsiasi altra opzione applicabile al cluster.

  5. Per avviare il cluster, scegli Create cluster (Crea cluster).

AWS CLI
Per specificare una singola AMI personalizzata con AWS CLI
  • Utilizza il parametro --custom-ami-id per specificare l'ID dell'AMI durante l'esecuzione del comando aws emr create-cluster.

    L'esempio seguente specifica un cluster che utilizza un'AMI personalizzata singola con 20 GiB di volume di avvio. Per ulteriori informazioni, consulta Personalizzazione del volume del dispositivo root Amazon EBS.

    Nota

    I caratteri di continuazione della riga Linux (\) sono inclusi per la leggibilità. Possono essere rimossi o utilizzati nei comandi Linux. Per Windows, rimuovili o sostituiscili con un accento circonflesso (^).

    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

Usa AMI personalizzate multiple in un cluster Amazon EMR

Per creare un cluster utilizzando più AMI personalizzate, utilizzare una delle seguenti:

La console di AWS gestione attualmente non supporta la creazione di un cluster utilizzando più AMI personalizzate.

Esempio - Utilizza la AWS CLI per creare un cluster di gruppi di istanze utilizzando più AMI personalizzate

Utilizzando la versione AWS CLI 1.20.21 o successiva, puoi assegnare una singola AMI personalizzata all'intero cluster oppure puoi assegnare più AMI personalizzate a ogni nodo di istanza del cluster.

L'esempio seguente mostra un cluster di gruppi di istanze uniformi creato con due tipi di istanze (m5.xlarge) utilizzate tra i tipi di nodi (primario, principale, attività). Ogni nodo ha AMI personalizzate multiple. L'esempio illustra diverse caratteristiche della configurazione AMI personalizzata multipla:

  • Non è stata assegnata alcuna AMI personalizzata a livello di cluster. Questo per evitare conflitti tra le AMI personalizzate multiple e una AMI personalizzata singola, il che causerebbe il fallimento del avvio del cluster.

  • Il cluster può avere più AMI personalizzate tra i nodi primari, i nodi principali e i nodi attività singoli. Ciò consente personalizzazioni AMI individuali, come applicazioni preinstallate, configurazioni cluster sofisticate e volumi di dispositivi root Amazon EBS crittografati.

  • Il nodo principale del gruppo di istanze può avere un solo tipo di istanza e una corrispondente AMI personalizzata. Analogamente, il nodo primario può avere un solo tipo di istanza e una corrispondente AMI personalizzata.

  • Il cluster può avere più nodi attività.

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
Esempio - Utilizza la versione AWS CLI 1.20.21 o successiva per aggiungere un nodo di attività a un cluster di gruppi di istanze in esecuzione con più tipi di istanze e più AMI personalizzate

Utilizzando la versione AWS CLI 1.20.21 o successiva, puoi aggiungere più AMI personalizzate a un gruppo di istanze da aggiungere a un cluster in esecuzione. L'argomento CustomAmiId può essere utilizzato con il comando add-instance-groups come mostrato nell'esempio seguente. Si noti che lo stesso ID AMI personalizzate multiple (ami-123456) viene utilizzato in più di un nodo.

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
Esempio - Utilizza la versione AWS CLI 1.20.21 o successiva per creare un cluster di istanze, più AMI personalizzate, più tipi di istanze, primario On-Demand, core On-Demand, core multiplo e nodi task
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}']
Esempio - Utilizza la versione AWS CLI 1.20.21 o successiva per aggiungere nodi di attività a un cluster in esecuzione con più tipi di istanze e più AMI personalizzate
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}']

Gestione degli aggiornamenti per i repository di pacchetti AMI

Per impostazione predefinita, al primo avvio le AMI Amazon Linux si connettono ai repository di pacchetti per installare gli aggiornamenti di sicurezza prima dell'avvio di altri servizi. A seconda dei requisiti, puoi scegliere di disabilitare gli aggiornamenti quando specifichi un'AMI personalizzata per Amazon EMR. L'opzione di disattivazione di questa funzione è disponibile solo con le AMI personalizzate. Per impostazione predefinita, il kernel di Amazon Linux e altri pacchetti software che richiedono un riavvio non vengono aggiornati. Tieni presente che la tua configurazione di rete deve consentire l'uscita HTTP e HTTPS ai repository Amazon Linux in Amazon S3, altrimenti gli aggiornamenti della sicurezza non avranno esito positivo.

avvertimento

Specificando un'AMI personalizzata, consigliamo vivamente di scegliere di aggiornare tutti i pacchetti installati al riavvio. La scelta di non aggiornare pacchetti crea maggiori rischi per la sicurezza.

Con AWS Management Console, puoi selezionare l'opzione per disabilitare gli aggiornamenti quando scegli AMI personalizzata.

Con AWS CLI, è possibile specificare --repo-upgrade-on-boot NONE insieme a --custom-ami-id quando si utilizza il create-cluster comando.

Con l'API Amazon EMR, puoi specificare NONE il RepoUpgradeOnBootparametro.

Creazione di un'AMI personalizzata con un volume del dispositivo di root Amazon EBS crittografato

Per crittografare il volume del dispositivo di root Amazon EBS di un'AMI Amazon Linux per Amazon EMR, copia un'immagine snapshot da un'AMI non crittografata a una destinazione crittografata. Per ulteriori informazioni sulla creazione di volumi EBS crittografati, consulta Crittografia Amazon EBS nella Guida per l'utente di Amazon EC2 per le istanze Linux. L'AMI di origine per lo snapshot può essere l'AMI Amazon Linux di base; in alternativa, poi copiare uno snapshot da un'AMI ottenuta da un'AMI Amazon Linux di base personalizzata.

Nota

A partire dalla versione 5.24.0 di Amazon EMR, puoi utilizzare un'opzione di configurazione di sicurezza per crittografare il dispositivo root e i volumi di storage EBS quando lo specifichi come provider di chiavi. AWS KMS Per ulteriori informazioni, consulta Crittografia del disco locale.

Puoi utilizzare un provider di chiavi esterno o una chiave AWS KMS per crittografare il volume root EBS. Affinché Amazon EMR possa creare un cluster utilizzando l'AMI, il ruolo di servizio utilizzato da Amazon EMR (in genere il ruolo EMR_DefaultRole predefinito) deve essere autorizzato a crittografare e decrittare il volume. Quando si utilizza AWS KMS come fornitore di chiavi, ciò significa che devono essere consentite le seguenti azioni:

  • kms:encrypt

  • kms:decrypt

  • kms:ReEncrypt*

  • kms:CreateGrant

  • kms:GenerateDataKeyWithoutPlaintext"

  • kms:DescribeKey"

Il modo più semplice per farlo consiste nell'aggiungere il ruolo come utente chiave, come descritto nel seguente tutorial. L'esempio seguente di istruzione per policy viene fornito qualora fosse necessario personalizzare le policy di ruolo.

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

Tutorial: creazione di un'AMI personalizzata con un volume dispositivo di root crittografato tramite una chiave KMS

La prima cosa da fare in questo esempio è trovare l'ARN di una chiave KMS o crearne una nuova. Per ulteriori informazioni sulla creazione di chiavi, consulta Creazione di chiavi nella Guida per gli sviluppatori di AWS Key Management Service . La procedura riportata di seguito illustra come aggiungere il ruolo di servizio EMR_DefaultRole come utente chiave alla policy chiavi. Annota il valore ARN per la chiave quando la crei o la modifichi. L'ARN servirà in seguito, durante la creazione dell'AMI.

Aggiunta del ruolo di servizio per Amazon EC2 all'elenco degli utenti chiave di crittografia con la console
  1. Accedi AWS Management Console e apri la console AWS Key Management Service (AWS KMS) all'indirizzo https://console.aws.amazon.com/kms.

  2. Per modificare il Regione AWS, usa il selettore della regione nell'angolo in alto a destra della pagina.

  3. Scegliere l'alias della chiave KMS da utilizzare.

  4. Nella pagina dei dettagli della chiave, in Key Users (Utenti di chiavi), scegli Add (Aggiungi).

  5. Nella finestra di dialogo Attach (Collega), scegli il ruolo di servizio Amazon EMR. Il nome del ruolo di default è EMR_DefaultRole.

  6. Scegli Collega.

Per creare un'AMI crittografata con AWS CLI
  • Usa il aws ec2 copy-image comando di AWS CLI per creare un AMI con un volume del dispositivo root EBS crittografato e la chiave che hai modificato. Sostituisci il valore --kms-key-id specificato con l'ARN completo della chiave creata o modificata in precedenza.

    Nota

    I caratteri di continuazione della riga Linux (\) sono inclusi per questioni di leggibilità. Possono essere rimossi o utilizzati nei comandi Linux. Per Windows, rimuoverli o sostituirli con un accento circonflesso (^).

    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

L'output del comando fornisce l'ID dell'AMI creata, che è possibile specificare quando si crea un cluster. Per ulteriori informazioni, consulta Utilizzare un'AMI personalizzata singola in un cluster EMR. È anche possibile scegliere di personalizzare questa AMI installando software ed eseguendo altre configurazioni. Per ulteriori informazioni, consulta Creazione di un'AMI Amazon Linux personalizzata da un'istanza preconfigurata.

Best practice e considerazioni

Quando crei un'AMI personalizzata per Amazon EMR, tieni in considerazione quanto segue:

  • La serie Amazon EMR 7.x è basata su Amazon Linux 2023. Per queste versioni di Amazon EMR, devi usare immagini basate su Amazon Linux 2023 per AMI personalizzate. Per trovare un'AMI personalizzata di base, consulta Ricerca di un'AMI Linux.

  • Per le versioni di Amazon EMR precedenti alla 7.x, le AMI Amazon Linux 2023 non sono supportate.

  • Amazon EMR 5.30.0 e versioni successive e le serie Amazon EMR 6.x sono basate su Amazon Linux 2. Per queste versioni Amazon EMR, è necessario utilizzare immagini basate su Amazon Linux 2 per le AMI personalizzate. Per trovare un'AMI personalizzata di base, consulta Ricerca di un'AMI Linux.

  • Per le versioni di Amazon EMR precedenti alla 5.30.0 e alla 6.x, le AMI di Amazon Linux 2 non sono supportate.

  • È necessario utilizzare un'AMI Amazon Linux a 64 bit. Non è supportata un'AMI a 32 bit.

  • Le AMI Amazon Linux non sono supportate con più volumi Amazon EBS.

  • La personalizzazione deve basarsi sulla versione dell'AMI Amazon Linux più recente supportata da EBS. Per un elenco delle AMI Amazon Linux e dei corrispondenti ID, consulta AMI Amazon Linux.

  • Non copiare una snapshot di un'istanza Amazon EMR esistente per creare un'AMI personalizzata, perché causa errori.

  • Sono supportati solo il tipo di virtualizzazione HVM e le istanze compatibili con Amazon EMR. Assicurati di selezionare l'immagine HVM e un tipo di istanza compatibile con Amazon EMR durante il processo di personalizzazione dell'AMI. Per le istanze e i tipi di virtualizzazione compatibili, consulta Tipi di istanze supportati.

  • Il tuo servizio ruolo deve disporre di autorizzazioni di avvio per l'AMI, perciò l'AMI deve essere pubblica oppure deve essere di tua proprietà o condivisa con te dal proprietario.

  • Creare utenti dell'AMI con nome uguale a quello delle applicazioni causa errori (ad esempio, hadoop, hdfs, yarn o spark).

  • I contenuti di /tmp, /var e /emr (se presenti sull'AMI) vengono spostati rispettivamente in /mnt/tmp, /mnt/var e /mnt/emr durante lo startup. I file vengono conservati ma, in presenza di una grande quantità di dati, lo startup potrebbe richiedere più tempo del previsto.

  • Se si utilizza un'AMI Amazon Linux personalizzata basata su un'AMI Amazon Linux con una data di creazione 2018-08-11, il server Oozie non si avvia. Se si utilizza Oozie, è possibile creare un'AMI personalizzata basata su un ID AMI Amazon Linux con una data di creazione diversa. Puoi utilizzare il seguente AWS CLI comando per restituire un elenco di ID immagine per tutte le AMI Amazon Linux HVM con una versione 2018.03, insieme alla data di rilascio, in modo da poter scegliere un'AMI Amazon Linux appropriata come base. MyRegion Sostituiscilo con il tuo identificativo regionale, ad esempio 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
  • Nei casi in cui utilizzi un VPC con un nome di dominio e AmazonProvided DNS non standard, non dovresti usare l'rotateopzione nella configurazione DNS dei sistemi operativi.

Per maggiori informazioni consulta Creazione di AMI Linux supportate da Amazon EBS nella Guida per l'utente di Amazon EC2 per le istanze Linux.