Usar uma AMI personalizada - Amazon EMR

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Usar uma AMI personalizada

Ao usar o Amazon EMR 5.7.0 ou posterior, você pode optar por especificar uma AMI personalizada do Amazon Linux em vez da AMI padrão do Amazon Linux para o Amazon EMR. Uma AMI personalizada é útil se você deseja fazer o seguinte:

  • Pré-instale aplicativos e realize outras personalizações em vez de usar ações de bootstrap. Isso pode melhorar o tempo de início do cluster e agilizar o fluxo de trabalho de inicialização. Para obter mais informações e um exemplo, consulte Criar uma AMI do Amazon Linux personalizada com base em uma instância pré-configurada.

  • Implementar configurações de cluster e o nó mais sofisticadas do que o permitido por ações de bootstrap.

  • Criptografar os volumes do dispositivo raiz (volumes de inicialização) do EBS de instâncias do EC2 no cluster se você estiver usando uma versão do Amazon EMR anterior à 5.24.0. Assim como ocorre com a AMI padrão, o tamanho mínimo do volume raiz para uma AMI personalizada é de 10 GiB nas versões 6.9 e inferiores do Amazon EMR e de 15 GiB nas versões 6.10 e superiores do Amazon EMR. Para ter mais informações, consulte Criar uma AMI personalizada com o volume do dispositivo raiz do Amazon EBS criptografado.

    nota

    A partir da versão 5.24.0 do Amazon EMR, você pode usar uma opção de configuração de segurança para criptografar o dispositivo raiz e os volumes de armazenamento do EBS ao especificar como seu provedor de chaves. AWS KMS Para ter mais informações, consulte Criptografia de disco local.

Uma AMI personalizada deve existir na mesma AWS região em que você cria o cluster. Também deve corresponder à arquitetura da instância do EC2. Por exemplo, uma instância m5.xlarge tem a arquitetura x86_64. Portanto, para provisionar uma instância m5.xlarge usando uma AMI personalizada, a AMI personalizada também deverá ter a arquitetura x86_64. Da mesma forma, para provisionar uma instância m6g.xlarge, que tem a arquitetura arm64, a AMI personalizada deverá ter a arquitetura arm64. Para obter mais informações sobre como identificar uma AMI Linux para seu tipo de instância, consulte Encontre uma AMI Linux no Guia do usuário do Amazon EC2.

Importante

Os clusters do EMR que executam imagens de máquina da Amazon (AMIs) do Amazon Linux ou do Amazon Linux 2 usam o comportamento padrão do Amazon Linux e não baixam nem instalam automaticamente atualizações importantes e críticas do kernel que exigem reinicialização. É o mesmo comportamento de outras instâncias do Amazon EC2 que executam a AMI padrão do Amazon Linux. Se novas atualizações de software do Amazon Linux que exigem reinicialização (como atualizações do kernel, NVIDIA e CUDA) forem disponibilizadas após o lançamento de uma versão do Amazon EMR, as instâncias de cluster do Amazon EMR que executam a AMI padrão não baixarão nem instalarão essas atualizações automaticamente. Para obter atualizações do kernel, você pode personalizar sua AMI do Amazon EMR para usar a AMI do Amazon Linux mais recente.

Criar uma AMI do Amazon Linux personalizada com base em uma instância pré-configurada

As etapas básicas para pré-instalar softwares e realizar outras configurações para criar uma AMI personalizada do Amazon Linux para o Amazon EMR são as seguintes:

  • Execute uma instância a partir da AMI base do Amazon Linux.

  • Conecte-se à instância para instalar o software e realizar outras personalizações.

  • Crie uma nova imagem (snapshot da AMI) da instância configurada.

Depois de criar a imagem com base na sua instância personalizada, você pode copiar essa imagem para um destino criptografado conforme descrito em Criar uma AMI personalizada com o volume do dispositivo raiz do Amazon EBS criptografado.

Tutorial: criar uma AMI de uma instância com softwares personalizados instalados

