instance store-backed AMI を作成する - Amazon Elastic Compute Cloud

instance store-backed AMI を作成する

インスタンスの起動時に指定する AMI によってルートデバイスボリュームのタイプが決まります。

Instance Store-Backed Linux AMI を作成するには、既存の Instance Store-Backed Linux AMI から起動したインスタンスから始めます。ニーズに合わせてインスタンスをカスタマイズしたら、ボリュームをバンドルし、新しい AMI を登録します。新しい AMI を使用して、カスタマイズした新しいインスタンスを起動できます。

Windows AMI はルートデバイスのインスタンスストアをサポートしていないため、インスタンスストアでバッキングされた Windows AMI を作成することはできません。

重要

インスタンスストアボリュームをルートデバイスとしてサポートし、instance store-backed AMI を必要とするインスタンスタイプは C1、C3、D2、I2、M1、M2、M3、R3、X1 のみです。

AMI の作成プロセスは、Amazon EBS-backed AMI の場合とは異なります。詳細については、「Amazon EBS-backed AMI を作成する」を参照してください。

AMI 作成の概要

次の図は、Instance Store-Backed インスタンスから AMI を作成するプロセスをまとめたものです。

Instance Store-Backed AMI の作成。

最初に、作成する AMI と同様の AMI からインスタンスを起動します。インスタンスに接続し、それをカスタマイズできます。インスタンスのカスタマイズが終わったら、それをバンドルできます。バンドルプロセスが完了するには数分間かかります。プロセスが完了すると、イメージマニフェスト (image.manifest.xml) とルートボリューム用のテンプレートを含むファイル (image.part.xx) で構成されるバンドルが作成されます。次に、バンドルを Amazon S3 バケットにアップロードし、AMI を登録します。

注記

instance store-backed Linux AMI の S3 バケットにオブジェクトをアップロードするには、バケットで ACL を有効にする必要があります。有効にしない場合、Amazon EC2 はアップロードするオブジェクトに ACL を設定できません。宛先のバケットが S3 オブジェクトの所有権のバケット所有者強制設定を使用している場合、ACL が無効になるため、この方法は使えません。詳細については、「S3 オブジェクトの所有権を使用したアップロードされたオブジェクトの所有権の管理」を参照してください。

お客様が新しい AMI を使用してインスタンスを起動すると、Amazon はユーザーが Amazon S3 にアップロードしたバンドルを使用してインスタンスのルートボリュームを作成します。Amazon S3 のバンドルで使用されるストレージ領域については、お客様がその領域を削除するまでアカウントに料金が発生します。詳細については、Amazon EC2 AMI の登録を解除する を参照してください。

ルートデバイスボリュームに加えて、インスタンスストアボリュームをインスタンスに追加した場合、新しい AMI のブロックデバイスマッピングにこれらのボリュームの情報が含まれ、新しい AMI から起動するインスタンスのブロックデバイスマッピングに自動的にこれらのボリュームの情報が含まれます。詳細については、Amazon EC2 インスタンスでのボリュームのブロックデバイスマッピング を参照してください。

前提条件

AMI を作成するには、最初に次のタスクを完了する必要があります。

  • AMI ツールをインストールします。詳細については、Amazon EC2 AMI ツールのセットアップ を参照してください。

  • AWS CLI をインストールします。詳細については、「AWS Command Line Interface のセットアップ」を参照してください。

  • バンドルに S3 バケットがあり、バケットに ACL が有効になっていることを確認します。ACL の設定の詳細については、「ACL の設定」を参照してください。

    • AWS Management Console を使用して S3 バケットを作成するには、https://console.aws.amazon.com/s3/ で Amazon S3 コンソールを開き、[Create Bucket] を選択します。

    • AWS CLI で S3 バケットを作成するには、「mb」コマンドを使用できます。インストールしている AMI ツールのバージョンが 1.5.18 以降の場合は、ec2-upload-bundle コマンドを使用して S3 バケットを作成することもできます。詳細については、「ec2-upload-bundle」を参照してください。

  • バンドル内のファイルが S3 バケットで暗号化されていないことを確認します。AMI に暗号化が必要な場合は、代わりに EBS-backed AMI を使用できます。詳細については、「EBS-backed AMI での暗号化の利用」を参照してください。

  • AWS アカウント ID があることを確認します。詳細については、「AWS アカウント管理リファレンスガイド」の「View AWS アカウント identifiers」を参照してください。

  • AWS CLI を使用するのに必要な認証情報があることを確認します。詳細については、AWS Account Management リファレンスガイドの「AWS アカウントのベストプラクティス」を参照してください。

  • X.509 証明書および対応するプライベートキーがあることを確認します。

    • X.509 証明書を作成する必要がある場合は、「署名証明書の管理」を参照してください。X.509 証明書とプライベートキーは、AMI の暗号化/復号に使用されます。

    • [中国 (北京)] $EC2_AMITOOL_HOME/etc/ec2/amitools/cert-ec2-cn-north-1.pem 証明書を使用します。

    • [AWS GovCloud (米国 – 西部)] $EC2_AMITOOL_HOME/etc/ec2/amitools/cert-ec2-gov.pem 証明書を使用します。

  • インスタンスに接続し、カスタマイズします。例えば、ソフトウェアとアプリケーションをインストールしたり、データをコピーしたり、一時ファイルを削除したり、Linux 設定を変更したりできます。

