メニュー
Amazon Elastic Compute Cloud
Linux インスタンス用ユーザーガイド

Instance Store-Backed インスタンスから AMI を作成する

次の手順では、instance store-backed インスタンスから instance store-backed AMI を作成します。開始する前に、必ず「前提条件」を参照してください。

Instance Store-Backed Amazon Linux インスタンスから AMI を作成する

このセクションでは、Amazon Linux インスタンスからの AMI の作成について説明します。以下の手順は、他の Linux ディストリビューションを実行するインスタンスでは機能しない可能性があります。Ubuntu 固有の手順については、「Instance Store-Backed Ubuntu インスタンスから AMI を作成する」を参照してください。

Amazon EC2 AMI ツールの使用準備を整えるには (HVM インスタンスのみ)

  1. Amazon EC2 AMI ツールでは、GRUB のレガシーが正常に起動する必要があります。次のコマンドを使用して GRUB をインストールします。

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

    Copy
    [ec2-user ~]$ sudo yum install -y gdisk kpartx parted

Instance Store-Backed Linux インスタンスから AMI を作成するには

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

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

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

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

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

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

      Copy
      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 ボリュームを作成アタッチ、およびマウントすることもできます。

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

      Copy
      [ec2-user ~]$ sudo -E su

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

      Copy
      [root ec2-user]#
    2. AMI バンドルを作成するには、次のパラメータを使用して ec2-bundle-vol コマンドを実行します。

      -c

      RSA 証明書のパスとファイル名

      -k

      RSA 証明書のプライベートキーのパスとファイル名

      --partition

      パーティションの種類: mbrgpt、または none。HVM インスタンスの AMI は、これがないと起動しません。

      -r

      CPU アーキテクチャ: i386 または x86_64。これを確認には、arch コマンドを実行します。

      -u

      AWS ユーザーアカウント ID

      -e

      作成されるイメージから除外するディレクトリのカンマ区切りのリスト。

      -d

      デフォルトディレクトリ /tmp にバンドルを収容する十分な領域がない場合、十分な領域のあるディレクトリへのパスが示されます。

      このコマンドと使用可能なオプションの詳細については、「ec2-bundle-vol」を参照してください。

      サンプルコマンドを以下に示します。

      Copy
      [root ec2-user]# $EC2_AMITOOL_HOME/bin/ec2-bundle-vol -k /tmp/cert/pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem -c /tmp/cert/cert-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem -u your_aws_account_id -r x86_64 -e /tmp/cert --partition gpt

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

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

      Copy
      [root ec2-user]# exit
  3. (オプション) AMI 用の image.manifest.xml ファイルで、ブロックデバイスマッピングを編集します。instance store-backed AMI は、AMI の作成時にブロックデバイスマッピングでインスタンスストアボリュームのみを指定でき、これらのマッピングは image.manifest.xml ファイルで指定されます。詳細については、「ブロックデバイスマッピング」を参照してください。

    注記

    このステップは、AMI に 1 つ以上のインスタンスストアボリュームを追加する場合にのみ必要です。

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

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

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

      Copy
      <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 コマンドを実行します。

    -b

    S3 バケットの場所: my-s3-bucket/bundle_folder/bundle_name。バケットとフォルダのパスがない場合、コマンドによって作成されます。

    -m

    image.manifest.xml へのパス。ステップ 2 で -d /path/to/bundle/storage を使用してパスを指定した場合は、このパラメータで同じパスを使用します。

    -a

    AWS アカウントアクセスキー ID

    -s

    お客様の AWS アカウントシークレットアクセスキー

    --region

    米国東部(バージニア北部) 以外のリージョンで AMI を登録する予定の場合、--region オプションと、すでにターゲットリージョンに存在するバケットパス、またはターゲットリージョンで作成できる一意のバケットパスの両方でターゲットリージョンを指定する必要があります。

    このコマンドと使用可能なオプションの詳細については、「ec2-upload-bundle」を参照してください。

    サンプルコマンドを以下に示します。

    Copy
    [ec2-user ~]$ ec2-upload-bundle -b my-s3-bucket/bundle_folder/bundle_name -m /tmp/image.manifest.xml -a your_access_key_id -s your_secret_access_key
  5. (オプション) バンドルを Amazon S3 にアップロードしたら、次の rm コマンドを使用して、インスタンスの /tmp ディレクトリからバンドルを削除できます。

    注記

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

    Copy
    [ec2-user ~]$ sudo rm /tmp/image.manifest.xml /tmp/image.part.* /tmp/image
  6. AMI を登録するには、次のパラメータを使用して register-image AWS CLI コマンドを実行します。

    --image-location

    my-s3-bucket/bundle_folder/bundle_name/image.manifest.xml

    --name

    AMI の名前

    --virtualization-type

    指定できる値は hvm および paravirtual です。

    --リージョン

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

    このコマンドと使用可能なオプションの詳細については、AWS Command Line Interface Referenceの「register-image」を参照してください。

    サンプルコマンドを以下に示します。

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

Instance Store-Backed Ubuntu インスタンスから AMI を作成する