Para executar uma instância do EC2 baseada na AMI Amazon Linux mais recente
  1. Use o AWS CLI para executar o comando a seguir, que cria uma instância a partir de uma AMI existente. MyKeyNameSubstitua pelo par de chaves que você usa para se conectar à instância e MyAmiIdpelo ID de uma Amazon Linux AMI apropriada. Para os IDs de AMI mais recentes, consulte Amazon Linux AMI.

    nota

    Os caracteres de continuação de linha do Linux (\) são incluídos para facilitar a leitura. Eles podem ser removidos ou usados ​​em comandos do Linux. No Windows, remova-os ou substitua-os por um sinal de interpolação (^).

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

    O valor de saída InstanceId é usado como MyInstanceId na próxima etapa.

  2. Execute o seguinte comando:

    aws ec2 describe-instances --instance-ids MyInstanceId

    O valor de saída PublicDnsName é usado para se conectar à instância na próxima etapa.

Para se conectar à instância e instalar o software
  1. Use uma conexão SSH que permite executar comandos shell na sua instância Linux. Para obter mais informações, consulte Conectando-se à sua instância Linux usando SSH no Guia do usuário do Amazon EC2.

  2. Realize todas as personalizações necessárias. Por exemplo: .

    sudo yum install MySoftwarePackage sudo pip install MySoftwarePackage
Para criar um snapshot da imagem personalizada

Como usar uma AMI personalizada em um cluster do Amazon EMR

É possível usar uma AMI personalizada para provisionar um cluster do Amazon EMR de duas formas:

  • Use uma única AMI personalizada para todas as instâncias do EC2 que estão no cluster.

  • Use AMIs personalizadas diferentes para os diferentes tipos de instâncias do EC2 usadas no cluster.

É possível usar somente uma das duas opções ao provisionar um cluster do EMR e não é possível alterar depois que o cluster é iniciado.

Considerações sobre o uso de uma ou mais AMIs personalizadas em um cluster do Amazon EMR
Consideração AMI personalizada única Múltiplas AMIs personalizadas

Usar x86 e processadores Graviton2 com AMIs personalizadas no mesmo cluster

Sem suporte

Há suporte

A personalização da AMI varia conforme os tipos de instância

Sem suporte

Há suporte

Altere as AMIs personalizadas ao adicionar novos grupos ou frotas de instâncias de tarefa a um cluster em execução. Observação: não é possível alterar a AMI personalizada de grupos ou frotas de instâncias já existentes.

Sem suporte

Há suporte

Use o AWS console para iniciar um cluster

Há suporte

Sem suporte

Use AWS CloudFormation para iniciar um cluster

Há suporte

Há suporte

Usar uma única AMI personalizada em um cluster do EMR

Para especificar um ID de AMI personalizada ao criar um cluster, use uma destas opções:

Amazon EMR console
Para especificar uma única AMI personalizada usando o console
  1. Faça login no AWS Management Console e abra o console do Amazon EMR em https://console.aws.amazon.com/emr.

  2. Em EMR no EC2, no painel de navegação esquerdo, escolha Clusters e depois Criar cluster.

  3. Em Nome e aplicações, localize Opções do sistema operacional. Escolha AMI personalizada e insira o ID da AMI no campo AMI personalizada.

  4. Escolha qualquer outra opção que se aplique ao cluster.

  5. Para iniciar o cluster, escolha Criar cluster.

AWS CLI
Para especificar uma única AMI personalizada com o AWS CLI
  • Use o parâmetro --custom-ami-id para especificar o ID da AMI ao executar o comando aws emr create-cluster.

    O exemplo a seguir especifica um cluster que usa uma AMI personalizada com um único volume de inicialização de 20 GiB. Para ter mais informações, consulte Personalização do volume raiz do dispositivo do Amazon EBS.

    nota

    Os caracteres de continuação de linha do Linux (\) são incluídos para facilitar a leitura. Eles podem ser removidos ou usados ​​em comandos do Linux. No Windows, remova-os ou substitua-os por um sinal de interpolação (^).

    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

