カスタム AMI の使用 - Amazon EMR

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

カスタム AMI の使用

Amazon EMR 5.7.0 以降を使用する場合は、Amazon EMR 用のデフォルトの Amazon Linux AMI ではなく、カスタム Amazon Linux AMI を指定できます。カスタム AMI は、以下を実行する場合に役立ちます。

  • ブートストラップアクションを使用する代わりにアプリケーションを事前インストールして他のカスタマイズを行う。これにより、クラスターの起動時間を短縮し、スタートアップのワークフローを合理化できます。詳細と例については、「事前設定されたインスタンスからカスタム Amazon Linux AMI を作成する」を参照してください。

  • ブートストラップアクションが許可する以上の高度なクラスターおよびノード設定を実装する。

  • 5.24.0 より前のバージョンの Amazon EMR を使用している場合は、クラスターで EC2 インスタンスの EBS ルートデバイスボリューム (ブートボリューム) を暗号化します。デフォルトの AMI と同様に、カスタム AMI の最小ルートボリュームサイズは 10 GiB です。詳細については、「」を参照してください暗号化された Amazon EBS ルートデバイスボリュームを使用してカスタム AMI を作成する

    注記

    Amazon EMR バージョン 5.24.0 から、を指定するときに、セキュリティ設定オプションを使用して EBS ルートデバイスとストレージボリュームを暗号化できます。AWS KMSをキープロバイダーとして使用します。詳細については、「」を参照してくださいローカルディスクの暗号化

カスタム AMI が同じに存在する必要があります。AWSクラスターを作成するリージョン。EC2 インスタンスアーキテクチャにも一致する必要があります。たとえば、m5.xlarge インスタンスには x86_64 アーキテクチャがあります。したがって、カスタム AMI を使用して m5.xlarge をプロビジョニングするには、カスタム AMI にも x86_64 アーキテクチャが必要です。同様に、arm64 アーキテクチャを持つ m6g.xlarge インスタンスをプロビジョニングするには、カスタム AMI に arm64 アーキテクチャが必要です。インスタンスタイプの Linux AMI の識別の詳細については、「」を参照してください。Linux AMI の検索Linux インスタンス用 Amazon EC2 ユーザーガイド

重要

Amazon Linux または Amazon Linux 2 AMI (Amazon Linux マシンイメージ) を実行している Amazon EMR クラスターは、デフォルトの Amazon Linux 動作を使用し、再起動が必要な重要かつ重要なカーネル更新を自動的にダウンロードしてインストールすることはありません。これは、デフォルトの Amazon Linux AMI を実行している他の Amazon EC2 インスタンスと同じ動作です。Amazon EMR バージョンのリリース後に、再起動が必要な新しい Amazon Linux ソフトウェアアップデート(カーネル、NVIDIA、CUDA アップデートなど)が使用可能になった場合、デフォルトの AMI を実行する Amazon EMR クラスターインスタンスは、それらの更新を自動的にダウンロードおよびインストールしません。カーネルの更新を取得するには、Amazon EMR AMI をカスタマイズする最新の Amazon Linux AMI を使用する

事前設定されたインスタンスからカスタム Amazon Linux AMI を作成する

Amazon EMR 用 Amazon Linux AMI を作成するためにソフトウェアを事前インストールして他の設定を行う基本的な手順は、次のとおりです。

  • ベースの Amazon Linux AMI からインスタンスを起動します。

  • インスタンスに接続してソフトウェアをインストールし、他のカスタマイズを行います。

  • 設定したインスタンスの新しいイメージ (AMI スナップショット) を作成します。

カスタマイズ済みのインスタンスに基づいてイメージを作成したら、そのイメージを暗号化されたターゲットにコピーできます (「暗号化された Amazon EBS ルートデバイスボリュームを使用してカスタム AMI を作成する」を参照)。

チュートリアル: カスタムソフトウェアがインストールされたインスタンスから AMI を作成する