Amazon Linux インスタンスから AMI を作成する

次の手順では、Amazon Linux 1 を実行する instance store-backed インスタンスから AMI を作成する方法について説明します。他の Linux ディストリビューションを実行するインスタンスでは機能しない可能性があります。

AMI ツールの使用準備を整えるには (HVM インスタンスのみ)
  1. AMI ツールでは、GRUB のレガシーが正常に起動する必要があります。次のコマンドを使用して GRUB をインストールします。

    [ec2-user ~]$ sudo yum install -y grub
  2. 次のコマンドを使用して、パーティション管理パッケージをインストールします。

    [ec2-user ~]$ sudo yum install -y gdisk kpartx parted
Instance Store-Backed Amazon Linux インスタンスから AMI を作成するには

この手順では、「前提条件」に記載された前提条件が満たされていることを前提としています。

次のコマンドでは、ユーザー入力プレースホルダーをユーザー自身の情報で置き換えます。

  1. インスタンスに認証情報をアップロードします。Amazon ではこれらの認証情報を使用して、お客様と Amazon EC2 だけがお客様の AMI にアクセスできるようにします。

    1. 次のように、認証情報のための一時ディレクトリをインスタンスに作成します。

      [ec2-user ~]$ mkdir /tmp/cert

      それにより、作成したイメージから認証情報を除外できます。

    2. scp などの安全なコピーツールを使用して、コンピュータからインスタンスの /tmp/cert ディレクトリに X.509 証明書と対応するプライベートキーをコピーします。次の -i my-private-key.pem コマンドの scp オプションは、X.509 プライベートキーではなく、SSH でインスタンスに接続するために使用するプライベートキーです。次に例を示します。

      you@your_computer:~ $ scp -i my-private-key.pem /path/to/pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem /path/to/cert-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem ec2-user@ec2-203-0-113-25.compute-1.amazonaws.com:/tmp/cert/ pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem 100% 717 0.7KB/s 00:00 cert-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem 100% 685 0.7KB/s 00:00

    または、これらがプレーンテキストファイルの場合、証明書とキーをテキストエディタで開き、コンテンツを /tmp/cert の新しいファイルにコピーできます。

  2. インスタンス内から ec2-bundle-vol コマンドを実行して、Amazon S3 にアップロードするバンドルを準備します。-e オプションを指定して、認証情報を保存するディレクトリを除外します。デフォルトでは、バンドルプロセスで機密情報を含んでいる可能性があるファイルを除外します。ファイルには、*.sw*.swo*.swp*.pem*.priv*id_rsa**id_dsa**.gpg*.jks*/.ssh/authorized_keys*/.bash_history などがあります。これらのファイルをすべて含めるには、--no-filter オプションを使用します。これらのファイルの一部を含めるには、--include オプションを使用します。

    重要

    AMI バンドルプロセスは、デフォルトで、ルートボリュームを表す /tmp ディレクトリに、圧縮され暗号化された一連のファイルを作成します。バンドルを格納するのに十分な空きディスク領域が /tmp にない場合、-d /path/to/bundle/storage オプションを使用して、バンドルを格納する別の場所を指定する必要があります。インスタンスによっては、エフェメラルストレージが /mnt または /media/ephemeral0 にマウントされて使用可能になっている場合があります。または、バンドルを格納する新しい Amazon EBS ボリュームを作成、アタッチ、およびマウントすることもできます。詳細については、「Amazon EBS ユーザーガイド」の「Amazon EBS ボリュームの作成」を参照してください。

    1. ec2-bundle-vol コマンドは、root として実行する必要があります。ほとんどのコマンドで、sudo を使用することでアクセス許可を昇格させることができますが、この場合は、環境変数を維持するために sudo -E su を実行する必要があります。

      [ec2-user ~]$ sudo -E su

      これで、bash プロンプトにより root ユーザーとして識別されるようになったことと、root シェルにいることを示すハッシュタグにドル記号が置き換えられたことに注意してください。

      [root ec2-user]#
    2. AMI のバンドルを作成するには、次のように ec2-bundle-vol コマンドを実行します。

      [root ec2-user]# ec2-bundle-vol -k /tmp/cert/pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem -c /tmp/cert/cert-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem -u 123456789012 -r x86_64 -e /tmp/cert --partition gpt
      注記

      中国 (北京) および AWS GovCloud (米国 – 西部) リージョンについては、--ec2cert パラメータを使用し、前提条件に従って証明書を指定します。

      イメージの作成には数分かかります。このコマンドが完了したら、/tmp (またはデフォルト以外の) ディレクトリにバンドルが含まれます (image.manifest.xml、および複数の image.part.xx ファイル)。

    3. root シェルを終了します。

      [root ec2-user]# exit
  3. (オプション) インスタンスストアをさらに追加するには、AMI 用の image.manifest.xml ファイルで、ブロックデバイスマッピングを編集します。詳細については、Amazon EC2 インスタンスでのボリュームのブロックデバイスマッピング を参照してください。

    1. image.manifest.xml ファイルのバックアップを作成します。

      [ec2-user ~]$ sudo cp /tmp/image.manifest.xml /tmp/image.manifest.xml.bak
    2. image.manifest.xml ファイルの形式を変更し、読み取りと編集が簡単になるようにします。

      [ec2-user ~]$ sudo xmllint --format /tmp/image.manifest.xml.bak > /tmp/image.manifest.xml
    3. テキストエディタで image.manifest.xml のブロックデバイスマッピングを編集します。次の例は、ephemeral1 インスタンスストアボリュームの新しいエントリを示しています。

      注記

      無効な種類のファイルの一覧については、「ec2-bundle-vol」を参照してください。

      <block_device_mapping> <mapping> <virtual>ami</virtual> <device>sda</device> </mapping> <mapping> <virtual>ephemeral0</virtual> <device>sdb</device> </mapping> <mapping> <virtual>ephemeral1</virtual> <device>sdc</device> </mapping> <mapping> <virtual>root</virtual> <device>/dev/sda1</device> </mapping> </block_device_mapping>
    4. image.manifest.xml ファイルを保存し、テキストエディタを終了します。

  4. バンドルを Amazon S3 にアップロードするには、次のように ec2-upload-bundle コマンドを実行します。

    [ec2-user ~]$ ec2-upload-bundle -b amzn-s3-demo-bucket/bundle_folder/bundle_name -m /tmp/image.manifest.xml -a your_access_key_id -s your_secret_access_key
    重要

    US East (N. Virginia) 以外のリージョンで AMI を登録するには、--region オプションと、すでにターゲットリージョンに存在するバケットパス、またはターゲットリージョンで作成できる一意のバケットパスの両方でターゲットリージョンを指定する必要があります。

  5. (オプション) バンドルを Amazon S3 にアップロードしたら、次の /tmp コマンドを使用して、インスタンスの rm ディレクトリからバンドルを削除できます。

    [ec2-user ~]$ sudo rm /tmp/image.manifest.xml /tmp/image.part.* /tmp/image
    重要

    -d /path/to/bundle/storageステップ 2 オプションを使用してパスを指定した場合は、/tmp ではなくそのパスを使用します。

  6. AMI を登録するには、次のように register-image コマンドを実行します。

    [ec2-user ~]$ aws ec2 register-image --image-location amzn-s3-demo-bucket/bundle_folder/bundle_name/image.manifest.xml --name AMI_name --virtualization-type hvm
    重要

    ec2-upload-bundle コマンドでリージョンを以前に指定した場合は、このコマンドでもう一度そのリージョンを指定します。