このセクションでは、Ubuntu Linux インスタンスからの AMI の作成について説明します。以下の手順は、他の Linux ディストリビューションを実行するインスタンスでは機能しない可能性があります。Amazon Linux 固有の手順については、「Instance Store-Backed Amazon Linux インスタンスから AMI を作成する」を参照してください。

Amazon EC2 AMI ツールの使用準備を整えるには (HVM インスタンスのみ)

Amazon EC2 AMI ツールでは、GRUB のレガシーが正常に起動する必要があります。ただし、Ubuntu は GRUB 2 を使用するように設定されています。インスタンスで GRUB のレガシーを使用しているかどうか確認し、使用していない場合はインストールして設定する必要があります。

AMI ツールが正常に機能するためには、HVM インスタンスにパーティションツールがインストールされている必要もあります。

  1. GRUB Legacy (バージョン 0.9x 未満) をインスタンスにインストールする必要があります。GRUB Legacy が存在していることを確認し、必要な場合はインストールしてください。

    1. GRUB インストールのバージョンを確認します。

      Copy
      ubuntu:~$ grub-install --version grub-install (GRUB) 1.99-21ubuntu3.10

      この例では、GRUB バージョンが 0.9x よりも大きいため、GRUB のレガシーをインストールする必要があります。ステップ 2 に進みます。GRUB Legacy が既にある場合、「ステップ 2」までスキップできます。

    2. 次のコマンドを使用して grub パッケージをインストールします。

      Copy
      ubuntu:~$ sudo apt-get install -y grub

      インスタンスで GRUB Legacy が使用されていることを確認します。

      Copy
      ubuntu:~$ grub --version grub (GNU GRUB 0.97)
  2. お使いのディストリビューションのパッケージマネージャを使用して、次のパーティション管理パッケージをインストールします。

    • gdisk (ディストリビューションによっては代わりにパッケージ gptfdisk が呼び出される場合があります)。

    • kpartx

    • parted

    次の コマンドを使用します。

    Copy
    ubuntu:~$ sudo apt-get install -y gdisk kpartx parted
  3. インスタンスのカーネルパラメータを確認します。

    Copy
    ubuntu:~$ cat /proc/cmdline BOOT_IMAGE=/boot/vmlinuz-3.2.0-54-virtual root=UUID=4f392932-ed93-4f8f-aee7-72bc5bb6ca9d ro console=ttyS0 xen_emul_unplug=unnecessary

    カーネルおよびルートデバイスのパラメータ roconsole=ttyS0、および xen_emul_unplug=unnecessary を書き留めます。オプションは異なる場合があります。

  4. /boot/grub/menu.lst のカーネル エントリを確認します。

    Copy
    ubuntu:~$ grep ^kernel /boot/grub/menu.lst kernel /boot/vmlinuz-3.2.0-54-virtual root=LABEL=cloudimg-rootfs ro console=hvc0 kernel /boot/vmlinuz-3.2.0-54-virtual root=LABEL=cloudimg-rootfs ro single kernel /boot/memtest86+.bin

    console パラメータが hvc0 をポイントしている (ttyS0 ではない) こと、および xen_emul_unplug=unnecessary パラメータが未指定であることに注意してください。ここでも、オプションは異なる場合があります。

  5. /boot/grub/menu.lst ファイルを任意のテキストエディタで (vimnanoなど) で編集して、コンソールを変更し、先ほど確認したパラメータをブートエントリに追加します。

    Copy
    title Ubuntu 12.04.3 LTS, kernel 3.2.0-54-virtual root (hd0) kernel /boot/vmlinuz-3.2.0-54-virtual root=LABEL=cloudimg-rootfs ro console=ttyS0 xen_emul_unplug=unnecessary initrd /boot/initrd.img-3.2.0-54-virtual title Ubuntu 12.04.3 LTS, kernel 3.2.0-54-virtual (recovery mode) root (hd0) kernel /boot/vmlinuz-3.2.0-54-virtual root=LABEL=cloudimg-rootfs ro single console=ttyS0 xen_emul_unplug=unnecessary initrd /boot/initrd.img-3.2.0-54-virtual title Ubuntu 12.04.3 LTS, memtest86+ root (hd0) kernel /boot/memtest86+.bin
  6. カーネルエントリに適切なパラメータが含まれていることを確認します。

    Copy
    ubuntu:~$ grep ^kernel /boot/grub/menu.lst kernel /boot/vmlinuz-3.2.0-54-virtual root=LABEL=cloudimg-rootfs ro console=ttyS0 xen_emul_unplug=unnecessary kernel /boot/vmlinuz-3.2.0-54-virtual root=LABEL=cloudimg-rootfs ro single console=ttyS0 xen_emul_unplug=unnecessary kernel /boot/memtest86+.bin
  7. (Ubuntu 14.04 以降のみ) Ubuntu 14.04 で起動する instance store backed Ubuntu AMI は GPT のパーティションテーブルおよび /boot/efi にマウントされた別の EFT のパーティションを使用します。ec2-bundle-vol コマンドはこの起動パーティションをバンドルしません。そのため、次の例に示すように EFI のパーティションの /etc/fstab エントリをコメントアウトする必要があります。

    Copy
    LABEL=cloudimg-rootfs / ext4 defaults 0 0 #LABEL=UEFI /boot/efi vfat defaults 0 0 /dev/xvdb /mnt auto defaults,nobootwait,comment=cloudconfig 0 2