最新の Amazon Linux AMI に基づいて EC2 インスタンスを起動するには

  1. AWS CLI を使用して次のコマンドを実行し、既存の AMI からインスタンスを作成します。MyKeyName をインスタンス接続時に使用したキーペアおよび適切な Amazon Linux AMI の ID の MyAmiId で置き換えます。最新の 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. SSH 接続を使用して Linux インスタンスでシェルコマンドを実行します。詳細については、「」を参照してください。SSH を使用した Linux インスタンスへの接続Linux インスタンス用 Amazon EC2 ユーザーガイド

  2. 必要なカスタマイズを行います。例:

    sudo yum install MySoftwarePackage sudo pip install MySoftwarePackage

カスタマイズしたイメージからスナップショットを作成するには

Amazon EMR クラスターでカスタム AMI を使用する方法

カスタム AMI を使用して Amazon EMR クラスターをプロビジョニングするには、次の 2 つの方法があります。

  • クラスター内のすべての EC2 インスタンスに対して 1 つのカスタム AMI を使用します。

  • クラスターで使用されるさまざまな EC2 インスタンスタイプに異なるカスタム AMI を使用します。

EMR クラスターのプロビジョニングには、2 つのオプションのうち 1 つしか使用できず、クラスターの起動後に変更することはできません。

Amazon EMR クラスターで単一のカスタム AMI と複数のカスタム AMI を使用する場合の考慮事項
考慮事項 シングルカスタム AMI 複数のカスタム AMI

x86 プロセッサと Graviton2 プロセッサを同じクラスタ内のカスタム AMI とともに使用する

サポート外

サポート対象

AMI のカスタマイズはインスタンスタイプによって異なります

サポート外

サポート対象

実行中のクラスターに新しいタスクインスタンスグループ/フリートを追加するときに、カスタム AMI を変更します。注:既存のインスタンスグループ/フリートのカスタム AMI を変更することはできません。

サポート外

サポート対象

を使用するAWSコンソールまたはAWSクラスターを開始するための CloudFormation

サポート対象

サポートされていません。API、CLI、および SDK のみサポート可能

EMR クラスターで 1 つのカスタム AMI を使用する

を使用してクラスターを作成するときに、カスタム AMI ID を指定できます。AWS Management Console,AWS CLI、Amazon EMR SDK、Amazon EMR API、RunJobFlow, またはAWS CloudFormation

コンソールで 1 つのカスタム AMI を使用するには

  1. で Amazon EMR コンソールを開きます。https://console.aws.amazon.com/elasticmapreduce/

  2. [Create cluster (クラスターの作成)]、[Go to advanced options (詳細オプションに移動する)] の順に選択します。

  3. [Software Configuration] の [Release] で、[emr-5.7.0] 以降を選択し、アプリケーションに必要なその他のオプションを選択します。Next を選択します。

  4. [Hardware Configuration] でアプリケーションに適切な値を選択し、[Next] を選択します。

  5. []追加オプション、に対してカスタム AMI IDで値を入力し、再起動時にインストールされているすべてのパッケージを更新する[] オプションが選択されています。更新オプションの変更の詳細については、「AMI パッケージリポジトリの更新を管理する」を参照してください。

    
                            Amazon EMR カスタム AMI の選択。
  6. クラスターを起動するには、[Next] を選択してその他の設定オプションを完了します。

を使用して 1 つのカスタム AMI を指定するにはAWS CLI

  • --custom-ami-id コマンドの実行時に aws emr create-cluster パラメータを使用して AMI ID を指定します。

    次の例では、ブートボリュームが 20 GiB のカスタム AMI を使用するクラスターを指定しています。詳細については、「」を参照してください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 を使用してクラスターを作成するには、AWSCLI、AWSSDK または Amazon EMRRunJobFlowAmazon EMR API リファレンス。AWSCloudFormation とAWS現在、管理コンソールでは、複数のカスタム AMI を使用したクラスターの作成はサポートされていません。

例 を使用するを使用するAWS複数のカスタム AMI を使用してインスタンスグループクラスターを作成する CLI

の使用AWSCLI では、クラスター全体に 1 つのカスタム AMI を割り当てるか、クラスター内のすべてのインスタンスノードに複数のカスタム AMI を割り当てることができます。