Usar múltiplas AMIs personalizadas em um cluster do Amazon EMR

Para criar um cluster usando múltiplas AMIs personalizadas, use uma destas opções:

Atualmente, o AWS Management Console não oferece suporte à criação de um cluster usando várias AMIs personalizadas.

exemplo - Use a AWS CLI para criar um cluster de grupos de instâncias usando várias AMIs personalizadas

Usando a AWS CLI versão 1.20.21 ou superior, você pode atribuir uma única AMI personalizada a todo o cluster ou pode atribuir várias AMIs personalizadas a cada nó da instância em seu cluster.

O exemplo a seguir mostra um cluster uniforme de grupos de instâncias criado com dois tipos de instância (m5.xlarge) usados em todos os tipos de nós (primário, central, de tarefa). Cada nó tem múltiplas AMIs personalizadas. O exemplo ilustra vários atributos das múltiplas configurações personalizadas de AMI:

  • Nenhuma AMI personalizada foi atribuída no nível do cluster. Isso evita conflitos entre múltiplas AMIs personalizadas e uma única AMI personalizada, o que faria com que a inicialização do cluster falhasse.

  • O cluster pode ter várias AMIs personalizadas em nós primários, centrais e individuais de tarefa. Isso permite personalizações individuais de AMI, como aplicações pré-instaladas, configurações sofisticadas de cluster e volumes de dispositivos raiz criptografados do Amazon EBS.

  • O nó central do grupo de instâncias pode ter somente um tipo de instância e a AMI personalizada correspondente. Da mesma forma, o nó primário pode ter somente um tipo de instância e a AMI personalizada correspondente.

  • O cluster pode ter múltiplos nós de tarefa.

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
exemplo - Use a AWS CLI versão 1.20.21 ou superior para adicionar um nó de tarefa a um cluster de grupos de instâncias em execução com vários tipos de instância e várias AMIs personalizadas

Usando a AWS CLI versão 1.20.21 ou superior, você pode adicionar várias AMIs personalizadas a um grupo de instâncias que você adiciona a um cluster em execução. O argumento CustomAmiId pode ser usado com o comando add-instance-groups, conforme mostrado no exemplo a seguir. O mesmo ID de múltiplas AMIs personalizadas (ami-123456) é usado em mais de um nó.

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
exemplo - Use a AWS CLI versão 1.20.21 ou superior para criar um cluster de frota de instâncias, várias AMIs personalizadas, vários tipos de instância, primária sob demanda, núcleo sob demanda, vários núcleos e nós de tarefas
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}']
exemplo - Use a AWS CLI versão 1.20.21 ou superior para adicionar nós de tarefas a um cluster em execução com vários tipos de instância e várias AMIs personalizadas
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}']

Gerenciar atualizações do repositório de pacotes de AMI

Na primeira inicialização, por padrão, as AMIs do Amazon Linux conectam-se a repositórios de pacotes para instalar atualizações de segurança antes da inicialização de outros serviços. Dependendo dos seus requisitos, você tem a opção de desabilitar essas atualizações ao especificar uma AMI personalizada para o Amazon EMR. A opção para desabilitar esse recurso está disponível somente quando você usa uma AMI personalizada. Por padrão, as atualizações de kernel do Amazon Linux e de outros pacotes de software que exigem uma reinicialização não são atualizados. A configuração de rede deve permitir a saída de HTTP e HTTPS para repositórios do Amazon Linux no Amazon S3, senão as atualizações de segurança não terão êxito.

Atenção

Recomendamos que você opte por atualizar todos os pacotes instalados na reinicialização, ao especificar uma AMI personalizada. Se os pacotes de atualização não forem atualizados, poderá haver riscos de segurança adicionais.

Com o AWS Management Console, você pode selecionar a opção de desativar as atualizações ao escolher a AMI personalizada.

