メニュー
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 を作成する」を参照してください。

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

  1. 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 Amazon 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 シェルにいることを示すハッシュタグにドル記号が置き換えられたことに注意してください。

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

      Copy
      [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

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

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

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

    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 インスタンスストアボリュームの新しいエントリを示しています。

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

    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

    重要

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

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

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

    重要

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

  6. AMI を登録するには、次のように 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

    重要

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

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

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

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

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 にマウントされた別の EFI のパーティションを使用します。ec2-bundle-vol コマンドはこの起動パーティションをバンドルしません。そのため、次の例に示すように EFI のパーティションの /etc/fstab エントリをコメントアウトする必要があります。

    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 Ubuntu インスタンスから 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 シェルにいることを示すハッシュタグにドル記号が置き換えられたことに注意してください。

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

      Copy
      root@ubuntu:# 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

      重要

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

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

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

      Copy
      root@ubuntu:# exit
  3. (オプション) インスタンスストアをさらに追加するには、AMI 用の image.manifest.xml ファイルで、ブロックデバイスマッピングを編集します。詳細については、「ブロックデバイスマッピング」を参照してください。

    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 インスタンスストアボリュームの新しいエントリを示しています。

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

    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

    重要

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

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

    Copy
    ubuntu:~$ sudo rm /tmp/image.manifest.xml /tmp/image.part.* /tmp/image

    重要

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

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

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

    重要

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

  7. (Ubuntu 14.04 以降) /etc/fstab の EFI エントリをコメント解除します。それ以外の場合、実行中のインスタンスは再起動できません。