次の例は、ノードタイプ(マスター、コア、タスク)にわたって 2 つのインスタンスタイプ(m5.xlarge)を使用して作成されたユニフォームインスタンスグループクラスターを示しています。各ノードには複数のカスタム AMI があります。この例は、複数のカスタム AMI 設定のいくつかの機能を示しています。

  • クラスターレベルでカスタム AMI が割り当てられていません。これは、クラスタの起動に失敗する原因となる複数のカスタム AMI と 1 つのカスタム AMI の間の競合を回避するためです。

  • クラスタは、マスター、コア、および個々のタスクノードにまたがる複数のカスタム AMI を持つことができます。これにより、プリインストールされたアプリケーション、高度なクラスター構成、暗号化された Amazon EBS ルートデバイスボリュームなど、個々の AMI のカスタマイズが可能になります。

  • インスタンスグループコアノードは、1 つのインスタンスタイプと対応するカスタム AMI のみを持つことができます。同様に、マスターノードは 1 つのインスタンスタイプと対応するカスタム AMI のみを持つことができます。

  • クラスターは複数のタスクノードを持つことができます。

aws emr create-cluster --instance-groups InstanceGroupType=MASTER,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

例 を使用するを使用するAWSCLI:複数のインスタンスタイプと複数のカスタム AMI を持つ実行中のインスタンスグループクラスターにタスクノードを追加する

の使用AWSCLI では、実行中のクラスターに追加するインスタンスグループに複数のカスタム AMI を追加できます。-CustomAmiId引数は、add-instance-groups次の例に示すように、コマンドを使用します。複数のノードで同じカスタム AMI ID(ami-123456)が使用されていることに注意してください。

aws emr create-cluster --instance-groups InstanceGroupType=MASTER,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インスタンスフリートクラスタ、複数のカスタム AMI、複数のインスタンスタイプ、オンデマンドマスター、オンデマンドコア、複数のコアおよびタスクノードを作成する CLI

aws emr create-cluster --instance-fleets InstanceFleetType=MASTER,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複数のインスタンスタイプと複数のカスタム AMI を持つ実行中のクラスターにタスクノードを追加する CLI

aws emr create-cluster --instance-fleets InstanceFleetType=MASTER,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 カーネルアップデートおよび再起動を必要とするその他のソフトウェアパッケージは更新されません。ネットワーク設定では、Amazon S3 の Amazon Linux リポジトリへの HTTP および HTTPS の出力が許可されている必要があります。そうしないと、セキュリティ更新は成功しません。

警告

カスタム AMI を指定するときに、すべてのインストールされているパッケージを再起動時に更新することを選択するようお勧めします。パッケージを更新しないことを選択すると、他のセキュリティリスクが生じます。

AWS Management Console では、[Custom AMI ID (カスタム AMI ID)] を選択するときに更新を無効にするオプションを選択できます。

AWS CLI では、create-cluster コマンドを使用するときに --repo-upgrade-on-boot NONE--custom-ami-id とともに指定できます。

Amazon EMR API を使用して、NONE向けのRepoUpgradeOnBootパラメータ。

暗号化された Amazon EBS ルートデバイスボリュームを使用してカスタム AMI を作成する

Amazon Linux AMI for Amazon EMR の Amazon EBS ルートデバイスボリュームを暗号化するには、暗号化されていない AMI から暗号化されたターゲットにスナップショットイメージをコピーします。暗号化された EBS ボリュームの作成方法の詳細については、「」を参照してください。Amazon EBS 暗号化Linux インスタンス用 Amazon EC2 ユーザーガイド。スナップショットのソース AMI としてベース Amazon Linux AMI を使用できます。または、カスタマイズしたベース Amazon Linux AMI から派生した AMI からスナップショットをコピーできます。

注記

Amazon EMR バージョン 5.24.0 から、を指定するときに、セキュリティ設定オプションを使用して EBS ルートデバイスとストレージボリュームを暗号化できます。AWS KMSをキープロバイダーとして使用します。詳細については、「」を参照してくださいローカルディスクの暗号化