Com o AWS CLI, você pode especificar --repo-upgrade-on-boot NONE junto com --custom-ami-id ao usar o create-cluster comando.

Com a API do Amazon EMR, você pode especificar NONE o RepoUpgradeOnBootparâmetro.

Criar uma AMI personalizada com o volume do dispositivo raiz do Amazon EBS criptografado

Para criptografar o volume do dispositivo raiz do Amazon EBS de uma AMI do Amazon LInux para o Amazon EMR, copie uma imagem de snapshot de uma AMI não criptografada em um destino criptografado. Para obter informações sobre a criação de volumes criptografados do EBS, consulte a criptografia do Amazon EBS no Guia do usuário do Amazon EC2. A AMI de origem para o snapshot pode ser a AMI base do Amazon Linux, ou é possível copiar um snapshot de uma AMI derivada da AMI base do Amazon Linux que você personalizou.

nota

A partir da versão 5.24.0 do Amazon EMR, você pode usar uma opção de configuração de segurança para criptografar o dispositivo raiz e os volumes de armazenamento do EBS ao especificar como seu provedor de chaves. AWS KMS Para ter mais informações, consulte Criptografia de disco local.

Você pode usar um provedor de chave externo ou uma chave AWS KMS para criptografar o volume raiz do EBS. O perfil de serviço usado pelo Amazon EMR (geralmente o EMR_DefaultRole padrão) deve ter permissão para criptografar e descriptografar o volume, pelo menos, para o Amazon EMR criar um cluster usando a AMI. Ao usar AWS KMS como provedor de chaves, isso significa que as seguintes ações devem ser permitidas:

  • kms:encrypt

  • kms:decrypt

  • kms:ReEncrypt*

  • kms:CreateGrant

  • kms:GenerateDataKeyWithoutPlaintext"

  • kms:DescribeKey"

A maneira mais simples de fazer isso é adicionar o perfil como um usuário de chave, conforme descrito no seguinte tutorial. O exemplo a seguir de declaração de política é fornecido caso você precise personalizar as políticas de função.

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

Tutorial: criar uma AMI personalizada com o volume do dispositivo raiz criptografado usando uma chave do KMS

A primeira etapa deste exemplo é localizar o ARN de uma chave do KMS ou criar uma nova. Para obter mais informações sobre como criar chaves, consulte Creating keys no Guia do desenvolvedor do AWS Key Management Service . O procedimento a seguir mostra como adicionar a função de serviço padrão, EMR_DefaultRole, como um usuário e chave à política de chave. Anote o valor do ARN (Nome de recurso da Amazon) para a chave ao criá-lo ou editá-lo. Você usará o ARN posteriormente, quando criar a AMI.

Adicionar o perfil de serviço do Amazon EC2 à lista de usuários de chave de criptografia usando o console
  1. Faça login AWS Management Console e abra o console AWS Key Management Service (AWS KMS) em https://console.aws.amazon.com/kms.

  2. Para alterar o Região da AWS, use o seletor de região no canto superior direito da página.

  3. Escolha o alias da chave do KMS a ser usada.

  4. Na página de detalhes da chave, em Key Users (Usuários de chaves), escolha Add (Adicionar).

  5. Na caixa de diálogo Anexar, escolha o perfil de serviço do Amazon EMR. O nome da função padrão é EMR_DefaultRole.

  6. Escolha Anexar.

Para criar uma AMI criptografada com o AWS CLI
  • Use o aws ec2 copy-image comando do AWS CLI para criar uma AMI com um volume de dispositivo raiz do EBS criptografado e a chave que você modificou. Substitua o valor --kms-key-id especificado com o ARN completo da chave que você criou ou modificou anteriormente.

    nota

    Os caracteres de continuação de linha do Linux (\) são incluídos para facilitar a leitura. Eles podem ser removidos ou usados ​​em comandos do Linux. No Windows, remova-os ou substitua-os por um sinal de interpolação (^).

    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

