Instance Store-Backed インスタンスからの AMI の作成 - Amazon Elastic Compute Cloud

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 をインストールします。

    [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 ファイルで、ブロックデバイスマッピングを編集します。詳細については、ブロックデバイスマッピング を参照してください。

    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 my-s3-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 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 インストールのバージョンを確認します。

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

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

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

      ubuntu:~$ sudo apt-get install -y grub
  2. お使いのディストリビューションのパッケージマネージャを使用して、次のパーティション管理パッケージをインストールします。

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

    • kpartx

    • parted

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

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

    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 でカーネルエントリを確認してください。

    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 など) で編集して、コンソールを変更し、先ほど確認したパラメータをブートエントリに追加します。

    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. カーネルエントリに適切なパラメータが含まれていることを確認します。

    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. 次のように、認証情報のための一時ディレクトリをインスタンスに作成します。

      ubuntu:~$ 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 を実行する必要があります。

      ubuntu:~$ sudo -E su

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

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

      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 シェルを終了します。

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

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

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

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

    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
    重要

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

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

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

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

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

    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 エントリをコメント解除します。それ以外の場合、実行中のインスタンスは再起動できません。