外部キープロバイダーまたはAWSEBS ルートボリュームを暗号化するための KMS キー。Amazon EMR が使用するサービスロール (通常はデフォルト)EMR_DefaultRole) は、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 CMK を使用して暗号化されたルートデバイスボリュームでカスタム AMI を作成する

この例の最初のステップでは、KMS CMK の ARN を検索するか、新規作成します。キーの作成の詳細については、「」を参照してください。キーの作成AWS Key Management Serviceデベロッパーガイド。次の手順では、デフォルトのサービスロール EMR_DefaultRole をキーユーザーとしてキーポリシーに追加する方法を示します。作成または編集するキーの ARN 値を書き留めます。後で AMI を作成するときに、この ARN を使用します。

コンソールを使用して、Amazon EC2 のサービスロールを暗号化キーユーザーのリストに追加するには

  1. AWS Management Console にサインインし、AWS Key Management Service (AWS KMS) コンソール (https://console.aws.amazon.com/kms) を開きます。

  2. AWS リージョンを変更するには、ページの右上隅にあるリージョンセレクターを使用します。

  3. 使用する CMK のエイリアスを選択します。

  4. [Key Users] のキーの詳細ページで、[Add] を選択します。

  5. アタッチ[] プロパティダイアログボックスで、[Amazon EMR] サービスロールを選択します。デフォルトロールの名前は EMR_DefaultRole です。

  6. [アタッチ] を選択します。

AWS CLI を使用して暗号化された AMI を作成するには

  • AWS CLI の aws ec2 copy-image コマンドを使用して暗号化された EBS ルートデバイスボリュームとユーザーが変更したキーを持つ AMI を作成します。指定された --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 が提供されます。この ID をクラスターの作成時に指定できます。詳細については、「」を参照してくださいEMR クラスターで 1 つのカスタム AMI を使用する また、ソフトウェアをインストールし、他の設定を行うことにより、この AMI をカスタマイズすることもできます。詳細については、「」を参照してください事前設定されたインスタンスからカスタム Amazon Linux AMI を作成する

ベストプラクティスと考慮事項

Amazon EMR 用のカスタム 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-backed Amazon Linux AMI に基づいてカスタマイズします。Amazon Linux AMI および対応する AMI ID のリストについては、Amazon Linux AMI を参照してください。

  • 既存の Amazon EMR インスタンスのスナップショットをコピーしてカスタム AMI を作成しません。これを行うと、エラーになります。

  • Amazon EMR と互換性がある HVM 仮想化タイプおよびインスタンスのみがサポートされます。と互換する HVM イメージおよびインスタンスタイプを必ず選択して AMI のカスタマイズプロセスを進めます。互換性のあるインスタンスおよび仮想化タイプについては、「サポートされるインスタンスタイプ」を参照してください。

  • サービスロールには AMI での起動許可が必要であるため、AMI はパブリックであるか、ユーザーが AMI の所有者であるか、AMI を所有者と共有している必要があります。

  • AMI で作成するユーザーをアプリケーションと同じ名前 (hadoophdfsyarnspark など) にすると、エラーが発生します。

  • の内容/tmp,/var, および/emr(AMI 上に存在する場合) は/mnt/tmp,/mnt/var, および/mnt/emrそれぞれ起動中。ファイルは保持されますが、大量のデータがあると、スタートアップに予想以上の時間がかかる場合があります。

  • 作成日が 2018-08-11 の Amazon Linux AMI に基づくカスタム Amazon Linux AMI を使用すると、Oozie サーバーの起動に失敗します。Oozie を使用する場合は、異なる作成日の Amazon Linux AMI ID に基づいてカスタム AMI を作成します。以下を使用できますAWS CLIコマンドを使用すると、ベースとして適切な Amazon Linux AMI を選択できるように、リリース日とともに 2018.03 バージョンのすべての HVM Amazon Linux AMI のイメージ ID のリストが返されます。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
  • 非標準ドメイン名と AmazonProvidedDNS を持つ VPC を使用する場合は、rotateオペレーティングシステムの DNS 構成のオプションを指定します。

詳細については、「」を参照してください。Amazon EBS-backed Linux AMI の作成Linux インスタンス用 Amazon EC2 ユーザーガイド