Instance Store-Backed Linux インスタンスから AMI を作成するには

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

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

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

      Copy
      ubuntu:~$ mkdir /tmp/cert

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

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

      Copy
      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 ボリュームを作成アタッチ、およびマウントすることもできます。

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

      Copy
      ubuntu:~$ sudo -E su

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

      Copy
      root@ubuntu:#
    2. AMI バンドルを作成するには、次のパラメータを使用して ec2-bundle-vol コマンドを実行します。

      -c

      RSA 証明書のパスとファイル名

      -k

      RSA 証明書のプライベートキーのパスとファイル名

      --partition

      パーティションの種類: mbrgpt、または none。Ubuntu 14.04 以降の HVM インスタンスの場合、--partition mbr フラグを追加して起動手順を正しくバンドルします。それ以外の場合は、新しく作成された AMI は起動しません。

      -r

      CPU アーキテクチャ: i386 または x86_64。これを確認には、arch コマンドを実行します。

      -u

      AWS ユーザーアカウント ID

      -e

      作成されるイメージから除外するディレクトリのカンマ区切りのリスト。

      -d

      デフォルトディレクトリ /tmp にバンドルを収容する十分な領域がない場合、十分な領域のあるディレクトリへのパスが示されます。

      このコマンドと使用可能なオプションの詳細については、「ec2-bundle-vol」を参照してください。

      サンプルコマンドを以下に示します。

      Copy
      root@ubuntu:# $EC2_AMITOOL_HOME/bin/ec2-bundle-vol -k /tmp/cert/pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem -c /tmp/cert/cert-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem -u your_aws_account_id -r x86_64 -e /tmp/cert --partition gpt

      イメージの作成には数分かかります。このコマンドが完了すると、tmp ディレクトリにバンドル (image.manifest.xmlと複数の image.part.xx ファイル) が含まれます。

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

      Copy
      root@ubuntu:# exit
  3. (オプション) AMI 用の image.manifest.xml ファイルで、ブロックデバイスマッピングを編集します。instance store-backed AMI は、AMI の作成時にブロックデバイスマッピングでインスタンスストアボリュームのみを指定でき、これらのマッピングは image.manifest.xml ファイルで指定されます。詳細については、「ブロックデバイスマッピング」を参照してください。

    注記

    このステップは、AMI に 1 つ以上のインスタンスストアボリュームを追加する場合にのみ必要です。

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

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

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

      Copy
      <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 コマンドを実行します。

    -b

    S3 バケットの場所: my-s3-bucket/bundle_folder/bundle_name。バケットとフォルダのパスがない場合、コマンドによって作成されます。

    -m

    image.manifest.xml へのパス。ステップ 2 で -d /path/to/bundle/storage を使用してパスを指定した場合は、このパラメータで同じパスを使用します。

    -自

    AWS アカウントアクセスキー ID

    -s

    お客様の AWS アカウントシークレットアクセスキー

    --region

    米国東部(バージニア北部) 以外のリージョンで AMI を登録する予定の場合、--region オプションと、すでにターゲットリージョンに存在するバケットパス、またはターゲットリージョンで作成できる一意のバケットパスの両方でターゲットリージョンを指定する必要があります。

    このコマンドと使用可能なオプションの詳細については、「ec2-upload-bundle」を参照してください。

    サンプルコマンドを以下に示します。

    Copy
    ubuntu:~$ ec2-upload-bundle -b my-s3-bucket/bundle_folder/bundle_name -m /tmp/image.manifest.xml -a your_access_key_id -s your_secret_access_key
  5. (オプション) バンドルを Amazon S3 にアップロードしたら、次の rm コマンドを使用して、インスタンスの /tmp ディレクトリからバンドルを削除できます。

    注記

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

    Copy
    ubuntu:~$ sudo rm /tmp/image.manifest.xml /tmp/image.part.* /tmp/image
  6. AMI を登録するには、次のパラメータを使用して register-image AWS CLI コマンドを実行します。

    マニフェストへのパス

    my-s3-bucket/bundle_folder/bundle_name/image.manifest.xml

    -n

    AMI の名前

    --virtualization-type

    指定できる値は hvm および paravirtual です。

    --リージョン

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

    このコマンドと使用可能なオプションの詳細については、AWS Command Line Interface Referenceの「register-image」を参照してください。

    サンプルコマンドを以下に示します。

    Copy
    ubuntu:~$ aws ec2 register-image my-s3-bucket/bundle_folder/bundle_name/image.manifest.xml --name AMI_name --virtualization-type hvm
  7. (Ubuntu 14.04 以降のみ) /etc/fstabの EFI エントリをコメント解除します。それ以外の場合、実行中のインスタンスは再起動できません。