A saída do comando fornece o ID da AMI que você criou, que você pode especificar quando ao criar um cluster. Para ter mais informações, consulte Usar uma única AMI personalizada em um cluster do EMR. Você também pode optar por personalizar essa AMI instalando softwares e realizando outras configurações. Para ter mais informações, consulte Criar uma AMI do Amazon Linux personalizada com base em uma instância pré-configurada.

Práticas recomendadas e considerações

Ao criar uma AMI personalizada para o Amazon EMR, considere o seguinte:

  • A série 7.x do Amazon EMR é baseada no Amazon Linux 2023. Para essas versões do Amazon EMR, você precisa usar imagens baseadas no Amazon Linux 2023 para AMIs personalizadas. Para localizar uma AMI personalizada básica, consulte Localizar AMI do Linux.

  • Para versões do Amazon EMR inferiores a 7.x, as AMIs do Amazon Linux 2023 não são suportadas.

  • O Amazon EMR 5.30.0, e posteriores, e a série Amazon EMR 6.x são baseados no Amazon Linux 2. Para essas versões do Amazon EMR, é preciso usar imagens baseadas no Amazon Linux 2 para AMIs personalizadas. Para localizar uma AMI personalizada básica, consulte Localizar AMI do Linux.

  • Em versões anteriores a 5.30.0 e 6.x do Amazon EMR, não há suporte para AMIs do Amazon Linux 2.

  • É necessário usar uma AMI do Amazon Linux de 64 bits. Não há suporte para AMI de 32 bits.

  • Não há suporte para AMIs do Amazon Linux com múltiplos volumes do Amazon EBS.

  • Baseie sua personalização na AMI Amazon Linux mais recente com suporte do EBS. Para obter uma lista das Amazon Linux AMIs e os IDs das AMIs correspondentes, consulte AMI do Amazon Linux.

  • Não copie um snapshot de uma instância existente do Amazon EMR para criar uma AMI personalizada. Isto provoca erros.

  • Há suporte apenas para o tipo de virtualização de HVM e instâncias compatíveis com o Amazon EMR. Não se esqueça de selecionar a imagem HVM e um tipo de instância compatível com o Amazon EMR conforme você percorre o processo de personalização da AMI. Para conhecer os tipos de virtualização e instâncias compatíveis, consulte Tipos de instâncias compatíveis.

  • Sua função de serviço deve ter permissão de execução na AMI e, portanto, a AMI deve ser pública, ou você deve ser o proprietário da AMI ou ter recebido direito de compartilhamento do respectivo proprietário.

  • Criar usuários na AMI com o mesmo nome que aplicativos provoca erros (por exemplo, hadoop, hdfs, yarn ou spark).

  • O conteúdo de /tmp, /var e /emr (se existirem na AMI) é movido para /mnt/tmp, /mnt/var e /mnt/emr, respectivamente, durante a inicialização. Os arquivos são preservados, mas, se houver uma grande quantidade de dados, a inicialização poderá demorar mais do que o esperado.

  • Se você usar uma AMI do Amazon Linux personalizada com base em uma AMI do Amazon Linux com data de criação 11/8/2018, o servidor Oozie falhará ao iniciar. Se você usar o Oozie, crie uma AMI personalizada com base em um ID de AMI do Amazon Linux com uma data de criação diferente. Você pode usar o AWS CLI comando a seguir para retornar uma lista de IDs de imagem para todas as AMIs HVM Amazon Linux com uma versão 2018.03, junto com a data de lançamento, para que você possa escolher uma Amazon Linux AMI apropriada como sua base. MyRegion Substitua pelo seu identificador de região, como 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
  • Nos casos em que você usa uma VPC com um nome de domínio e AmazonProvided DNS não padrão, você não deve usar a rotate opção na configuração de DNS do sistema operacional.

Para obter mais informações, consulte Criação de uma AMI Linux baseada no Amazon EBS no Guia do usuário do Amazon EC2.